생성자

2021. 1. 7. 17:01·자바/기본적인 개념

 1. 하나의 클래스의 인스턴스가 생성되는 코드의 단계

(1) 연산자 new에 의해서 메모리(heap)에 클래스의 인스턴스가 생성된다.

 

(2) 생성자가 호출되어 수행된다.

 

(3) 연산자 new의 결과로, 생성된 클래스의 인스턴스의 주소가 반환되어 참조변수에 저장된다.

 

( 주의할 점은 연산자 new가 인스턴스를 생성하는 것이지 생성자가 인스턴스를 생성하는 것이 아니다. )

 

 

 

 

2. 생성자에서 다른 생성자 호출하기 - this(), this

- this는 참조변수로 인스턴스 자신을 가리킨다.

 

- 사실 생성자를 포함한 모든 인스턴스 메서드에는 자신이 관련된 인스턴스를 가리키는 참조변수 'this'가

지역변수로 숨겨진 채로 존재한다.

 

- 같은 클래스의 멤버들 간에 서로 호출할 수 있는 것처럼 생성자 간에도 서로 호출이 가능하다.

( 단, 아래의 두 조건을 만족해야 한다. )

 

(1) 생성자의 이름으로 클래스 이름 대신 this를 사용한다.

( 즉, 클래스이름()으로 호출하는 것이 아닌 this()로 호출해야 한다. )

 

 

(2) 한 생성자에서 다른 생성자를 호출할 때는 반드시 첫 줄에서만 호출이 가능하다.

( 생성자에서 다른 생성자를 첫 줄에서만 호출이 가능하도록 한 이유는 생성자 내에서 초기화 작업 도중에 다른 생성자를 호출하게 되면, 호출된 다른 생성자 내에서도 멤버변수들의 값을 초기화를 할 것이므로 다른 생성자를 호출하기 이전의 초기화 작업이 무의미해질 수 있기 때문이다. )

 

( 그러므로, 만약 두 번째 줄 이상에서 호출하면 컴파일 에러가 발생한다. )

 

 

 

 

3. 오해하기 쉬운 개념 정리

(1) 연산자 new가 인스턴스를 생성하는 것이지 생성자가 인스턴스를 생성하는 것이 아니다.

 

(2) this를 사용할 수 있는 것은 오직 인스턴스 맴버뿐이다. 클래스 메서드와 사용하면 에러가 나오기에 유의하자.

 

(3) this와 this()는 비슷하게 생겼을 뿐, 완전히 다른 개념이다. this는 '참조 변수'이고, this()는 '생성자'이다.

 

 

 

 

4. 잘못된 예제

( x = x를 하게 되면 지역변수로 간주되어 초기화 작업이 무의미해진다. )

( 그래서 this.x = x를 꼭 써주어야 한다 .)

 

 

 

 

5. 예제 - 생성자를 이용한 인스턴스의 복사

 

( 주의할 점은 a2는 a1을 복사하여 생성된 것이므로 서로 같은 상태를 갖지만, 서로 독립적으로

메모리 공간에 존재하는 별도의 인스턴스이므로 a1의 값들이 변경되어도 a2는 영향을 받지 않는다. )

 

( 또한 as(as a) 생성자를 중복해서 사용하므로 아래의 코드처럼 간결하게 만들어 본다. )

 

'자바 > 기본적인 개념' 카테고리의 다른 글

상속  (0) 2021.01.08
초기화 블럭  (0) 2021.01.08
가변 인자(varargs)  (0) 2021.01.07
오버 로딩  (0) 2021.01.07
클래스 맴버와 인스턴스 맴버간의 참조와 호출  (0) 2021.01.07
'자바/기본적인 개념' 카테고리의 다른 글
  • 상속
  • 초기화 블럭
  • 가변 인자(varargs)
  • 오버 로딩
백_곰
백_곰
  • 백_곰
    친절한 코딩
    백_곰
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 알고리즘 (with JAVA)
        • 기본 알고리즘
        • 완전 탐색
        • 분할 정복 알고리즘
        • 동적 계획법
        • 탐욕법
        • 코딩 테스트 기출 문제
        • 코드트리 조별과제
      • 백준 (with JAVA)
        • 완전 탐색
        • 분할 정복
        • 그 외
      • 자바
        • 개발 환경 구축하기
        • 팁
        • 기본적인 개념
        • 컬렉션 프레임워크
        • 프로세스와 쓰레드
        • 지네릭스
        • 람다식
        • 스트림
        • 입출력 IO
        • 네트워킹
        • 열거형(enums)
        • java.lang 패키지
        • java.time 패키지
        • 유용한 클래스들
        • 형식화 클래스들
      • 안드로이드 with 자바
        • 응용 문제들
        • 자잘한 문제들
        • 오류 보고서
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      코딩테스트
      유용한 클래스
      불안정 정렬
      소켓 프로그래밍
      문자 기반 스트림
      java.lang패키지
      file
      snail
      알고스팟
      serializable
      코드트리
      역직렬화
      TCP 소켓 프로그래밍
      Collections Framework
      코딩트리조별과제
      람다식
      자바 개념
      선택 정렬
      중간연산
      java.time 패키지
      스트림
      제자리 정렬
      outputstream
      ServerSocket
      다형성
      안드로이드 스튜디오
      Arrays
      InputStream
      안정 정렬
      map()
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    백_곰
    생성자
    상단으로

    티스토리툴바