▸JAVA/기본 상식

객체지향 언어의 특징(캡슐화) [2/4]

코데방 2019. 12. 9.
728x90

2. 캡슐화

  • 내부의 동작 방법을 단단한 케이스 안으로 숨기고 사용자에게는 사용방법만을 노출시킨다.
  • 중요 정보를 숨겨(정보 은닉) 잘못된 수정을 막고, 사용자가 쉽게 사용할 수 있도록 만들어 줌

 

굳이 사용자가 알 필요가 없는 부분은 접근할 수 없도록 꽁꽁 싸서 캡슐안에 넣어둔다는 의미에서 캡슐화라고 합니다. 클래스 변수(필드)가 될 수도 있고 메소드가 될 수도 있습니다. 내가 만든 클래스에서 불필요한 곳에는 직접 접근할 수 없도록 하여 리소스의 공유와 보안 사이의 균형을 맞춰주는 것입니다.

적절한 예로 해쉬 사례를 들 수 있을 것 같습니다. 제가 어떤 문자열을 주면 해쉬값으로 바꿔주는 함수를 C언어로 하나 만든다고 해보겠습니다. 함수의 기본 뼈대는 "문자열 순서에 따라 아스키코드에 특정 값을 곱해서 더한 값을 해쉬값을 한다" 입니다.

 

이걸 기본함수에 넣어서 다른 사람이 쓸 수 있도록 해봅시다. 실수로 규칙을 바꿔버리면 서로 해쉬값을 검증할 수가 없게 됩니다. 규칙은 절대적으로 지켜야만 합니다. 그래서 아래와 같이 함수를 세 개 만들어서 하나만 공유해줍니다. 나머지 하나는 못보게 막아둡니다. 이렇게 막아둔 부분이 캡슐화됐다라고 할 수 있습니다.

모든 특징이 마찬가지겠지만 캡슐화가 객체지향 언어 고유의 특성은 아닙니다. 절차지향인 C언어에서도 여러 가지 방법을 써서 비슷하게 구현은 가능합니다. 다만, 객체지향 언어에서 이러한 방법을 보다 효율적으로 쓸 수 있도록 다양한 기능과 안전장치를 특화시켰다고 보면 됩니다. 

 

 

 

 

C언어에서는 캡슐화를 위해 소스 파일을 분리하고 헤더파일을 이용해서 원하는 함수만 노출시키는 방법을 썼다면, Java에서는 이 캡슐화를 클래스 단위 내에서 간단히 할 수 있도록 했습니다. 딱 봐도 Java가 훨씬 직관적이고 구조적입니다. C언어는 이런 구조가 많아지고 복잡해질 수록 매우 번거롭고 혼란스러워 집니다.

이전글에서 언급했듯이 Java는 사용자를 중심으로 생각하다보니 우리가 생각하는 방식과 비슷한 구조를 가지게 됐고, C언어는 컴퓨터를 중심으로 생각하다보니 우리의 편의성에 대한 배려가 부족하기 때문이라고 볼 수 있을 것 같습니다. 대신 C언어는 그래서 자유도가 매우 높습니다. 기본적으로 사용자들이 다 알아서 잘 할 것이라 믿는다라는 사상을 가지고 있는거죠. Java는 여러 사용자들이 이리저리 같이 쓰다 보면 실수할 수도 있으니 구조적으로 제약을 걸어서 안전하고 편하게 쓰자라는 사상을 가지고 있습니다.

 

 

 


 

이러한 캡슐화는 접근 제한자라는 것을 통해 이루어집니다. 해당 내용은 아래 링크 글을 참조하시면 됩니다.

 

2019/12/10 - [JAVA/기본 문법] - 접근 제한자 (Public, Protected, Default, Private)

 

728x90

댓글

💲 추천 글