JAVA 웹 개발 패키지 - 패스트캠퍼스/Chapter2

캡슐화(encapsulation) / this가 하는 일

giggs 2021. 12. 26. 16:16

 

 

캡슐화 (encapsulation)

 

 

정보 은닉을 활용한 캡슐화

  • 꼭 필요한 정보와 기능만 외부에 오픈함
  • 대부분의 멤버 변수와 메서드를 감추고 외부에 통합된 인터페이스만은 제공하여 일관된 기능을 구현하게 함
  • 각각의 메서드나 멤버 변수를 접근함으로써 발생하는 오류를 최소화 한다.

~~ 이것만 입력하면 자동으로 쭉~ 나오게

일관된 1-2개만 사용하게 하므로 디버깅 잡기와 기능 추가에 유용

 

 

 

캡슐화는 하나의 방법이다.

객체지향 설계에서 변수나 메서드를 모두 공개하는 것이 아니라 어떻게 공개해서

사용하는 쪽으로 하여금 좀 더 편하게, 효율적으로 사용하게 하느냐

객체 또한 오류 없이 잘 관리할 수 있느냐도 중요한 포인트

 


예제 ) 리포트 만들기 

 

 

 

 

① StringBuffer 

 

 

 

 

①. append 메서드

 

 

 

 

 

 

 

 

 

 

 

 

 

①스트링 값으로 리턴

 

 

 

 

 

 

 

 

 

MakeReport로 report 생성

② public으로 제공된 getReport 생성자 사용

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

①Stringbuffer 

string 클래스를 쭉 이어서 쓰는 방법이 + + 해서 쓸 수 있는데 메모리 오버 크다(뒤에 설명)

내부적으로 늘어날 수 있는 버퍼를 가지고 있는 클래스에다가 스트링 쭉 연결하고 나중에 string 값으로 리턴하는 방법 쓸 때 Stringbuffer // ~~~. append  메서드 사용  

 

②각 메서드에 입력할 순서나 내용들이 정해져 있고, 그것을 클라이언트가 알아야 할 필요도 없다. 그래서 private으로 제한하고 public으로 제공된 생성자만 사용하게 해 준다.

 

 

 


 

 

객체 자신을 가리키는 this

 

 

this가 하는 일

  1. 인스턴스 자신의 메모리를 가리킴
  2. 생성자에서 또 다른 생성자를 호출할 때 사용
  3. 자신의 주소(참조값)를 반환함

 

 

1. 생성된 인스턴스 메모리의 주소를 가짐

 

클래스 내에서 참조 변수가 가지는 주소 값과 동일 한 주소 값을 가지는 키워드

 

2. 생성자에서 다른 생성자를 호출하는 this

 

- ① this를 사용한 생성자가 선언되어 있는 경우, 가장 가까운 형식에 맞는 생성자 찾아서 적용

 

- ② 클래스에 생성자가 여러 개 인경우, this를 이용하여 생성자에서 다른 생성자를 호출할 수 있음

 

- 주석 : 생성자에서 다른 생성자를 호출하는 경우, 인스턴스의 생성이 완전하지 않은 상태이므로

  this() statement 이전에 다른 statement를 쓸 수 없음

 

 

 

 

 

 

 

 

 

② 생성자 불러와서

생성자 사용 가능

+주석 참고

 

 

 

①첫 번째로 작성 -

this가 선언되어있을 때

 

 

 

 

 

 

따로 test class 안 만들고

같은 클래스에서 실행까지 해봄

 

 

생성자 호출 후 그다음에

name="test"; 적용 가능

test, 1 출력 확인 GOOD :)

 

 

 

 

 

 

3. 자신의 주소를 반환하는 this

 

 

this 값 반환해주는

getPerson 생성자 생성

 

 

 

---실행 Test Class --

 

 

Person 타입으로 생성된

person의 값하고 

 

==

 

Person에서 this반환 값

person2의 값하고 같다.

 

인스턴스 메모리 이미지 참조

 

 

 

 

 

 

 

 

 

 

this는 자기 자신 메모리를 가리키기 위해서 코드 안에서 this.~

메서드보다는 멤버 변수 가리킬 때 주로 사용

 

생성자에서 다른 생성자 호출할 때 주로 사용

 

 


 

 

 

review

캡슐화
String Buffer // ~~. append 메서드
this
인스턴스 메모리 // 생성자 호출 // 자신의 주소 반환 

캡슐화 부분에서 어느 부분을 private으로 할지 public으로 할지
생각해서 제공하는 것도 능력이겠구나 생각이 들었다.
정보 보안 부분에서도 관계가 있을 거 같다.

this... 앞에서 사용할 때는
입력된 값을 받아 먼저 선언된 타입에 넣어주는 용도로 썼었다.
그땐 쉬워 보였는데...
이번에 this가 하는 일과 활용에 대해 학습하고는 복잡해졌다.
역시 그냥 되는 것이 아니었어.

그래도 무작정 따라 만들던 코드들의 의미를 하나하나 이해하고
왜 이렇게 사용했는지 알아가는 과정이 흥미롭다.