객체지향? OOP

sudyn·2023년 9월 14일

TypeScript

목록 보기
2/6

객체지향이란

OOP(Object Oriented Programming)이란 객체들을 컨셉으로 하는 프로그래밍 방식을 의미한다.
우리가 알고 있는 언어 들 중 java, c++, c#, python, kotlin, javascript가 이에 속한다.

vs 절차지향

Imperative and Procedural Programming

절차지향은 명령과 절차를 지켜나가며 프로그래밍하는 방식으로 정의된 순서에 따라 코드가 실행된다. 때문에 코드 전체의 흐름을 알아야 하며 코드 수정시 다른 side effect를 고려해야하는 문제가 있다

객체지향에서는 이를 객체라는 단위로 의사소통한다.
객체 단위로 만들어 하나의 객체에서 문제가 생기면 해당 부분만 수정해주면 되고, 새로운 기능이 필요하다면 object를 추가해줄 수 있다.
또 반복되는 코드나 데이터는 Object를 재사용함으로써 개발자에게 생산성을 향상시켜주고 품질 좋은 유지보수를 가능하게 해준다.

객체가 무엇이냐?

객체는 data(fileds, property) + function(method)로 이루어진 단위로 class를 통해 정의된다.

class는 데이터가 없는 정의만 있는 템플릿의 역할을 하고, 여기에 데이터를 만들어 넣은 것이 객체가 된다.

어떻게 하면 이런 객체지향의 장점을 잘 살려서 프로그래밍할 수 있을까?

객체지향의 4가지 원칙

💊 캡슐화(Encapsulation)

캡슐화는 서로 연관있는 data, function을 묶은 것이다. 예를 들어 우리는 감기약을 먹을 때 캡슐 안에 다양한 성분이 들어있고, 우리는 이 약의 성분을 몰라도 된다.
이렇게 관련된 내용들을 모아 하나의 객체로 담아두고 외부에서 내부의 내용을 모르게 해줄 수 있다.(은닉화)
내부의 상태는 또 외부에서 변경시킬 수 있게 된다.

🎨 추상화(Abstraction)

공통성과 본질을 모아 추출하는 것을 추상화라고 한다.
예를 들어 자동차와 오토바이는 모두 이동 수단이며 모든 이동 수단은 전진과 후진을 할 수 있다는 공통점이 있다.
이런 공통 내용을 외부의 인터페이스로 객체의 역할만을 정의하고 실제 객체 내에서 구현하는 방법이다.

👨‍👩‍👧‍👦상속(Inheritance)

기존의 클래스를 재활용하여 새로운 클래스를 작성하는 것으로 재사용성에 목적이 있다.
상위 클래스로부터 확장된 여러 개의 하위 클래스들이 모두 상위 클래스의 속성과 기능들을 간편하게 사용할 수 있게 된다.
이를 is-A 관계라고도 한다.

🧫 다형성(Polymorphism)

poly(many)+morphism(형태)의 합성어로 상속을 통해 만들어진 객체들이 속성이나 기능이 상황에 따라 여러 가지 형태를 가질 수 있는 성질을 의미한다.
즉, 같은 이름의 메서드가 상황에 따라 다른 역할을 수행할 수 있게 되며 객체지향의 꽃이라고 할 수 있다.

profile
개발계발하는 프론트엔드 개발자🍠

0개의 댓글