생성자

이동영·2024년 3월 11일

자바 개념정리

목록 보기
12/21

this

  • 자기 자신의 인스턴스를 가리킨다.
  • initMember는 멤버의 초깃값을 설정하는 메서드이다.
  • 메서드의 매개변수의 이름과 필드의 이름이 똑같은 경우 구분을 지을 수 없다. 이 경우 필드보다 매개변수가 코드블럭의 안쪽에 있기에 매개변수가 우선순위를 가지게 된다. 즉 매개변수에다가 값을 넣는꼴이 된다.
  • 하지만 this를 사용하면 자기 자신의 필드에 접근할 수 있다.
  • 정리 this는 자기자신의 참조값이다.

this의 생략

  • 가까운 지역변수(매개변수)를 우선순위로 하여 만약에 없으면 그다음 필드를 찾게 된다. 그리고 필드도 없으면 오류가 발생하게 된다.
  • this를 사용하는 경우 매개변수명 필드명이 중복되는경우 사용하며 보통 생략을 하도록 한다. 왜냐하면 생략하더라도 ide가 색상으로 구분해주기 때문이며 만약 this명시 스타일을 적용하면 코드가 지저분 해지기 때문이다.

관습을 따를 때 항상 왜? 라는 질문을 해본다 그런데 왜 라는 질문에 답을 하지 못하면 그 관습은 따르면 안된다.

생성자의 도입

  • 객체를 생성할 때 초깃값을 설정해주기 위해 필드 설정 메서드를 만들어서 설정을 하였다. 그런데 객체지향에서는 객체를 생성하자마자 즉시 필요한 기능을 생성자가 수행해준다.
  • 생성자를 사용하면 생성즉시 필요한 기능을 수행할 수 있다.
  • 생성자는 메소드와 비슷하지만 몆가지의 차이가 있다고 한다. 생성자의 이름은 클래스의 이름과 같아야 하며, 생성자는 반환타입이 없어야 한다. 그외 메서드와 같다.

생성자 호출

  • 생성자는 인스턴스를 생성하고 나서 즉시 호출이 된다.

생성자의 장점

중복호출제거

  • 중복 호출을 제거한다? 생성자가 없던 시절 객체를 생성후에 메소드를 한번더 호출하여 인스턴스의 필드값을 초기화 시켜야 했다.
  • 생성자 덕분에 객체를 생성함과 동시에 한큐에 값을 설정할 수 있다.

제약 생성자 호출 필수

  • 생성자 없이 메소드로 초기값을 설정해야할 때 실수로 누락을 해도 컴파일 오류 없이 정상적으로 실행이 된다. 하지만 객체에는 아무 값도 초기화가 안되고 생성이 된다. 문법적으로 문제가 없기 때문이다.
  • 객체가 초기화가 안된 상태에서 작동하게 되면 해당 객체는 유령회원이 되기 때문에 생성즉시 무조건 초기화를 해야한다. 그렇지 않으면 버그가 생길 수도 있다.
  • 하지만 생성자는 실수로 누락하면 컴파일 단계에서 오류를 잡아준다.
  • 직접 정의한 생성자가 있을 경우 객체 생성시 생성자에 인자값을 반드시 넘겨줘야 한다. 유령회원이 될 수 없는점이 생성자의 장점이다.

기본 생성자

  • 매개 변수가 없는 생성자를 기본 생성자라고 한다.
  • 클래스에 생성자가 하나도 없으면 자바 컴파일러는 매개변수와 작동하는 코드가 없는 기본 생성자를 자동으로 생성해준다.
  • 생성자가 하나라도 있으면 기본 생성자는 생성되지 않는다.

자바가 기본 생성자를 왜 자동으로 만들어 주나?

  • 생성자 기능이 필요 없을 때 개발자가 일일히 생성자를 정의하는것은 번거롭기에 자바가 기본 생성자를 제공하여 개발을 수월하게 할 수 있도록 하는것이다.

정리

  • 생성자는 반드시 호출되어야 한다.
  • 생성자가 없으면 기본 생성자가 호출이 된다.
  • 생성자가 하나라도 있으면 기본 생성자는 제공되지 않는다.

생성자 오버로딩 this

  • 생성자 오버로딩처럼 매개변수를 다르게 하여 여러 생성자를 제공할 수 있다.

this()

  • this()기능 사용시 생성자 내부에서 자신을 호출할 수 있다.
  • 이 기능을 잘 활용하면 생성자 오버로딩시 발생한 중복을 제거할 수 있다.
  • this()는 생성자 코드 첫 줄에만 작성할 수 있다. 두번째 코드에서 작성하면 컴파일 오류가 발생한다.
profile
가치를 제공하는 개발자

0개의 댓글