Home NhnAcademy 선발교육과정 8일차(객체 생성과 제거)
Post
Cancel

NhnAcademy 선발교육과정 8일차(객체 생성과 제거)

생성자

  • 생성자는 특수한 형태의 메소드로, 객체 생성시에 객체를 초기화하는데 사용된다.

객체 생성

  • 1단계: 메모리 할당
    • new 키워드를 사용하여 Heap 영역에 메모리 할당
  • 2단계: 생성자를 사용하여 객체 초기화
    • 클래스 이름과 괄호를 사용 ```java public class Test { String text;

    public Test(String text) { this.text = text; } } class Main{

    public static void main(String[] args) { Test test = new Test(“test”); } } ```

위와 같이 new로 선언하고 생성자가 있을경우 필요한 값을 넣어 초기화가 가능하다.

기본 생성자 사용

  • 클래스에 생성자에 작성하지 않으면 기본 생성자가 생성됨
    • public 접근 제한
    • 클래스와 이름이 같음
    • return 타입이 없음 - void가 아님
    • 파라미터가 없음공격 가능 여부
    • 모든 필드는 기본 값으로 초기화

생성자 오버라이딩

  • 많은 경우 기본 생성자는 객체 초기화에 적당하지 않음
  • 상속되는 기본 생성자 대신 객체만의 기본 생성자를 정의

생성자 오버로딩

  • 생성자는 메소드이므로, 오버로딩 할 수 있음
    • 같은 범위, 같은 이름, 다른 파라미터를 사용하여 정의
    • 객체가 다른 방법으로 초기화 되는 것을 허용
  • 주의
    • 생성자를 정의하면, 컴파일러는 기본 생성자를 정의하지 않음

초기자 목록

  • 오버로드 된 생성자는 같은 코드를 포함할 가능성이 높음
    • 생성자를 서로 호출하도록 리팩토링
    • this 키워드를 사용하여 초기화 목록을 호출
1
2
3
4
5
6
7
8
9
10
11
12
class Test{
  private String text;
  public Test(){
    this.init("test");
  }
  public Test(String text){
    this.init(text);
  }
  private void init(String text){
    this.text = text;
  }
}

위와 같이 init 메서드를 만들어 중복 코드를 줄일수 있다.

상수 선언

  • 상수는 컴파일시 초기화 됨
  • final 키워드를 사용하여 선언
1
final double pi = 3.14;

위와 같이 선언하면 된다.

private 생성자

  • private 생성자는 직접 생성을 원하지 않는 객체 생성을 막아 줌
    • 인스턴스 메소드 호출를 먹는 경우의 클래스
    • Static 메소드의 호출만을 위한 클래스
    • 공유 객체를 위한 데이터를 저장하는 클래스
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class Test {

  public static void main(String[] args) {
    Singleton s = Singleton.getSingleton();
    Singleton s1 = new Singleton();//error
  }
}
class Singleton{
  static Singleton singleton;

  private Singleton(){}
  private Singleton(String s){}
  public static Singleton getSingleton(){
    if (singleton == null){
      singleton = new Singleton();
    }
    return singleton;
  }
}

생성자를 private 선언시 s1과 같이 객체 생성을 막을 수 있다.

Static 생성자

  • static 생성자는 객체 인스턴스가 생성되기 전에 동작됨
    • static 필드를 초기화 함
  • Java는 static 생성자를 지원하지 않음
This post is licensed under CC BY 4.0 by the author.

NhnAcademy 선발교육과정 6일차(객체지향 프로그래밍 기본)

NhnAcademy 선발교육과정 9일차(객체 생성과 제거, Java에서의 상속)