객체 지향

사실 여태 온전한 객체 지향으로 코딩해본 적이 없다. 그렇다고 함수형 프로그래밍을 좋아하는 것도 아니다. 다루기 쉽고 어렵지 않았기 때문에 항상 절차 지향적인 프로그래밍을 해왔다. 면접에서 객체 지향에 대해 물어봤을 때 나는 아무 말도 할 수가 없었다. 조금 더 공부해 보자.

이 글과 하위 글들은 [객체 지향 프로그래밍 입문]에 관한 내용입니다.

최범균님의 인프런의 강의를 보며 정리한 내용으로 문제가 될시 삭제하겠습니다.

강의 링크도 첨부해 둡니다.

https://www.inflearn.com/course/%EA%B0%9D%EC%B2%B4-%EC%A7%80%ED%96%A5-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%EC%9E%85%EB%AC%B8/dashboard

객체란,

객체의 핵심은 기능을 제공하는 것이다. 따라서 _객체는 제공하는 기능으로 정의_하며 내부적으로 가진 필드 (데이터)로 정의하지 않는다.

예를 들어 [회원 객체]라면 '암호 변경하기 기능', '차단 여부 확인 하기 기능' 로 정의할 수 있고, [소리 제어기]라면 '소리 크기 증가하기 기능', '소리 크기 감소하기 기능'으로 정의할 수 있다.

기능 명세

  • 메서드(오퍼레이션)를 이용해서 기능 명세

  • 이름, 파라미터, 결과로 구성

class VolumeController {
  increase(inc: number): void {
    // ...
  }
  decrease(dec: number): void {
    // ...
  }
  volume(): number {
    // ...
  }
}

객체와 객체

  • 객체와 객체는 기능을 사용해서 연결한다.

  • 기능 사용 = 메서드 호출

const volCont = new VolumeController();

volCont.increase(4);
volCont.decrease(3);
const currentVol = volCont.volume()

용어: 메시지

객체 지향에서만 사용되는 용어는 아니며, 객체와 객체 상호 작용을 '메시지를 주고 받는다'고 표현한다.

ex) 메서드를 호출하는 메시지, 리턴하는 메시지, 익셉션 메시지

Q) Member 혹시 객체일까?

class Member {
  private name: string;
  private id: string;

  setName(name: string): void {
    this.name = name;
  }

  getName(): string {
    return this.name;
  }

  setId(id: string): void {
    this.id = id;
  }

  getId(): string {
    return this.id;
  }
}

A) 실질적으로 이 코드는 nameid를 직접 접근하는 것과 차이가 없다. 실질적으로는 기능이 없고 데이터에 더 가깝다. 데이터 클래스라고도 한다.

여기서 기능이 더 붙게된다면 그 때부터 객체라고 부를 수 있을거 같다.

Last updated