컴퓨터공학 💻 도서관📚

Part2. 2-11 캡슐화 (encapsulation) 본문

✅🌲강의 복습 노트/패캠 JavaSpring 강의,코드 복습

Part2. 2-11 캡슐화 (encapsulation)

들판속초록풀 2024. 12. 26. 00:39

 

캡슐화 : 캡슐화는 데이터(멤버변수)와 알고리즘(메서드)을 하나로 묶는 것이다

              객체의 속성(data, fields)과 행위(메서드) 를 하나로 묶고, 실제 구현 내용 일부를 내부에 감추어 은닉한다

 

 

캡슐화는 정보를 감싸서 외부에 꼭 필요한 정보만 오픈한다라는 개념이다

캡슐화는 여러가지 메서드 중 외부에서 사용할 꼭 필요한 메서드 한두 개만 오픈하고, 나머지는 자동으로 모든 것이 생산될 수 있도록 하는 용도로 사용할 수 있다

여러개의 메서드에 순서대로 지켜져야 되는 순서가 있고, 세세한 걸 클라이언트 코드 쪽에서 알 필요가 없다

대부분의 멤버 변수와 메서드는 감추고 외부에 통합된 인터페이스를 제공해서 클라이언트가 사용하기 쉽게
제공된 것만 사용하면 자동으로 다 만들어지는 일관된 기능들을 제공할 수 있게 한다


이런 경우는 클라이언트가 제어할 수 있는 부분이 굉장히 적기 때문에 캡슐화가 잘된 객체는 
클라이언트에서 쓸 수 있는 API 가 한정적이다

 


또 하나의 장점은 클라이언트 코드하고 상관없이 서비스를 제공하는 객체 쪽에서
오류에 대한 탐지를 하거나 객체에 대한 업그레이드를 하기 때문에 디버깅이나 기능을 추가하는데 유연하다고 볼 수 있다

 

멤버변수나 메서드를 어떻게 공개하는 것이 클라이언트 쪽이 더 편하게 느낄지와 객체 또한 오류 없이 잘
관리가 될 수 있을지를 고민해야 한다  


문자열을 연결할 때 + 기호를 사용해서 연결할 수 있지만 이는 메모리 오버헤드가 크기 때문에
 string buffer / string builder 클래스를 사용해서 문자열을 연결한다 

public class MakeReport {

	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);
	}
	
	public String getReport()     // 캡슐화의 예시 (위 함수들은 다 private)
	{                          // 여러개의 메서드에 순서대로 지켜져야 되는 순서가 있고
                               	   // 세세한 걸 클라이언트 코드 쪽에서 알 필요가 없다
		makeHeader();                // 헤더
		generateBody();              // 바디
		makeFooter();                // 푸터
		return buffer.toString();
	}
}

 

Comments