생성자 Constructor

kangsun·2023년 3월 13일
0

Java

목록 보기
35/44

생성자 : new 객체()
heap 메모리에 저장됨

생성자

iv(인스턴스 변수) 초기화 메서드


  • 생성자 기본 문법 <class_name>([<argument_list]){[<statements]}
  • 객체를 생성할 때 new 키워드와 함께 사용 - new Student();
  • 생성자는 일반 함수처럼 기능을 호출하는 것이 아니고 객체를 생성하기 위해 new와 함께 호출
  • 객체가 생성될 때 변수나 상수를 초기화 하거나 다른 초기화 기능을 수행하는 메서드를 호출 함
  • 생성자는 반환값이 없고, 클래스의 이름과 동일
  • 대부분의 생성자는 외부에서 접근 가능하지만, 필요에 의해 private 으로 선언되는 경우도 있음

- private 외부에서 접근할 수 없음
- 인스턴스 초기화 메서드
- 초기화 란? : 값을 새로 넣어주는 것, 원하는 값을 세팅하는 것

Time t = new Time(); - 이것도 생성자
Time t = new Time(12, 34, 56); - 이것도 생성자, 생성자 추가해줘야 이렇게 편리하게 사용할 수 있음.(기본생성자)


class Card {

	Card () { //매개변수 없는 생성자 (오버로딩)
    	// 인스턴스 초기화 작업
    }
    
    Card (String kind, int number) { //매개변수 있는 생성자 (오버로딩)
    	// 인스턴스 초기화 작업
    }
}
  • 이름이 클래스 이름과 같아야 한다.
  • 리턴값이 없다. (void 안붙임) → 대입문이기 때문, 항상 반환값이 없음.
  • 모든 클래스는 반드시 생성자를 가져야 한다. (1개 이상)
  • Card c = new Card(); - 생성자 호출하는 부분. 생성자가 있어야 호출을 함.
    → 없는데 어떻게 불러요? 컴파일러가 기본생성자 하나도 없을 때 추가해줌.




기본 생성자 (default constructor)


  • 클래스에는 반드시 적어도 하나 이상의 생성자가 존재
  • 클래스에 생성자를 구현하지 않아도 new 키워드와 함께 생성자를 호출할 수 있음
  • 클래스에 생성자가 하나도 없는 경우 컴파일러가 생성자 코드를 넣어줌
    public Student(){}
  • 매개 변수가 없음, 구현부가 없음

- 자동으로 생성해 준다해도 의식적으로 반드시 넣어주기.


[자바의정석]

  • 매개변수가 없는 생성자
  • 생성자가 하나도 없을 때만, 컴파일러가 자동 추가
  • 기본생성자는 다른 생성자가 있더라도 그냥 꼭 넣어주기



매개변수가 있는 생성자


  • new Car("White", "auto", 4); 는 생성자를 호출해준 것임
  • 매개변수가 있는 생성자의 역할은 밖에서 대입시켜주는 코드를 안에 적용시켜주는 것이다.
  • 만들어지는 순서

- 1. 참조변수 c 만들어짐
- 2. new 객체가 만들어짐 (color, gearType, door)
- 3. 생성자 호출 (White, auto, 4)
- 4. = 마지막은 대입



실습

StudentTest.java
Object를 가져다 사용하는 쪽을 Client 쪽이라고 한다.
서비스를 제공해주는 모듈
서비스를 사용하는 모듈이 나누어져 있다.


자동으로 초기화가 된다.
아무 정보도 넣지 않았기 때문에 알아서 초기화된 값을 넣어준 것이다.


기본생성자

넘어오는 정보를 초기화 시키고 싶다면, 기본생성자에 파라미터를 넣어 값을 받아올 수 있다.

여기서 초기화의 의미는~~
새로운 값을 넣어준다는 것이다.

파라미터에 받아올 값을 적어주고 멤버변수에 초기화 시켜주는 작업을 해줄 수 있다.

파라미터엔 보통 멤버변수와 이름을 똑같이 작성해주는데(가독성이 좋기때문, 아~ 이 변수는 이 변수에 넣기위해서 있는 거구낭~~~), studentNumber = studentNumber 로 초기화시킬 수 없는 이유는 보통 변수를 가장 먼저 찾는 방법은 자신과 가장 가까운 곳에서 찾기 때문에 멤버변수보다 파라미터에 있는 지역변수에 적용이된다. 결국 매개변수가 매개변수에 값을 대입해주는 형식이 된다.

우리는 멤버변수에 넘어온 값을 대입시키려는 의도임. 그것이.. 생성자의 역할임ㅇㅇ..
객체가 생성되면 → 자기가 받은 파라미터의 값을 → 멤버변수에 대입

this를 써줘야 멤버변수로 인식한다~


저장 후 (컴파일 된 후) 오류가 난다~!

기본생성자가 제공되는 경우는~~
클래스에 생성자가 하나도 없는 경우에만 컴파일러가 생성자를 넣어준다~~

생성자를 직접 만들어주게 되면~ studentLee.showStudentInfo() 이거 제공 안된댑니다..

정리하면 기본 생성자가 아예 없으면 자동으로 기본생성자를 하나 만들어주기때문에 showStudentInfo()를 사용할 수 있지만, 기본 생성자를 직접 만들어주게 되면 안에 있는 메소드 showStudentInfo() 사용하지 못한다.

근데 쓰고싶으면..!!

기본 생성자 하나 다시 쓰면된다~
→ 오버로딩!
똑같은 이름의 생성자가 두개가 된것이다. 그것이~ 바로 오~버~로~딩..


기본생성자 없어야할 경우

경우에 따라 기본 생성자를 안만드는 경우가 있는데, 그 경우는 만약 이 객체를 만들기 위해선 항상 이름, 학번, 학년이 반드시 필수요소로 있어야 할 때. 이 요소가 없으면 이 객체를 생성할수 없다면 기본생성자를 제공해선 안됨.

profile
코딩 공부 💻

0개의 댓글