본문 바로가기

Wanna be a Programmer/Java Programming

Java Programming - 캡슐화(Encapsulation), 지역변수


캡슐화(Encapsulation) Information Hiding(은닉성)


- public interface, private implementation

인터페이스는 공개, 구현은 감춘다.


- 캡슐화의 장점

① 데이터 보호

데이터를 인터페이스로 감싸줌으로 인해서 Data를 보호할 수 있다. 데이터를 담고 있는 변수를 private로 선언해서 외부의 직접 접근을 막고, set, get 메소드를 통해서 간접접근을 할 수 있도록 한다.


변경 → Setter Method

조회 → Getter Method

private int stock;

public void Setstock(int s) {

stock = s;

}

private int stock;

public int Getstock() {

return stock;

}

<Stock Property>


Instance 변수의 접근제한자는 private으로 하여 직접 접근을 막고 그 변수의 값을 변경하는 setter와 조회할 수 있는 getter 메소드를 public으로 제공하라.

Setter 구문 : public void set변수명(매개변수

ex) private int age  public void setAge(int a)

Getter 구문 : public 변수type get변수명() 

ex) public int getAge()

type이 boolean일 경우변수 type이 set, get보다는 is변수명()으로 쓰인다.


② 유지보수성

외부에 인터페이스로 감싸주었기 때문에 내부에 구현이 바뀌어도 외부에서 보기에는 인터페이스만 보기 때문에 변화를 느끼지 못한다. 예를 들자면 곰플레이어의 내부 구현이 어떻게 되었는지 사용자는 알 필요도 없이 재생하고 싶다면 ▶ 버튼을 클릭하면 그만이다.


③ 사용자 편의성

사용자는 내부구현이 바뀌어도 여전히 인터페이스는 그대로이기 때문에 늘 사용하던대로 사용하면 된다. 만약 캡슐화하지 않는다면 내부구현이 달라질때마다 새로운 사용법을 익혀야할 것이다.


 

지역변수(Local Variable, Method Variable)

메소드 안에 선언한 변수(매개변수도 지역변수)

사용범위 : 메소드 수행시(메소드의 선언부 실행에서부터 메소드 종료까지), 외부에서 호출(접근) 불가

실행 Stack 메모리 영역에 저장 vs 객체는 Heap영역

묵시적(deafault) 초기화가 존재하지 않는다.

Temporary Variable

This : JVM이 자동적으로 this라는 지역변수를 만들어 준다. 예를 들어 Calculator 클래스의 sum 메소드가 intsum인지 doublesum인지 모른다. 그 때에 this를 통해서 자동으로 type을 구별할 수 있다.

 

This

Overloading Constructor(생성자)

    ② 현재 일하는 생성자 혹은 메소드를 소유한 객체를 가리키는 Local Variable

        현재 일하는 객체의 주소값을 가진다. Instance 메소드나 생성자 호출시 실행 Stack 영역에 가장 먼저 올려준다.