객체 지향 프로그래밍, 부품화, 은닉화, 인터페이스

muz·2021년 3월 29일
0

Java

목록 보기
5/21
post-thumbnail

🤔 객체지향 프로그래밍

객체지향 프로그래밍(Object-Oriented Programing)은 로직을 상태(State)와 행위(behave)로 이루어진 객체로 만드는 것이다. 쉽게말해 객체를 만드는 것으로, 이 객체들을 레고 블럭처럼 조립해서 하나의 프로그램을 만드는 것이다. 쉽게 생각해서 객체는 변수와 메소드를 그룹핑한 것이다.

문법과 설계

문법

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

설계

좋은 객체를 만드는 법, 즉 설계를 잘하는 법이 중요하다. 좋은 설계는 현실을 잘 반영해야 한다. 복잡함 속에서 필요한 관점만을 추출하는 행위를 추상화라고 한다. 지하철 노선도가 디자인의 추상화라고 하면, 프로그램을 만든다는 것은 소프트웨어의 추상화라고 할 수 있다. 객체지향 프로그래밍은 좀 더 현실을 잘 반영하기 위한 노력의 산물이다. 문법을 이용해서 객체를 만든다고 다 되는 것이 아니다.

🤔 부품화

소프트웨어는 문제점을 그대로 상속받는다. 이러한 문제점을 극복하기 위해 부품화를 해야한다.

하드웨어로 비유해보는 부품화

키보드, 모니터, 마우스가 하나로 단일화되어 있다면, 셋 중 하나만 고장나도 전체를 바꿔야 한다. 이를 각각 분리, 즉 부품화를 시키면 문제가 발생한 하나의 기계만 바꿔주면 된다. 이를 분리하는 기준을 세우는 것이 바로 추상화이다.
그러나 요즈음에는 분리된 컴퓨터를 하나로 합치고 있다. 부품화가 중요한 것임이 분명하나 이보다 더 중요한 것은 적절함이다.

부품화의 특성을 보여줄 수 있는 기능

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

객체의 등장

프로그램이 커지면 더 많은 메소드들이 생겨난다. 메소드와 변수를 관리하는 것이 더 어려워지다보니 어느순간 새로운 도약인 객체지향 프로그래밍 이 나타나 연관된 메소드와 그 메소드가 사용하는 변수들을 분류, 그룹핑하게 된다. 이렇게 그룹핑 한 대상이 바로 객체(Object)이다.

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

🤔 은닉화, 캡슐화

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

🤔 인터페이스

잘 만들어진 부품은 서로 교환할 수 있어야한다. 집에 있는 컴퓨터에 A모니터를 연결하다가, B모니터를 연결할 수 있어야 한다. 모니터와 컴퓨터가 서로 교환관계에 있는 것처럼 모니터와 컴퓨터를 연결하는 케이블의 규격이 표준화되어 있어야 한다. 모니터 제작 회사에서 컴퓨터가 어떻게 만들어졌는지는 궁금하지 않다. 단지 각각의 부품이 미리 정해진 약속에 따라 신호를 입출력할 수 있게끔 연결점의 모양이 표준에 맞게 만들어지면 된다. 이러한 연결점을 인터페이스(interface)라고 한다. 구멍에 아무 key를 넣는다고 해서 문을 열 수 있는가? 아니다. 인터페이스는 이렇게 이질적인 것들이 결합하는 것을 막아주는 역할도 한다.

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


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

profile
Life is what i make up it 💨

0개의 댓글