728x90

 

 

생성자(constructor)는 두 종류가 있다

기본 생성자와 매개변수가 있는 생성자

 

아래의 코드에는 기본 생성자가 없다

아래 코드의 기본생성자를 써보면 public Circle() {}이 된다

 

Run클래스에서

Circle c = new Circle();을 그대로 쓸려면 기본 생성자가 있어야하고

본래 이미지처럼 기본 생성자 없이 Circle 클래스에서 쓸려면

Run클래스에서 Circle c = new Circle();에서 소괄호()부분에 매개변수를 넣어줘야한다

로직이 이렇게 연결되어있다

 

 

728x90
반응형
728x90

 

생성자(constructor)

인스턴스가 생성될 때마다 호출되는 ‘인스턴스 초기화 메서드’하는 역할

이외에도 메서드이기 때문에 {}에 작업할 내용을 넣으면 됨

모든 클래스에는 반드시 하나의 생성자가 있어야한다

 

ex) iv 초기화 예시

Time t = new Time();  // 생성자
t.hour = 12;    // 인스턴스 메소드(iv) 초기화
t.minute = 34;  // 인스턴스 메소드(iv) 초기화
t.second = 56;  // 인스턴스 메소드(iv) 초기화

 

 

생성자의 필요성

위처럼 객체생성 후 iv 초기화를 해야하므로 번거롭다

한 줄로 할 수 있다면 직관적이고 편리할 것

 

생성자 예시

	Time t = new Time(12,34,56); // 생성자

위의 4줄이 1줄로

 

생성자 호출이라는 의미

생성자 불러다 썼다는 의미

 

 

생성자의 규칙

1) 클래스명과 생성자명이 같아야한다

2)항상 리턴값이 없다(void 안붙인다)

 

 

 

1) 클래스명과 생성자명이 같아야한다

    같은 이름이 존재할 수 있는건 오버로딩이 가능하기 때문

2)항상 리턴값이 없다(void 안붙인다)

 

 

 

1.기본 생성자(default constructor)

생성자가 하나도 없을 때만 컴파일러가 자동 추가

생성자는 원래는 직접 값을 넣어줘야한다

기본생성자를 안넣어주면 에러메세지가 다른게 나오기에 찾기 힘들다

Card c = new Card(); // 기본생성자

 

 

기본생성자 에러

class Data_1도 생성자가 없지만 에러가 안나는건 값을 안넣어줬기 때문이고, Class Data_2에는 Data_2(int x)라는 값을 임의로 넣어줬기 때문에 생성자도 따로 지정해줬어야 했는데 안했기에 에러가 난 것

 

2.매개변수가 있는 생성자

 

매개변수 생성자가 필요한 이유

4줄이 1줄로

 

Car c = new Car(”while”,”auto”,4); 문장이 실행되는 과정

 

1)참조변수 C가 생성됨

2)new연산자가 객체 및 주소값 생성

3)생성자 호출되면서 객체 초기화

4)변수(Car c)에 주소값이 들어감

 

 

1)참조변수 C가 생성됨

2)new연산자가 객체를 만들고 객체에 주소값 부여

       (객체 멤버 3개 : color, geartype, door)

각 객체 멤버에 데이터타입의 기본값 들어가 있음(String은 null int는 0)

 

3)생성자가 호출되면서 객체를 초기화시킴

생성자 호출로 white, auto, 4의 값이 color, geartype, door로 들어감

 

초기화란?

자기가 원하는 값을 처음으로 넣는 것을 초기화라 부름

 

4)마지막으로 Car c에 주소값이 들어감

객체와 참조변수 연결해야하니까 대입연산자( = )가 객체의 주소를 저장한다

객체의 주소값은 new연산자의 반환값

 

728x90
반응형

+ Recent posts