객체 지향 프로그래밍이란 무엇인가

권세진·2021년 6월 17일
2

프론트엔드 지식

목록 보기
2/3
post-thumbnail

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

프로그램을 단순히 코드의 나열로만 봤던 시각을 벗어나
프로그램을 객체 라는 기본 단위로 나누고 객체들 간의 상호 작용으로 문제를 해결하는 방식

독립성이 높은 객체들을 작은 단위부터 만들고, 그 작은 단위들을 재사용해가며 더 큰 객체들을 만드는 방식으로, 상향식(Bottom-up) 방식이라고 할 수 있다.
(Top-down 방식은 객체 지향 이전의 구조적 프로그래밍 방식이라고 볼 수 있다.)

👀 객체 지향 프로그래밍의 구성 요소

클래스

같은 종류의 문제 해결을 위한 속성과 기능을 정의한 것.
외부 요소와 독립적이고 추상적으로 만들어져야 한다.
객체 지향 프로그래밍에서의 기본적인 설계도라고 할 수 있다.

객체

클래스라는 설계도를 통해 만들어진 실체라고 할 수 있다.
객체는 자신 고유의 속성을 가지며 클래스로부터 만들어진 기능을 사용할 수 있다.

메서드, 메시지

클래스 내부에 정의된 함수를 메서드라고 한다.
개발자는 클래스를 통해 객체를 생성하고 객체의 외부로 공개된 메서드를 통해 해당 객체에 명령을 내릴 수 있는데 이렇게 메서드를 사용하는 행위를 메시지를 보낸다고도 할 수 있다.

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

1. 캡슐화

특정 모듈의 세부 구현을 감추고 외부로의 노출을 최소화하여
모듈의 응집도를 높이고 모듈 간의 의존도를 떨어뜨려
재사용할 수 있는 모듈으로 만드는 것.
정보은닉과 추상화의 개념이 녹아있다고 생각하면 된다.

✨ 추상화 : 상세한 구현은 드러내지 않고 중요한 개념만 외부로 드러내는 것.

✨ 응집도 : 모듈의 요소들이 같이 속하는 정도를 의미한다.
클래스의 목적을 나타낸 속성과 기능이 얼마나 서로 강하게 관계되어 있는지 측정하는 요소이다.

2. 상속

자식 클래스가 부모 클래스의 기능을 그대로 물려받는 것을 의미.
자식 클래스는 부모 클래스의 기능을 물려받으며
새로운 기능을 추가하거나
기존에 부모 클래스가 가진 기능을 일부 수정하는 등(오버라이딩)
캡슐화를 유지하면서 개념을 확장시킬 수 있다.

3. 다형성

클래스 상속 구조 내, 같은 이름의 메소드를 사용하더라도 맥락에 따라 다른 기능을 수행하는 것을 의미한다.

예를 들어 단형성(다형성의 반대) 체계를 가진 프로그래밍 언어에서는
다음과 같이 구현할 수 있다.

//숫자를 문자열로 바꾸는 경우
string = StringFromNumber(number);

//날짜를 문자열로 바꾸는 경우
string = StringFromDate(date);

하지만 다형성 체계를 가진 프로그래밍 언어에서는 똑같은 메소드 이름으로 구현할 수 있다.

//숫자를 문자열로 바꾸는 경우
string = number.StringValue();

//날짜를 문자열로 바꾸는 경우
string = date.StringValue();

이렇듯 객체의 타입과 상관없이 외부에서 객체의 메소드를 사용함에 있어 추상도가 높은 형식으로 구현할 수 있다.

자바스크립트에서는 오버라이딩만 구현되어있고 오버 로딩은 불가하나 타입스크립트로 오버 로딩을 구현할 수 있어 이를 보완할 수 있다.

profile
상상을 현실로 꺼내길 좋아하는 프론트엔드 개발자입니다.

0개의 댓글