025_this 참조 변수와 this()

Dec 20, 2023
025_this 참조 변수와 this()

this

this 참조 변수

  • 현재 객체 자신을 가르키는 참조 변수이다.
  • 생성자에서 매개 변수 이름과 필드 이름이 동일한 경우에 혼동을 막기 위해서 사용한다.
  • this는 heap을 가르킨다고 봐도 무방하다.

this()

  • this()는 다른 생성자를 의미한다.
  • 흔히 가장 복잡한 생성자를 먼저 작성한 후에, 다른 생성자에서 복잡한 생성자를 호출 할 때 주로 사용한다.
⚠️
this() 사용 시 주의 사항 1. 반드시 생성자 안에서만 호출이 가능하다. 2. 반드시 첫 번째 문장이어야 한다. 3. 다른 생성자를 호출할 때만 사용하여야 한다.
this 참조 변수와 this() 사용 예시
public class Circle { int radius; // a) radius public Circle(int radius) { this.radius = radius; // this.radius는 밖의 a) radius를 뜻한다. } public Circle() { this(0); // 위의 생성자 호출 Circle(0)을 호출한다. } double getArea() { return 3.14 * radius * radius; } }

접근 제어(Access Control)

  • 클래스의 멤버에 접근하는 것을 제어하는 것이다.
  • 접근 제어 지정자로는 public, private, protected 가 있다.
접근 지정자
해당 클래스 안
패키지
자식 클래스
전체
public
O
O
O
O
protected
O
O
O
X
없음
O
O
X
X
private
O
X
X
X
클래스의 멤버에 대한 접근을 제어하는 것은 개체 지향 프로그래밍의 핵심이다! 접근 제어를 하게 되면? 1. 객체를 잘못 사용하는 것을 방지할 수 있다. 2. 올바르게 정의된 메서드만 데이터를 사용할 수 있게 하여 데이터가 부적절한 값으로 변경되는 것을 막을 수 있다.

접근자와 설정자

정보 은닉(Information Hiding)

  • 구현의 세부 사항을 클래스 안에 감추는 것이다.
  • 클래스 안의 데이터를 외부에서 마음대로 변경하지 못하게 하는 것이 예시이다.

접근자(Getters)

  • 필드 값을 반환한다.
  • get을 메소드 앞에 붙여 사용한다. ex) getNumber()

설정자(Setters)

  • 필드 값을 설정한다.
  • set을 메소드 앞에 붙여 사용한다. ex) setNumber()
접근자와 설정자를 사용하는 이유?! 1. 접근자와 설정자를 사용해야만 나중에 클래스를 업그레이드할 때 편하다. 2. 접근자에서 매개 변수를 통하여 잘못된 값이 넘어오는 경우, 이를 사전에 차단할 수 있다. 3. 필요할 때마다 필드 값을 동적으로 계산하여 반환할 수 있다. 4. 접근자만을 제공하면 자동적으로 읽기만 가능한 필드를 만들 수 있다.
접근자와 설정자 예시 코드
package ex04; public class Account { private int regNumber; private String name; private int balance; // 모두 private로 선언 되어 클래서 내부에서만 사용 가능 public String getName() { return name; } // 접근자 public void setName(String name) { this.name = name; } // 설정자 public int getBalance() { return balance; } // 접근자 public void setBalance(int balance) { this.balance = balance; } // 설정자 } class AccountTest { public static void main(String[] args) { Account obj = new Account(); obj.setName("Tom"); obj.setBalance(100000); System.out.println ("이름은 " + obj.getName() + " 통장 잔고는 " + obj.getBalance() + "입니다."); } }
출력 결과
notion image
Share article
RSSPowered by inblog