프로그래밍/JAVA

자바 - [객체지향프로그래밍]-생성자와 생성자 오버로딩(3)

개발자 덕구🐾 2021. 7. 28. 21:55
728x90

 [1] 객체지향 프로그래밍의 특징 

1) 캡슐화

-데이터를 가진 필드와 메서드를 외부에서 알 수 없도록 감추는것

 

2) 상속

-상위객체에서 하위객체로 메서드와 필드를 상속할수있다.

상속받은 메서드와 필드는 하위객체에서 재사용 가능하다.

 

3) 다형성

-동일한 명령이라도 객체의 종류에 따라 다르게 실행되는 것

 

 

 

 

 

[2] 클래스의 선언 

<추상화>

=> 현실의 객체에서 불필요한 속성을 제거, 중요정보만을 표현하는 모델링 기법을 의미한다.

 

<class 예시 코드>

public class ball {
        double radius;
        String color;
        void print() {
                System.out.println("공의 색은" + color + "반지름은 "+ radius);
        }
}

 

위의 코드와 같이 공은 색과 반지름으로 추상화 할 수 있다.

 

 

 

 

 

 

[3] 기초타입과 참조타입

어떤 정보가 들어가느냐에 따라서 기초타입과 참조타입으로 나뉜다.

 

int max = 10;  // 기초타입

Box newBox = new Box(); // 참조타입 // 객체 생성

-> Box라는 객체를 만들고 이를 newBox라는 공간이 해당 주소를 갖고있다.

 

참조타입에는 객체를 가리키는 주소가 저장이 되고 기초타입에는 해당 int 형 자료가 들어간다.

 

 

 

 

 

[4] 접근자와 설정자

 

private으로  지정된( 캡슐화)되어있는 필드를 외부에서 접근,사용하고자 할때 이용된다.

 

- 접근자 (get) - 해당 필드값을 반환하는 함수이다.

- 설정자 (set) - 인수로 해당 필드를 설정하는 함수이다.

 

=> 공개된(public) 메소드이다.

 

private한 필드를 외부에서 접근하지 못하게 막을 수 있다!

 

 

 

 

 

 

[5] 생성자

 

Box newBox = new Box(); // 참조타입 // 객체 생성

 

위 코드에서 new Box()가 생성자를 호출하는것이다.

객체를 생성할때 다양한 인수로 초기화가 가능하게 해준다.

 

 

즉, 생성자는 객체를 생성하기 위해 존재한다. 

반환타입이 없으며 메서드의 이름은 클래스의 이름과 동일하다. 

 

 

생성자를 따로 선언하지 않았다면  컴파일러는 기본 생성자를 자동으로 실행한다.

그러나 따로 선언한경우 기본 생성자는 실행되지않는다.

 

 

생성자는 오버로딩이 가능하며 (생성자의 개수는 1개여도 되고 100개여도 상관없다) 반환형이 없다.

 

 

 

 

 

기본생성자

public Ball(){}

 

-> 모든 클래스는 기본 생성자가 있다. 

-> 생성자를 만들지않았으면 컴파일러가 기본 생성자를 자동으로 추가한다. (인수도, 실행내용도 없는 생성자)

 

 

 

생성자 오버로딩(기본 생성자와 시그니쳐가 다르다)

public Ball(int R){

         this.radius = R; // 인수로 받은 R을 해당 클래스의 raius변수에 넣어준다.

}

-> 직접 생성자를 작성한것

-> 작성했다면 기본 생성자는 사라진다. 

-> R을 받아오는 것 이외에도 색상, 모양을 받아오도록 인수를 추가하여 여러개로 오버로딩할수있다.

 

 

 

 

예시 코드

public class CircleDemo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Circle myCircle = new Circle(10.0); // double형을 인수로 주는 생성자를 호출하여 객체생성
		//Circle yourCircle = new Circle(); // 생성자를 직접 만들었으므로 기본 생성자는 사라짐
		//즉 에러 발생
	}

}
class Circle{
	private double radius;
	public Circle(double r) { //double형을 인수로 주는 생성자 
		radius = r;
	}
}

 

 

지적, 조언, 질문 환영

반응형