본문 바로가기

자바

15) 객체지향프로그래밍

1)객체지향프로그래밍

객체지향 프로그래밍(Object-Oriented Programming)은 좀 더 나은 프로그램을 만들기 위한

 

프로그래밍 패러다임으로 로직을 상태(state)와 행위(behave)로 이루어진 객체로 만드는 것이다.

 

이 객체들을 마치 레고 블럭처럼 조립해서 하나의 프로그램을 만드는 것이 객체지향 프로그래밍이라고 할 수 있다.

 

다시 말해서 객체지향 프로그래밍은 객체를 만드는 것이다.

 

객체는 변수와 메소드를 그룹핑한 것이다.

 

2)설계

지하철 노선도가 디자인의 추상화라고 한다면 프로그램을 만든다는 것은 소프트웨어의 추상화라고 할 수 있다.

 

객체 지향 프로그래밍은 좀 더 현실을 잘 반영하기 위한 노력의 산물이다.

 

이것은 단순히 객체 지향의 문법을 이용해서 객체를 만든다고 달성되는 것이 아니다.

 

고도의 추상화 능력이 필요하다.

 

3)부품화

객체 지향은 부품화의 정점이라고 할 수 있다.

 

하지만 우리는 아직 객체 지향을 배우지 않았다.

 

그래서 우리가 배운 것 중에서 부품화의 특성을 보여줄 수 있는 기능을 생각해보면 좋을 것 같다.

 

메소드는 부품화의 예라고 할 수 있다.

 

메소드를 사용하는 기본 취지는 연관되어 있는 로직들을 결합해서 메소드라는 완제품을 만드는 것이다.

 

그리고 이 메소드들을 부품으로 해서 하나의 완제품인 독립된 프로그램을 만드는 것이다.

 

메소드를 사용하면 코드의 양을 극적으로 줄일 수 있고, 메소드 별로 기능이 분류되어 있기 때문에 필요한 코드를 찾기도 쉽고 문제의 진단도 빨라진다.

 

그런데 프로그램이 커지면 엄청나게 많은 메소드들이 생겨나게 된다.

 

메소드와 변수를 관리하는 것은 점점 어려운 일이 되기 시작한다.

 

급기야는 메소드가 없을 때와 같은 상황에 봉착하게 된다.

 

메소드는 프로그래밍의 역사에서 중요한 도약이었지만, 이 도약이 성숙하면서 새로운 도약지점이 보이기 시작한 것이다.

 

그 도약 중의 하나가 객체 지향 프로그래밍이다.

 

이것의 핵심은 연관된 메소드와 그 메소드가 사용하는 변수들을 분류하고 그룹핑하는 것이다.

 

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

 

비유하자면 파일과 디렉토리가 있을 때 메소드나 변수가 파일이라면 이 파일을 그룹핑하는 디렉토리가 객체라고 할 수 있다.

 

이를 통해서 더 큰 단위의 부품을 만들 수 있게 되었다. 

 

4)은닉화, 캡슐화

그런데 부품화라고 하는 목표는 단순히 동일한 기능을 하는 메소드와 변수를 그룹핑한다고 달성되는 것은 아니다.

 

제대로된 부품이라면 그것이 어떻게 만들어졌는지 모르는 사람도 그 부품을 사용하는 방법만 알면 쓸 수 있어야 한다.

 

이를테면 모니터가 어떻게 동작하는지 몰라도 컴퓨터와 모니터를 연결하는 방법만 알면 화면을 표시 할 수 있는 것과 같은 이치다.

 

즉 내부의 동작 방법을 단단한 케이스 안으로 숨기고 사용자에게는 그 부품의 사용방법만을 노출하고 있는 것이다.

 

이러한 컨셉을 정보의 은닉화(Information Hiding), 또는 캡슐화(Encapsulation)라고 부른다. 

 

5)인터페이스

컴퓨터와 모니터를 만드는 업체들은 위와 같은 케이블의 규격을 공유한다.

 

모니터 입장에서는 컴퓨터가, 컴퓨터 입장에서는 모니터가 어떤 식으로 만들어졌는지는 신경쓰지 않는다.

 

각각의 부품은 미리 정해진 약속에 따라서 신호를 입, 출력하고, 연결점의 모양을 표준에 맞게 만들면 된다.

 

이러한 연결점을 인터페이스(interface)라고 한다.

 

위의 그림을 보면 HDMI 케이블의 연결점은 특유의 생김새가 있다.

 

만약 HDMI 케이블을 랜선을 연결하는 구멍에 연결하려고 한다면 어떻게 될까?

 

동작하지 않을 뿐 아니라 연결 자체가 되지 않는다.

 

인터페이스란 이질적인 것들이 결합하는 것을 막아주는 역할도 하는 것이다.

 

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

 

이러한 약속을 프로그래밍적으로는 어떻게 구현하는가도 살펴본다.

 

출처 - 생활코딩

 

'자바' 카테고리의 다른 글

17) 클래스 맴버와 인스턴스 맴버  (0) 2021.10.19
16) 클래스와 인스턴스 그리고 객체  (0) 2021.10.19
14) 입력과 출력  (0) 2021.10.18
13) 메소드  (0) 2021.10.18
12) 배열  (0) 2021.10.18