java/객체지향

[객체지향] this()와 this

2021. 7. 12. 15:44
목차
  1. ●생성자에서 다른 생성자 호출하기 - this()
  2. ●객체 자신을 가리키는 참조변수 - this

●생성자에서 다른 생성자 호출하기 - this()

 

 같은 클래스의 멤버들 간에 서로 호출할 수 있는 것처럼 생성자 간에도 서로 호출이 가능하다. 단 아래와 같이 두가지 조건을 만족해야 한다.

  1. 생성자의 이름으로 클래스이름 대신 this를 사용한다.
  2. 한 생성자에서 다른 생성자를 호출할 때는 반드시 첫 줄에서만 호출이 가능하다.

 

Car(String color) {
      door = 5;
      Car(color, "auto", 4); //error
}

 

 

 

 위의 코드는 두 가지의 조건을 모두 지키지 않았기 때문에 오류가 발생했다. Car(String color)생성자 안에 Car(color, "auto", 4) 생성자를 첫 번째 줄이 아닌 두 번째 줄에 사용했으며, 생성자의 이름을 this가 아닌 Car로 생성했다. 생성자를 첫 줄에 사용하도록 한 이유는 생성자 내에서 초기화 작업도중에 다른 생성자를 호출하게 되면, 호출된 다른 생성자 내에서도 멤버변수들의 값을 초기화를 할 것이므로 다른 생성자를 호출하기 이전의 초기화 작업이 무의미해질 수 있기 때문이다.

 

 

 

class Car2 {
   String color;
   String gearType;
   int door;
   
   Car2() {
      this("white", "auto", 4);      //Car2(String color, String gearType, int door) 호출
   }
   
   Car2(String color) {
      this(color, "auto", 4)         //Car2(String color, String gearType, int door) 호출
   }
   
   Car2(String color, String gearType, int door) {
      this.color = color;
      this.gearType = gearType;
      this.door = door;
   }
}

 

 

●객체 자신을 가리키는 참조변수 - this

 

Car(String c, String g, int d) {
   color = c;   // color는 iv, c는 lv
   gearType = g;
   door = d;
}

 

 

 위의 코드는 생성자 Car의 인스턴스 변수(color)와 지역변수(c)는 서로 다르기 때문에 에러가 나지 않는다. 만약 인스턴스 변수와 지역변수가 같아지면 어떻게 될까? 

 

 

Car(String color, String g, int d) {
    color = color;      //iv와 lv 구별 x
    gearType = g;
    door = d;
}

 

 

 코드를 보는 바와 같이 무엇이 인스턴스 변수이고 지역변수인지 구별할 수 없다. 자바는 'color = color'를 모두 지역변수로 간주해버린다.이를 해결하기 위해 'this'를 사용하여 인스턴스 변수와 지역변수를 구별한다.

 

 

Car(String color, String gearType, int door) {
    this.color = color;       // this.color는 iv, color는 lv
    this.gearType = gearType;
    this.door = door;

 

 

 'this'를 사용하면 this.color는 인스턴스 변수이고 color는 생성자의 매개변수로 정의된 지역변수로 서로 구별이 가능해진다. 그런데 'this'를 사용할 수 있는 것은 인스턴스 멤버뿐이다. static메서드(클래스 메서드)에서는 인스턴스 멤버들을 사용할 수 없는 것처럼, 'this' 역시 사용할 수 없다. 왜냐하면, static 메서드는 인스턴스를 생성하지 않고도 호출될 수 있으므로 static 메서드가 호출된 시점에 인스턴스가 존재하지 않을 수도 있기 때문이다. 사실 생성자를 포함한 모든 인스턴스메서드에는 자신이 관련된 인스턴스를 가리키는 참조변수 'this'가 지역변수로 숨겨진 채로 존재한다.

 

출처:자바의 정석 기초편(저자: 남궁성, 출판사:도우출판)

'java > 객체지향' 카테고리의 다른 글

[객체지향] 상속  (0) 2021.07.13
[객체지향] 변수, 멤버변수의 초기화  (0) 2021.07.12
[객체지향] 생성자  (0) 2021.07.12
[객체지향] 오버로딩(overloading)  (0) 2021.07.09
[객체지향] 메서드 간의 호출과 참조  (0) 2021.07.09
  1. ●생성자에서 다른 생성자 호출하기 - this()
  2. ●객체 자신을 가리키는 참조변수 - this
'java/객체지향' 카테고리의 다른 글
  • [객체지향] 상속
  • [객체지향] 변수, 멤버변수의 초기화
  • [객체지향] 생성자
  • [객체지향] 오버로딩(overloading)
각시탈코더
각시탈코더
각시탈코더
각시탈코더
각시탈코더
전체
오늘
어제
  • 분류 전체보기 (203)
    • java (46)
      • 객체지향 (20)
      • 기본문법 (8)
      • 자바의 정석 연습문제 오답노트 (9)
      • 백준 알고리즘 (9)
    • Spring (17)
      • SpringMVC (8)
      • Spring DI와 AOP (5)
      • REST API와 Ajax (1)
      • Spring 프로젝트 (1)
      • Spring Security (0)
    • DB (47)
      • Oracle (15)
      • SQL오답노트 (25)
      • 튜닝 (0)
      • ERD (1)
      • DB 모델링 (5)
    • Servlet & JSP (3)
    • JDBC (2)
      • 기본 (1)
      • 스프링JDBC (1)
    • MyBatis (2)
    • JavaScript (2)
      • 코딩애플 (0)
      • 문법 (1)
    • React (0)
      • 코딩애플 (0)
    • HTML (0)
      • 모던 웹을 위한 HTML5+CSS3 바이블 (0)
    • CSS (0)
      • 모던 웹을 위한 HTML5+CSS3 바이블 (0)
    • Linux (0)
    • Git & GitHub (2)
      • Git (1)
    • CS (19)
      • 네트워크 (6)
      • HTTP (7)
      • 컴퓨터구조 (0)
      • 자료구조와 알고리즘 (2)
      • 기타 (4)
    • 개발설정 (2)
    • 기술면접 (0)
      • JAVA (0)
      • Spring (0)
      • DB (0)
      • 네트워크 (0)
      • 공통 (0)
    • 프로젝트 (2)
      • 게시판만들기 (2)
    • 기혁씨의 삽질표류기 (28)
    • 참고자료 (2)
      • 국비수업 (0)
      • 당당 프로젝트 (1)
    • 뉴렉처 (17)
      • 자바 (11)
      • 자바스크립트 (3)
      • 키워드 (0)
      • 숙제 (0)
      • CSS (0)
      • DB (3)
      • 서블릿 (0)
      • 스프링 (0)
      • DOM (0)
    • 내가 만든 학습그림 (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 뉴렉처
  • 서브쿼리
  • 자바의정석
  • 프로그래머스
  • 에러
  • 모두의네트워크
  • 배열
  • 스프링
  • 웹프로그래밍
  • 네트워크
  • 오라클
  • 백준
  • 자바
  • SQL
  • 알고리즘
  • 공부
  • 쿼리
  • It
  • 국비수업
  • 자바의정석기초편
  • Java
  • 연습문제
  • 개발자
  • db
  • 코딩
  • 백엔드
  • Oracle
  • 오류
  • 객체지향
  • spring

최근 댓글

최근 글

hELLO · Designed By 정상우.
각시탈코더
[객체지향] this()와 this
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.