728x90
반응형
생성자 (Constructor) 란,
new연사자로 클래스로 부터 객체를 생성할 때 호출되어 객체의 초기화를 담당 한다.
모든 클래스에 반드시 하나 이상 존재 한다. 클래스 내부에 선언을 생략하면 기본 생성자가 자동으로 추가 된다.
객체 초기화 란,
필드를 초기화 하거나 메소드를 호출해서 객체를 사용할 준비를 하는 것을 말한다.
new 연산자에 의해 생성자가 실행되면 힙(heap)영역에 객체가 생성되고 객체의 번지가 리턴 도니다.
리턴된 객체의 번지는 클래스 변수에 저장된다.
기본 생성자
public 클래스(){ }
클래스 내부에 생성자 선언을 생략했다면 컴파일러는 중괄호{ } 블록 내용이 비어있는 기본 생성자 를 바이트 코드에 자동으로 추가 한다.
- 클래스가 public class로 선언되면, 기본 생성자에서도 public 이 붙는다.
- 클래스가 public 없이 class만 선언되면, 기본 생성자에도 public이 붙지 않는다.
생성자는 메소드와 비슷한 모양을 갖고 있으나, 리턴 타입이 없고 클래스 이름과 동일하다.
예시1) 생성자 호출해서 객체 생성
public class Car{
//생성자
Car(String color, int cc){
}
}
public class CarExample{
public static voic main(String[] args){
Car myCar = new Car("검정", 3000);
//Car myCar = newCar(); // 는 오류가 난다. 생성자가 String과 int 값을 받게 설정되었기 때문이다.
}
}
필드 사용
클래스로부터 객체가 생성될 때 필드는 기본 초기값으로 자동 설정된다.
만약 다른 값으로 초기화 하려면,
- 필드를 선언할 때 초기값을 준다.
- 필드를 선언할때 초기값을 주면 동일한 클래스로 부터 생성되는 객체들은 모두 같은 값을 갖게 된다.
- 생성자에게 초기값을 준다.
- 다양한 값들로 초기화 하는 경우 생성자에서 초기값을 설정한다.
예시2) 생성자에서 필드 초기화, 객체 생성 후 필드값 출력
public class Korean{
//필드
String nation = "대한민국";
String name;
String ssn;
//생성자
public Korean(String n, String s){
name = n;
ssn = s;
}
}
pulbic class KoreanEx{
public static void main(String[] args){
Korean k1 = new Korean("홍길동", "123456-1234567");
System.out.println("k1.name: "+ k1.name);
System.out.println("k1.ssn: "+ k1.ssn);
Korean k2 = new Korean("김길동", "654321-7654321");
System.out.println("k2.name: "+ k2.name);
System.out.println("k2.ssn: "+ k2.ssn);
}
}
위의 예시를 보면 변수를 n,s로 사용했다. 변수의 가독성이 떨어질 뿐만 아니라 무슨 의미인지 모를 수 있다.
일반적으로 필드와 동일한 이름을 갖는 매개 변수를 사용한다.
동일한 이름의 매개 변수로 사용할 수 없는데, 이때 this를 붙여서 사용 하면된다.
위의 코드를 고치면 아래처럼 다시 표기 할 수 있다.
public Korean(String name, String ssn) {
this.name = name;
// 필드 매개변수
this.ssn = ssn;
// 필드 매개변수
}
※용어 정리
- 객체 초기화:객체를 사용하기 전에 준비하는 과정으로 필드를 선언할 때 초기화하거나 생성자 내부에서 필드값을 초기화할 수 있으며, 메소드를 호출하는 내용으로 구성된다.
본 내용은 #혼자공부하는자바 책을 참고해 공부하려 작성했습니다.
728x90
반응형
'Work & Study > JAVA (& 혼공자Java)' 카테고리의 다른 글
자바(Java) - 메소드1 (메소드 선언) (0) | 2020.10.07 |
---|---|
자바(Java) - 생성자 (Constructor)2 (0) | 2020.10.05 |
자바(Java) - 필드 (Field) (0) | 2020.09.28 |
자바(Java) - 객체 지향 프로그래밍2 (0) | 2020.09.28 |
자바(Java) - 객체 지향 프로그래밍1 (0) | 2020.09.23 |