본문 바로가기
면접,CS

[면접,CS] 객체지향 프로그래밍, SOLID 원칙

by Cafe Mocha 2023. 1. 5.

객체지향

용어

  • 클래스 class
    • 객체를 만들기 위한 설계도
  • 객체 object
    • class 라는 틀에서 생겨난 실체(instance)
    • 실제 메모리에 할당된 물리적 실체
  • 인스턴스 instance
    • class 를 바탕으로 실체화된 객체

객체 지향 프로그래밍 특징

  • 추상화(abstraction)
    • cat, dog와 같은 class를 class pet()으로 비슷한 개념을 묶어서 정의하는 것
    • 공통 속성과 행위를 추출하는 것
  • 캡슐화(encapsulation)
    • 객체, 즉 클래스의 내부 변수와 메소드를 하나로 패키징 하는 특징
  • 상속성(inheritance)
    • 자식 클래스가 부모 클래스의 특성과 기능을 물려받는 것
  • 다형성(polymorphism)
    • 같은 메서드를 자식에서 재정의 하는것
    • say hi()라는 메서드를 한국인과 이탈리아인이 다른 응답을 하도록 재정의
    https://ko.javascript.info/private-protected-properties-methods
  • https://yozm.wishket.com/magazine/detail/1396/

 

SOLID 원칙

객체 지향 프로그래밍을 설계할 때는 SOLID 원칙을 지켜야한다.

  • S 단일 책임 원칙
    • 단일 책임 원칙은 모든 클래스는 각각 하나의 책임만 가져야 하는 원칙
  • O 개방-폐쇄 원칙
    • 유지 보수 사항이 생긴다면 코드를 쉽게 확장할 수 있고 수정할때는 닫혀 있어야 하는 원칙
    • 기존 코드는 잘 변경하지 않으면서 확장은 쉬워야 한다
  • L 리스코프 치환 원칙
    • 프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 하는 것
  • I 인터페이스 분리 원칙
    • 하나의 일반적인 인터페이스보다 구체적인 여러 개의 인터페이스를 만들어야 하는 원칙
  • D 의존성 역전 원칙
    • 자신보다 변하기 쉬운 것에 의존하던 것을 추상화된 인터페이스나 상위 클래스를 두어 변하기 쉬운 것의 변화에 영향받지 않도록 하는 원칙

 

enum

  • 자바스크립트에서 enum
    • enum : 상수값 중 비슷한 종류를 묶어두기 위한 용도
    • enum의 장점
      • 코드가 단순해지고, 가독성이 좋다.
      • enum이란 이름 자체만으로도, 열거 의도를 분명히 알 수 있다.
      • 하나의 변수에 대해서 고정값으로 이용이 가능
      • 안정적이며, 읽기 쉽고 오류의 발생도 줄일 수 있다.
    //javascript에서는 객체로 선언해서 enum을 사용할 수 있다.
    const Season = {
    	SPRING : "spring",
    	SUMMER : "summer",
    	AUTUMN : "autumn",
    	WINTER : "winter"
    }
    
    • 다만, 위와 같이 설정하면 외부에서 값을 변경할 수 있다.
    • Object.freeze
      • Object.freeze() 메서드를 사용하면 객체의 값을 변경하지 못하게 할 수 있다.
    //javascript에서는 객체로 선언해서 enum을 사용할 수 있다.
    const Season = {
    	SPRING : "spring",
    	SUMMER : "summer",
    	AUTUMN : "autumn",
    	WINTER : "winter"
    };
    Object.freeze(Season);
    
    //선언값 참조
    1. 객체.프로퍼티
    if(true){
    	console.log(Season.SPRING);
    }
    
    2. 구조분해할당
    if(true){
    	const {SPRING} = Season;
    	console.log(SPRING);
    }
    

 

'면접,CS' 카테고리의 다른 글

[면접,CS] 함수형 프로그래밍  (0) 2023.01.05
[면접,CS] 아키텍처 패턴  (0) 2023.01.05
[면접,CS] 의존성주입(DI)  (0) 2023.01.05
[면접,CS] 디자인패턴  (0) 2023.01.04
[면접,CS]라이브러리, 프레임워크  (0) 2023.01.04