본문 바로가기

programming

OOP(Object Oriented Programing) 객체지향 프로그래밍

질문 받았던 내용 중에 머릿 속에서 구름처럼 어렴풋이 알았던 것이 드러나서 구름을 걷어내 보고싶었다.

 

1. 객체 (Object)

객체는 대상, 오브젝트, 한 덩이(?), 하나의 개념 

예를 들어 사람을 하나의 객체라고 할 수 있고, 자동차를 하나의 객체라고 할 수 있다.

프로그래밍 적으로는 커스텀한 ValidException 을 하나의 객체라 할 수 있고,

한가지 로직을 수행하는 SomethindService 도 하나의 객체라고 할 수 있다.

 

 

2. 클래스 (Class)

객체들이 공통적으로 갖는 속성들을 모아서 정의 내린 것을 클래스 라고 한다.

흔히 말하는 객체는 붕어빵, 클래스는 붕어빵 틀

좀더 코드에 가깝게 예시를 들면 class SomethingService 내부에 어쩌구 서비스를 구성하는 요소들을 정의하고,

const somethingService = new SomethingService 로 클래스(빵틀) 에서 그때 그때 필요한 객체(빵) 을 찍어내는 것이다.

 

 

3. 객체지향 프로그래밍 (OOP)

객체를 좋아하는(추구하는) 프로그래밍(개발)이다

다른 개념으로 절차 지향 프로그래밍이 있는데, 절차 지향 프로그래밍은 프로세스가 함수 단위로 순서대로 진행되는 것을 말한다

반면 OOP는 객체들의 유기적인 관계를 통해서 프로세스가 진행된다.

 

어플리케이션을 구성하는 요소들을 객체로 바라보고, 객체끼리 연동, 유기적으로 작동하는 것

 

4. 객체지향 프로그래밍의 특징

1) 추상화

김철수, 이영희, 박훈이, 최짱구 등의 개개인이라는 객체를 공통화하여 사람이라는 클래스로 추상화 하는 것이다.

추상화는 손에 잡히는 형체는 없지만 머릿속에 어떤 개념이 잡히도록 하는 것을 말한다.

객체지향프로그래밍에서 추상화는 어플리케이션에서 사용되는 객체들의 공통된 특징을 파악하여 클래스로 정의해두는 설계기법을 말한다.

 

2) 캡슐화

추상화를 하면서 객체 내부의 특징들을 private, public으로 정의할 수 있는데,

private 으로 정의된 속성들이 캡슐화이다.

외부에서 건드릴 필요 없는 내부로직들을 캡슐화 함으로써 정보를 은닉하고, 독립적으로 작동할 수 있도록 한다.

변경에 유연한 프로그램을 만들기 위해서 독립시키는 것이다.

 

3) 상속

코드의 중복을 피하기 위함

부모 클래스로 부터 기본적인 속성을 상속 받고, 각각의 개성을 살리는 자식 클래스를 만들어 낼 수 있다.

Exception이 있고, 그 Exception을 상속받아서 ValidException을 개성있게 만들어 낼 수 있다.

 

4) 다형성

부모 클래스로부터 상속받은 속성에 대해서, 이미 상속받았으니까 끝이 아니고, 자식 클래스에서 그 속성을 재정의 할 수 있다.

이것을 오버라이딩이라고 한다.

같은 이름의 속성을 유지할 수 있다.

메서드 이름을 낭비하지 않을 수 있고, 이름을 뭘로 지어야할지 고민하는 시간이 줄어든다.

 

 

OOP 는 코드를 여럿이서 협업하여 작성할 때 룰을 규정해 나가면서, 누가봐도 이해하기 쉽고, 유지보수하기 쉬운 방법으로 발전한 프로그래밍 방법이라고 할 수 있다.