power-girl0-0

[객체지향] 객체지향 프로그래밍 본문

언어/Javascript

[객체지향] 객체지향 프로그래밍

power-girl0-0 2021. 2. 5. 12:24
728x90

생활코딩 javascript를 참고하여 공부하였습니다.

스스로 공부한 것을 정리하고 복습하기 위한 목적으로 작성하였습니다.

( 출처 :  https://opentutorials.org/course/743)


 객체지향 프로그래밍 (Object-Oriented Programming) 

프로그램을 구성하고 있는 로직을 상태와 행위로 구분해서, 서로 연관되어 있는 상태와 행위를 그룹핑해놓은 것을 객체라고 할 수 있다.

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

 

쉽게 생각하면, 객체는 만들고자 하는 기능과 연관된 변수와 메소드를 그룹핑한 것이다.

객체를 사용하면 재활용성이 높아지는 장점을 갖고 있다.


 문법과 설계 

객체지향 프로그래밍 교육은 크게 두 가지로 구분된다.


 문법 

하나는 객체지향을 편하게 할 수 있도록 언어가 제공하는 기능을 익히는 것이다.

이러한 기능들은 if, for문처럼 문법적인 구성을 가지고 있다.

따라서, 문법을 이해하고 숙지해야 객체를 만들 수 있다.


 설계 

두번째는 좋은 객체를 만드는 법이다. 이것을 다른 말로는 설계를 잘하는 법이라고 할 수 있다.

좋은 설계는 현실을 잘 반영해야 하지만, 현실은 복잡하다.

그렇지만 설계에 있어서 복잡함 전체가 필요한 것이 아니므로, 복잡한 현실을 추상화하면 된다.

 

복잡함 속에서 필요한 관점만을 추출하는 행위를 추상화(abstract)라고 한다.

즉, 추상화라는 것을 해결해야될 문제 또는 반영해야 될 현실을 소프웨어적으로 단순화 시켜서 만드는 행위를 의미한다.

 

어떻게 보면, 소프트웨어를 설계한다는 것은 복잡한 현실에서 추상화하는 과정이라고 할 수 있다.


 부품화 

객체를 만든다는 것은 어떻게 하면 그 로직을 재활용 가능하도록 부품화하는 것이라고 볼 수 있다.


그러면, 하드웨어에서 이루어지고 있는 부품화에 대해서 생각해보자.

 

아래 사진은 초창기의 컴퓨터이다.

본체와 모니터, 키보드가 단일화되어 있는 것을 확인할 수 있다.

이로 인해 하나라도 고장나면, 컴퓨터를 바꿔야 되는 문제점을 가지고 있는 컴퓨터이다.

 

이를 해결하기 위해, 추상화하여 각각의 기능에 따라 부품을 만들어야 한다.

 

그 부품을 그룹핑하고, 구체화하여 만들어준 컴퓨터가 바로 아래 사진의 컴퓨터이다.

이렇게 하면, 고장난 부품만 교체하면 되기 때문에 문제점이 해결된다.

 

하지만 시대, 환경에 따라서 어떻게 추상화 할 것인지의 관점이 계속적으로 바뀌게 된다.

이처럼 설계라는 것은 정답이 있는 것이 아니지만, 느 환경에 있든 적합하게 만드는 것이 중요하다.


그동안 앞에서 공부했던 것 중, 부품화의 특성을 보여줄 수 있는 기능을 생각해보자.

 

메소드를 부품화의 예로 들 수 있다.

메소드를 사용하는 기본 취지는 프로그램 안에 있는 여러가지 기능들 중에서 중복적으로 사용되는 것을 하나의 로직으로 만들어서 재활용성을 높인 것이다.

 

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

하지만, 프로그램이 커지면 많은 메소드가 생겨나서 메소드와 변수를 관리하는 것은 어려워진다.

 

그래서 생긴 것이 객체 지향 프로그래밍이다.

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

바로 그렇게 그룹핑한 대상은 객체이다.


 은닉화, 캡슐화 

하지만 모든 곳에서 자신이 만든 코드를 재활용할 수 있는 것은 아니다.

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

 

객체가 갖고 있는 메소드의 사용법만 알고 있으면, 사용자는 그 객체를 이용하고 조합하여 더 좋은 완제품을 만들 수 있다.

 

이러한 것을 "정보의 은닉화" 또는 "캡슐화"라고 부른다.

즉, 객체가 어떻게 생겼는지 모르고도 이 객체를 사용할 수 있도록 하겠다는 의미이다.


 인터페이스 

좋은 부품의 또 다른 특징으로는 인터페이스가 있다.

잘 만들어진 부품이라면 부품과 부품을 서로 교환할 수 있어야 한다.

 

그렇게 하려면, 각각의 부품은 미리 정해진 약속에 따라서 신호를 입출력하고, 연결점의 모양을 표준에 맞게 만들면 된다. 이러한 연결점을 인터페이스(interface)라고 한다.

 

 

 

 

728x90

'언어 > Javascript' 카테고리의 다른 글

[객체지향] 전역객체  (0) 2021.02.05
[객체지향] 생성자와 new  (0) 2021.02.05
[함수지향] 함수의 호출  (0) 2021.02.05
[함수지향] arguments  (0) 2021.02.05
[함수지향] 클로저  (0) 2021.02.05
Comments