[TIL] 객체 지향 프로그래밍이란..^^

Leesu·2023년 2월 26일
0

[TIL] : Today I Learned

목록 보기
12/21

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

프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고, 그 객체들간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법이다.

즉, 문제를 여러 개의 객체 단위로 나눠 작업하는 방식이다.

🟡 장점? 단점?

- 장점

  1. 코드 재사용이 용이하다.
  • 남이 만든 클래스를 가져와 사용할 수 있고 상속을 통해 확장이 가능하다.
  1. 유지보수가 쉽다.
  • 객체지향 프로그래밍에서는 수정해야할 부분이 클래스 내부에 멤버 혹은 변수, 메서드로 존재하기 때문에 해당 부분만 수정하면 된다.
  1. 대형 프로젝트에 적합하다
  • 클래스 단위로 모듈화시켜 개발할 수 있어 여러명, 여러 회사에서 프로젝트를 개발할 때 업무 분담이 쉽다.

- 단점

  1. 처리속도가 상대적으로 느리다.
  2. 객체가 많으면 용량이 커질 수 있다.
  3. 설계 시 시간과 노력이 필요하다.

🟡 OOP 의 키워드 5가지

  • 클래스 + 인스턴스 객체
  • 추상화
  • 캡슐화
  • 상속
  • 다형성

- 클래스 + 인스턴스(객체)

  • 클래스
    • 어떤 문제를 해결하기 위한 데이터를 만들기 위해 추상화를 거쳐 집단에 속하는 속성과 행위를 변수와 메서드로 정의한 것
  • 인스턴스(객체)
    • 클래스에서 정의한 것을 토대로 실제 메모리에 할당된 것, 실제 사용되는 데이터

- 추상화

  • 객체에서 공통된 속성과 행위를 추출하는것, 타입을 정의하는 과정

- 캡슐화

  • 데이터 구조와 데이터를 다루는 방법들을 결합시켜 묶는 것(변수와 함수를 하나로 묶는 것)
  • 따라 코드를 재수정 없이 재활용이 가능하고, 접근 제어자를 통한 정보 은닉이 가능하다.

- 상속

  • 부모클래스의 속성과 기능을 그대로 이어받아 사용할 수 있게하고 기능의 일부분을 변경해야할 경우 상속받은 자식클래스에서 해당 기능만 다시 수정하여 사용할 수 있게 하는 것
  • 다중 상속은 불가하다.

- 다형성

  • 하나의 변수명, 함수명 등이 상황에 따라 다른 의미로 해석될 수 있는 것
  • 오버라이딩, 오버로딩이 가능하다는 이야기.
    • 오버라이딩
      • 상위 클래스가 가지고 있는 메소드를 하위 클래스가 재정의해서 사용하는 것
    • 오버로딩
      • 같은 이름의 메서드가 인자의 개수나 자료형에 따라 다른 기능을 하는 것

🟡 getter, setter

  • 이 둘은 접근자 프로퍼티 라고 불린다.
  • 접근자 프로퍼티란, 프로퍼티를 읽거나 쓸 때 호출하는 함수를 값 대신에 지정할 수 있는 프로퍼티이다.
  • 접근자 프로퍼티의 본질은 함수인데, 이 함수는 값을 획득(get) 하고 설정(set)하는 역활을 담당한다.

접근자란 객체 지향 프로그래밍에서 객체가 가진 프로퍼티 값을 객체 바깥에서 읽거나 쓸 수 있도록 제공하는 메서드를 말합니다.

  • getter 는 속성의 값을 읽을 때 호출되는 함수이고,

  • setter 는 속성 값을 변경할 때 호출되는 함수이다.

  • 아래는 예시이다.

class MyClass {
  constructor() {
    this._myProperty = 0;
  }

  get myProperty() {
    return this._myProperty;
  }

  set myProperty(value) {
    this._myProperty = value;
  }
}

const myObj = new MyClass();
myObj.myProperty = 1; // Setter 호출
console.log(myObj.myProperty); // Getter 호출
  • 위의 예제에서, MyClass 라는 클래스에 myProperty 라는 속성을 정의하고 gettersetter 를 구현하였다.
  • 이렇게 구현된 myProperty 속성은 클래스 내부에서는 _myProperty 이름으로 사용된다.
  • 따라서 클래스의 사용자는 _myProperty 에 직접 접근할 수 없으며 반드시 gettersetter 를 사용하여 값을 가져오거나 변경해야한다.

- 사용하는 이유

  • getter, setter 를 사용하면 메서드를 통해서 접근하기 때문에,
    보다 세밀하게 제어할 수 있기 때문이다.
  • 예를들어 객체의 속성 중에서 외부에서 직접 변경하면 안되는 값이 있다면, setter 를 통해 그 값을 제어하여 외부에서 값을 변경할 때 오류를 방지할 수 있다.
  • 또, getter 를 사용하여 객체의 속성 값을 반환하기 전에 필요한 추가 처리를 할 수 있다.

🟡 객체 지향 설계 원칙 SOLID

1. 단일 책임 원칙

  • 하나의 클래스는 단 하나의 책임만 가져야 한다.
  • 지키지 않을 경우 한 책임의 변경에 의해 다른 책임과 관련된 코드에 영향이 갈 수 있다.

2. 개방-폐쇄 원칙

  • 기능을 변경하거나 확장할 수 있으면서 기능을 사용하는 코드는 수정하지 않는다.

3. 리스코프 치환 원칙

  • 상위 타입의 객체를 하위 타입의 객체로 치환해도, 상위 타입을 사용하는 프로그램은 정상적으로 동작해야한다.

4. 인터페이스 분리 원칙

  • 하나보다 여러개의 인터페이스로 구성하는 것이 좋다.
  • 분리함으로써 각 클라이언트가 사용하지 않는 인터페이스에 변경이 있어도 영향을 받지 않도록 만들어야 한다.

5. 의존관계 역전 원칙

  • 추상화에 의존해야한다. 구체화에 의존하면 안된다.
  • 고수준 모듈은 저수준 모듈의 구현에 의존하면 안되고, 저수준 모듈은 고수준 모듈에서 정의한 추상화 타입에 의존해야한다.

참고자료_1
참고자료_2

profile
기억력 안 좋은 FE 개발자의 메모장

0개의 댓글