[OOP]그래서 객체 지향 프로그래밍이 뭔데?

젬마·2022년 9월 21일
0

codestates

목록 보기
5/18

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

  • 절차 지향 프로그래밍(Procedural Programming,PP)의 반대 개념. PP가 모든 변수와 함수의 순차적 이동에 불과했다면, OOP가 고안되며 데이터와 기능이 별개로 취급되지 않고, 한 번에 묶여서 처리할 수 있게 됨
  • 자바스크립트는 엄밀히 말해 객체 지향 언어는 아니지만, 객체 지향 패턴으로 작성할 수 있음.
  • OOP의 모든 것은 "객체"로 그룹화됨
  • 객체 내에는 "데이터와 기능이 함께 있다"라는 원칙에 따라 메서드와 속성이 존재함

OOP의 4가지 중심 개념

캡슐화(Encapsulation), 상속(Inheritance), 추상화(Abstraction), 다형성(Polymorphism)

캡슐화

  • 데이터와 기능을 하나의 객체로 묶는 것
  • 느슨한 결합(Loose coupling)에 유리
    • 느슨한 결합이란: 코드 실행 순서에 따라 절차적으로 코드를 작성하는 것이 아니라, 코드가 상징하는 실제 모습과 닮게 코드를 모아 결합하는 것.
    • 마우스의 상태를 속성(property)으로 정하고 클릭, 이동을 메서드(method)로 정해서 코드만 보고도 인스턴스 객체의 기능을 상상할 수 있게 작성
  • 은닉(hiding): 구현은 숨기고, 동작은 노출시킴
    • 은닉이란: 내부 데이터나 내부 구현이 외부로 노출되지 않도록 만드는 것
    • 은닉화의 특징을 살려서 코드를 작성하면 객체 내 메서드의 구현만 수정하고, 노출된 메서드를 사용하는 코드 흐름은 바뀌지 않도록 만들 수 있다.

추상화

  • 내부 구현은 복잡할지라도, 실제로 노출되는 인터페이스(interface)는 단순하게 만드는 것.
    • ex) 컴퓨터의 내부 구조는 아주 복잡하지만, 우리에게 보이는 부분 (화면, 마우스, 키보드)는 단순하게 되어있음
    • 캡슐화가 코드나 데이터의 은닉에 포커스가 맞춰져있다면, 추상화는 클래스를 사용하는 사람이 필요하지 않은 메서드 등을 노출시키지 않고, 단순한 이름으로 정의하는 것에 포커스가 맞춰져 있음

상속

  • 부모 클래스의 특징을 자식 클래스가 물려받는 것
    • 사람(Human)이라는 클래스가 있고, 추가로 학생(Student)라는 클래스를 작성한다고 할 때 앞서 구현되었던 Human 클래스에 있는 속성과 메서드를 전부 다시 구현한다면 너무 번거로울 것임. 따라서 Student 클래스를 작성할 때 Human 클래스를 상속하게 하면(재사용성) 효율적으로 코드를 작성할 수 있음

다형화

  • 같은 메소드라도 객체에 따라 각기 다른 방식으로 구현될 수 있음
  • 다형성으로 인해 동일한 메서드에 대해 if/else if와 같은 조건문 대신 객체의 특성에 맞게 달리 작성하는 것이 가능해짐.
profile
취준생은 프론트엔드의 꿈을 꾸는가

0개의 댓글