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

FAST FOX·2023년 3월 15일
0

학습일지

목록 보기
20/39
post-thumbnail
post-custom-banner

객체 지향 프로그래밍이란??

객체 지향 프로그래밍이라는 패러다임이 등장하기 전에는 절차 지향 프로그래밍이 있었다. 기껏해야 함수를 이용해 다음 절차로 넘어가는게 전부였다는 말이다.

절차 지향적인 ATM 작동방식

1.카드를 입력하라는 메세지 출력 => 2.카드 삽입 => 3.사용자의 비밀번호를 확인 
=> 4. true라면 5번으로 이동 / false라면 카드 반환 후 1번으로 이동 
=> 5. 출금 금액 입력 ...

하지만 객체 지향 프로그래밍(OOP)이 나타나면서 단순히 별개의 변수와 함수로 순차적인 작동을 하는 것을 넘어, 데이터의 접근과 데이터의 처리 과정에 대한 모형을 만들어 내는 방식을 고안했냈다.

따라서, 데이터와 기능이 별개로 취급되지 않고 하나의 객체로 묶여서 처리할 수 있게 되었다.
ex) Java, C++, C# 등

📌 JS는 엄밀히 말하면 객체 지향 언어는 아니지만, 객체 지향 패턴으로 작성할 수 있다.

객체 지향 프로그래밍의 주요 개념

1. 캡슐화 (Encapsulation)

데이터(속성)와 기능(메소드)을 하나의 객체 안에 넣어서 느슨하게 결합하는 것을 말한다.

느슨하게 결합한다는 것은 실행 순서에 따라 절차적으로 코드를 작성하는 것이 아니라, 코드가 상징하는 실제 모습과 닮게 코드를 모아 결합하는 것을 의미한다.
이렇게 느슨하게 결합을 해둔다면 코드를 수정할 때 큰 흐름을 바꾸지 않기 때문에 수정이 좀 더 수월해진다.

캡슐화의 또다른 특징은 은닉화이다. 은닉화는 내부 데이터와 구현이 외부로 노출되지 않고, 객체 외부에서 필요한 메서드만 노출시키는 것을 의미한다.

위와 같은 특징들 덕분에 객체 내 메서드의 구현만 수정하고 메서드를 사용하는 코드 흐름에는 영향을 주지않을 수 있다.

  • 데이터와 기능을 하나의 단위로 묶는것
  • 은닉 : 구현은 숨기고, 동작은 노출시킴
  • 느슨한 결합에 유리 : 언제든 구현을 수정할 수 있음

2. 추상화(Abstraction)

추상화란 실제로는 복잡한 것을 단순하게 만드는 것을 의미한다.
객체 지향 프로그래밍에서도 데이터나 기능이 구현되는 방식은 복잡할지라도 우리가 사용할 때에는 간단하게 메서드를 호출해서 사용하면 된다.

캡슐화와 헷갈리지 말아야 하는 것은 캡슐화가 코드나 데이터의 은닉에 포커스가 맞춰져있다면, 추상화는 클래스를 사용하는 사람이 필요로하지 않는 메서드는 가리고, 단순한 이름으로 정의하는 것에 포커스가 맞춰져 있는 것이다.

3. 상속(Inheritance)

상속의 특성은 부모 클래스(base class)의 특징을 자식 클래스 (dervied class)가 물려받는다는 것이다.

다음의 그림을 보면 쉽게 이해할 수 있다.
Student라는 class는 Human class의 속성과 메소드를 물려받고 추가적인 속성과 메소드를 가지게된다.

4. 다형성(Polymorphism)

다형성이란 '형태가 다양하다'의 뜻을 가지고 있는데 여기서는 같은 메소드라도 다른 방식으로 구현될 수 있음을 나타낸다.

profile
준비하는 개발자
post-custom-banner

0개의 댓글