캡슐화 (encapsulation)

kangsun·2023년 3월 15일
0

Java

목록 보기
39/44

정보 은닉을 활용한 캡슐화


마찬가지로 private과 protected를 이용해서 정보를 hiding 하는 것.

하지만 캡슐화는 이보다 더 객체를 좀 더 감싸서 여러가지 메서드 중 외부에 사용할 꼭 필요한 메서드 한 두개만 오픈하고 나머지는 자동으로 모든 것이 생성될 수 있도록 만드는 것.

정보를 감싸서 필요한 정보만 외부에 오픈한다!


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

클라이언트가 이것만 쓰면 자동으로 만들어지는 기능을 제공할 수 있도록 만들 수 있다. 클라이언트가 제어할 수 있는 부분이 적기때문에 캡슐화가 잘되어 있는 객체는 클라이언트에서 사용할 수 있는 api가 한정적이다. 또한 그 객체가 하는 기능이 매번 일관적인 기능을 제공할 수 있다.

또 하나의 장점은 오류에 대한 방어가 가능하다. 클라이언트 코드와 상관없이 서비스가 제공하는 객체쪽에서 오류의 디텍션이나 아니면 객체를 업그레이드만 해주면 되기 때문에 디버깅이나 기능을 추가하는데 유연하다.

package ch11;

public class MakeReport {
	// StringBuffer() : 텍스트를 연결해주는 기능
	// "" 안에 String 을 넣어주고 + 로 값을 넣어주는 방식은 메모리 오버헤드가 발생할 수 있기때문에
	// StringBuffer() 와 StringBuilder() 를 사용해주면 append()를 활용해 스트링을 연결해줄 수 있다.
	StringBuffer buffer = new StringBuffer();
	
	private String line = "========================================\n";
	private String title = "   이름\t   주소  \t\t  전화번호  \n ";
	
	private void makeHeader() {
		buffer.append(line);
		buffer.append(title);
		buffer.append(line);
	}
	
	private void generateBody() {
		buffer.append("James  \t");
		buffer.append("Seoul Korea \t");
		buffer.append("010-2222-3333 \n");
		
		buffer.append("Tomas \t");
		buffer.append("NewYork US \t");
		buffer.append("010-7777-0987 \n");
	}
	
	private void makeFooter() {
		buffer.append(line);
	}
	
	// private으로 만든 메서드들은 클라이언트쪽에 오픈해봤자 소용도 없고 
	// 다 오픈해놓아도 순서대로 사용해야하기 때문에 
	// 클라이언트쪽에는 밑에 메서드 하나만 제공해주면 된다.
	// ------------------------------------------------------------------
	
	
	//외부에서 사용할 수 있는 메서드는 이거 하나!
	public String getReport() {
		makeHeader();
		generateBody();
		makeFooter();
		return buffer.toString();
	}

	
}
profile
코딩 공부 💻

0개의 댓글