Language

객체 지향 프로그래밍 (은닉화,캡슐화,인터페이스)

윤민_ 2021. 10. 31. 19:42

객체지향 프로그램이란?

객체지향 프로그래밍(Object Oriented Programming)은 좀 더 나은 프로그래밍을 만들기 위한 프로그래밍 패러다임으로 로직을 상태(state)와 행위(behave)로 이루어진 객체로 만드는 것이다. 이 객체들을 마치 레고 블록처럼 조립해서 하나의 프로그램을 만드는 것이 객체지향 프로그래밍이라고 할 수 있다.

구체적으로 알아보자면, 하나의 객체 안에는 그 객체가 가지고있는 취지, 기능 등과 연관되어있는 변수와 메소드를 객체 안에 가둬두고 서로 연관성이 없는 다른 로직과 구분 짓는 것이다.

객체지향 프로그램을 만들 때 중요한 요소들을 알아보자

1. 문법

객체지향을 편하게 사용할 수 있도록 언어가 제공하는 기능을 익히는 것이 중요하다. 문법을 이해하고 숙지해야 객체 생성이 가능하다. 

2. 설계

좋은 객체를 만들기 위해선 설계를 잘하는 것이 중요하다. 좋은 설계는 현실을 잘 반영해야 한다.

3. 추상화

복잡함 속에서 필요한 관점만을 추출하는 행위를 추상화라고 한다. 지하철 노선도가 현실에서의 디자인의 추상화한 예시라고 본다면,

프로그램을 만든다는 것은 소프트웨어의 추상화라고 할 수 있다. 객체지향 프로그래밍은 좀 더 현실을 잘 반영하기 위한 노력의 결과물이다. 문법을 이용해서 객체를 만든다고 모든 것이 해결되는 것은 아니다.

4. 부품화

소프트웨어가 문제점을 가지고 있다면 그 문제점이 다른 소프트웨어로 그대로 상속받는다.

이러한 문제점을 극복하기 위해 소프트웨어를 부품화하는 것이 중요하다. 

4-1. 하드웨어로 비유해보는 부품화

키보드, 모니터, 마우스가 하나로 단일화되어 있다면(내장되어있거나 하나의 단위로 묶여있을 시), 셋 중 하나만 고장 나도 전체를 바꿔야 한다. 하지만 이들이 다른 객체로써 떨어져 있다면? 즉, 부품화를 시키면 문제가 발생한 하나의 기계만 바꿔주면 된다.

이를 분리하는 기준을 세우는 것이 바로 추상화이다. 그러나 최근 들어 컴퓨터의 부품들이 경량화하거나 효율을 높이기 위해를 하나의 단일화된 모습을 보이고 있다. 부품화가 중요한 것임이 분명하지만 상황에 맞게 적절하게 발전해 나아가는 것이 중요하다. 

4-2. 부품화의 특성을 보여줄 수 있는 기능

메소드는 부품화의 대표적인 예라고 할 수 있다. 연관된 로직들을 결합해서 메소드라는 완제품을 만들고, 이 메소드들을 부품으로 하나의 완제품인 독립된 프로그램을 만드는 것이다. 메소드를 사용하면 코드가 보다 간결화되고, 메소드 별로 가진 기능이 분류되어 있기 때문에  필요한 코드를 찾기도 쉽고, 문제를 진단하는 시간도 단축할 수 있다.


객체의 등장

프로그램이 커지면 더 많은 메소드들이 생겨난다. 메소드와 변수를 관리하는 것이 어려워지다 보니 이를 해결하기 위해 새로운 도약인 객체지향 프로그래밍 이 나타났다.

객체지향 프로그래밍은 연관된 메소드와 그 메소드가 사용하는 변수들을 분류, 그룹핑하게 된다.

(연관된 메소드 + 그 메소드가 사용하는 변수들을 그룹핑)

이렇게 그룹핑 한 대상이 바로 객체(Object)이다.  

파일과 디렉터리가 있을 때, (메소드나 변수가)-> 파일이면, (이 파일을 그룹핑하는 디렉터리가)->객체라고 할 수 있다. 

은닉화, 캡슐화

부품화는 단순히 동일한 기능을 하는 메소드, 변수를 그룹핑한다고 되는 게 아니다. 제대로 된 부품은 사용자가 그 부품이 어떻게 만들어졌는지는 몰라도, 그 부품을 사용하는 방법만 알아도 쓸 수 있어야 한다.(우리가 마우스의 제작 법은 모르지만 사용법을 아는 듯이)
내부의 동작 방법을 케이스 안에 숨기고, 사용자에게는 부품의 사용 방법만을 노출하는 것을 정보의 은닉화(Information Hiding), 또는 캡슐화(Encapsulation)라고 한다. 

 인터페이스

잘 만들어진 부품은 서로 교환할 수 있어야 한다. 집에 있는 컴퓨터에 A모니터를 연결하다가, B모니터를 연결할 수 있어야 한다. 모니터와 컴퓨터가 서로 교환 관계에 있는 것처럼 모니터와 컴퓨터를 연결하는 케이블의 규격이 표준화되어 있어야 한다.

우리는 모니터 제작 회사에서 컴퓨터가 어떻게 만들어졌는지는 궁금하지 않다. 단지 각각의 부품이 미리 정해진 약속에 따라 신호를 입출력할 수 있게끔 연결점의 모양이 표준에 맞게 만들었는지가 중요하다. 이러한 연결점을 인터페이스(interface)라고 한다.

구멍에 아무 key를 넣는다고 해서 문을 열 수 있는가? 아니다. 인터페이스는 이렇게 이질적인 것들이 결합하는 것을 막아주는 역할도 한다.

즉, 인터페이스는 부품들 간의 약속이다. 

 


[생활코딩]https://opentutorials.org/course/1223/5399