본문으로 바로가기

[Java] 생성자

category Java 2022. 2. 9. 01:03

생성자

  • 클래스로부터 객체를 만드는 새로운 메소드 클래스로부터 new 연산자로 객체를 생성할 때 호출
  • 객체의 생성과 초기화를 담당

 

객체초기화

  • 필드를 초기화 하거나 메소드를 호출해서 객체를 사용할 준비를 하는 것

 

생성자가 성공적으로 실행

  • 힙영역에 객체 생성되고 객체 번지가 리턴

기본 생성자

  • 클래스 내부에 생성자 선언 생략할 경우 바이트 코드에 자동 추가
[public] 클래스() {}
  • 그래서 클래스에 생성자 선언하지 않아도 생성자가 자동 추가 된것이므로 new 생성자()로 객체 생성 가능

생성자 선언

클래스 ( 매개변수선언, ...) {

//객체의 초기화코드

}
  • 매개 변수 선언은 생략할 수도 있고(위쪽 서식들과 같이) 여러개 선언해줄 수도 있음( 여러개 선언해줄 땐 생략x)
  • public class Car {
    
    //생성자
    Car(String model, String color, int maxSpeed) {...}
    
    }
  • 클래스에 생성자가 명시적으로 선언 되었을 경우 반드시 선언된 생성자 호출하여 객체 생성
Car myCar = new Car("그랜저", "검정", 300);

매개변수 수와 순서에 맞게끔 매개변수 값을 전달 해주기

이들 값을 가지고 생성자 {...} 안쪽 부분이 실행 됨

 

생성자의 필드 초기화

  • 생성자는 new연산자에 의해 호출이되어 객체를 만들기도 하지만(위쪽) 객체의 데이터를 초기화 하는 역할도 함
public class Korean {
//필드
String nation = "대한민국";
String name;
String ssn;

//생성자
public Korean(String n, Stting s) {
name = n;
ssn = s;
}
}

국적은 다 똑같기 때문에 필드 값에 고정으로 주고

이름과 주민번호는 다 다르기 때문에 생성자에서 초기값을 줌

생성자가 필드를 초기화 하는 역할을 해줌

Korean K1 = new Korean("김자바", "012345-6789021");
Korean K2 = new Korean("박자바", "325164-5579156");

  • 생성자가 필드의 초기화를 위해 사용된다고 그러면 매개변수 이름은 필드의 이름과 유사하거나 동일한 것으로 사용 권장 -매개변수 이름만 보고 어떤 필드와 연관이 있는지 알기 위함
  • 필드와 매개변수 이름이 완전히 동일한 경우 this.필드로 표현 (this.내가가지고있는 필드 란 뜻)

생성자 오버로딩

  • 매개변수를 달리하는 생성자 여러개 선언
  • 외부에서 제공되는 다양한 데이터 사용하여 객체 초기화 하려면 생성자 역시 다양화 해야
  • public class 클래스{
    	클래스([타입,매개변수,...]) {
        ...
        }
        클래스([타입,매개변수,...]) {
        ...
        }
        
     }
    }

클래스 블록 사이에 클래스 이름과 동일한 이름(){} 가 있으면 생성자를 얘기한다.

이 생성자가 여러개일때 매개변수의타입,개수, 순서가 다르게 선언돼야 한다.

public class Car {
Car() {...}
Car(string model) {...}
Car(string model, String color) {...}
Car(string model, String color, int maxSpeed) {...}


Car car1 = new car();
Car car2 = new car("그랜저");
Car car2 = new car("그랜저", "흰색");
Car car2 = new car("그랜저", "흰색", 300);
  • 매개 변수의 타입, 개수, 선언된 순서 같은경우, 매개변수 이름만 바꾸는 것은 생성자 오버로딩아님

Car(String model, Stringcolor) {...}

Car(Stringcolor, String model) {...} //오버로딩 아님

 

 

 

------ 실습 예제 풀기----

더보기

생성자는 호출과 정의로 나뉜다

public class Dogtest {
	public static void main(String[] args) {
    	Dog d = new Dog("바둑이", 5.72, 5); //생성자 호출
    }
}

class Dog {
	String name;
    double weight;
    int age;
    /* 생성자 - 객체 생성 및 초기화 (생성자 정의) */
    Dog(String s, double d, int i) {
    	name = s;   // 이름 초기화
        weight = d; // 무게 초기화
        age = i;    // 나이 초기화
    }
}

생성자 호출과 정의


Duck dk = new Duck("덕구", 2); //생성자 호출



Duck (String s, int a) {
name = s;
age = a'
}
//생성자 정의

 

'Java' 카테고리의 다른 글

[Java]문자열 출력  (0) 2022.02.14
[Java] 프로그래밍이란  (0) 2022.02.14
[JAVA] 필드  (0) 2022.02.08
[JAVA] 객체 지향 프로그래밍  (0) 2022.02.02
[JAVA ] 참조 타입(배열)  (0) 2022.01.31

코딩 공부하는 블로그
블로그 이미지 서하현 님의 블로그
VISITOR 오늘 / 전체