본문 바로가기
Programming/Basic

객체지향의 원리 - 캡슐화

by Blemish 2021. 5. 7.

객체지향의 원리


Goal

  • 캡슐화에 대해서 이해할 수 있다

 


캡슐화란?

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

 

  • 객체의 속성과 행위를 하나로 묶는다는 것은 클래스의 개념과 비슷하지만 구현 내용의 일부를 외부에 감추어 은닉한다는 것은 캡슐화의 핵심이다. 따라서 객체에 접근하기 위해서는 객체가 정해놓은 메서드나 필드를 통해서만 접근이 가능하다.
  • 소프트웨어 공학에서 요구사항 변경에 대처하는 고전적인 설계 방식으로는 응집도(cohesion)와 결합도(coupling)가 있다.
    • 응집도 : 클래스나 모듈 안의 요소들이 얼마나 밀접하게 관련되어 있는지를 나타냄
    • 결합도 : 어떤 기능을 수행할 때 다른 클래스나 모듈들에 얼마나 의존적인지를 나타냄
  • 캡슐화는 낮은 결합도를 유지할 수 있도록 해주는 객체지향 설계 원리이며 정보은닉을 통해 높은 응집도와 낮은 결합도를 갖도록 한다.
    • 정보은닉 : 외부에서 함부로 접근하지 못하도록 제한하는 것

※ 정보은닉이 왜 필요한가?

 소프트웨어에서 결합이 많을수록 문제가 많이 발생할 수 있다. 

 ex) 한 클래스에서 변경이 발생하면 해당 클래스를 의존하고 있는 다른 객체들도 변경해야 할 가능성이 커진다.

 

 

Example)

ArrayStack 클래스를 생성한 후 Main함수에 배열에 직접적으로 값을 저장하는 코드를 작성.

 

 

위의 코드의 문제점

  • Push나 Pop과 같은 함수가 아닌 직접적으로 값을 저장하였기 때문에 Main함수가 있는 클래스(이름 : Program)와 ArrayStack 클래스에 강한 결합이 생긴다. -> 변수에 직접적으로 접근하지 않고 Push, Pop과 같은 함수를 사용
  • 모든 변수가 public으로 선언되어 있으므로 정보은닉이 되지않음 -> 변하기 쉬운 변수를 private로 변경

 

 

  • 기존 코드에서 변하기쉬운 변수들을 모두 public에서 private로 변경
  • Main함수에서 직접적으로 변수에 접근하여 값을 저장하지 않고 함수(Push, Pop)을 이용

높은 결합도를 유지하고 있는 코드를 캡슐화를 이용하여 코드를 낮은 결합도를 유지하도록 변경함 -> 정보은닉

Push, Pop과 같은 함수를 사용하면 외부에서는 어떤 작업이 일어나는지 알 수가 없다.  -> 캡슐화

 

 

 

 

 

 

'Programming > Basic' 카테고리의 다른 글

메모리 구조  (0) 2022.07.03
가비지 컬렉션(Garbage Collection, GC)  (0) 2022.07.02
[OS] 프로세스, 쓰레  (0) 2022.07.01
SOLID 원칙 (1)  (0) 2021.05.11
객체지향의 원리 - 추상화  (0) 2021.05.03

댓글