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

hyewon jeong·2023년 3월 27일
0

CS

목록 보기
3/22

1. 객체지향 프로그래밍(OOP)에 대해 설명해주세요. 알고있는 원칙이나 키워드를 언급해주세요

객체지향이란 ?

현실세계를 객체로 모델링하여 소프트웨어를 개발하는 방법론으로서
객체는 속성과 행위로 구성되어 있고, 객체간의 상호작용을 통해 프로그램을 실행시킵니다.
이러한 객체를 중심으로 프로그램을 설계하고 구현하는 것이 객체 지향 프로그래밍입니다.

객체지향의 주요 특징 4가지 ?

객체지향의 주요 개념으로는 캡슐화(Encapsulation), 상속(Inheritance), 다형성(Polymorphism)이 있습니다.

  1. 추상화
    구체적인 사물들의 공통적인 특징을 파악해서 이를 하나의 개념(집합)으로 다루는 것

  2. 캡슐화(Encapsulation)
    객체의 속성과 행위를 하나로 묶어, 객체의 내부 구현을 외부에 감추고, 외부에서는 객체에 접근하기 위해 정의된 인터페이스만을 사용할 수 있도록 하는 것을 의미합니다. 이를 통해 코드의 재사용성과 유지보수성을 높일 수 있습니다.

  3. 상속(Inheritance)

  • 이미 존재하는 클래스를 기반으로 새로운 클래스를 만들 수 있는 기능입니다. 상위 클래스의 특징을 하위 클래스에서 재사용할 수 있으며, 코드의 중복을 줄일 수 있습니다.
  1. 다형성(Polymorphism)
  • 하나의 메서드나 클래스가 다양한 형태로 동작할 수 있는 능력을 의미합니다. 이를 통해 유연하고 확장성 있는 코드를 작성할 수 있습니다.
    오버라이딩(Overriding), 오버로딩(Overloading)

객체지향 프로그래밍은 소프트웨어 개발에서 유지보수성, 확장성, 재사용성 등의 이점을 제공합니다. 객체지향 개발 방법론을 적용하여 코드를 작성하면, 코드의 가독성이 높아지며, 모듈화가 용이해지고 유지보수가 쉬워집니다. 또한 객체지향의 장점 중 하나인 다형성을 활용하여 코드의 재사용성을 높일 수 있습니다.

SOLID 좋은 객체 지향 설계의 5가지 원칙

클린코드로 유명한 로버트 마틴이 좋은 객체 지향 설계의 5가지 원칙을 정리

SRP: 단일 책임 원칙(single responsibility principle)
OCP: 개방-폐쇄 원칙 (Open/closed principle)
LSP: 리스코프 치환 원칙 (Liskov substitution principle)
ISP: 인터페이스 분리 원칙 (Interface segregation principle)
DIP: 의존관계 역전 원칙 (Dependency inversion principle)

SRP 단일 책임 원칙

Single responsibility principle

한 클래스는 하나의 책임만 가져야 합니다.
책임이라는 건클 수 있고, 작을 수 있습니다.문맥과 상황에 따라 다를 수 있기 때문에
🎀 중요한 기준은 변경입니다. 변경이 있을 때 파급 효과가 적으면 단일 책임 원칙을 잘 적용했다고 말할 수 있습니다.

OCP 개방-폐쇄 원칙

Open/closed principle

확장에 대해서는 개방적이고, 수정에 대해서는 폐쇄적이어야 한다는 것으로 기존의 코드를 변경하지 않으면서 기능을 추가 할 수 있도록 설계되어야 한다는 것을 의미합니다.

LSP 리스코프 치환 원칙

Liskov substitution principle
자식 클래스는 최소한 자신의 부모 클래스에서 가능한 행위는 수행할 수 있어야 한다.

예) 자동차 인터페이스의 엑셀은 앞으로 가라는 기능, 뒤로 가게 구현하면 LSP 위반, 느리 더라도 앞으로 가야함

DIP 의존관계 역전 원칙

Dependency inversion principle

프로그래머는 “추상화에 의존해야지, 구체화에 의존하면 안된다.” 것으로 변화하기 쉬운 것에 의존하지 말라는 원칙입니다.
쉽게 이야기해서 구현 클래스에 의존하지 말고, 인터페이스에 의존하라는 뜻으로
역할(Role)에 의존하게 해야 한다는 것과 같습니다.

ISP 인터페이스 분리 원칙

Interface segregation principle

인터페이스를 클라이언트에 특화되도록 분리시키라는 설계 원칙으로
특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다라는 것을 의미 합니다.
예를 들어
자동차 인터페이스를 -> 운전 인터페이스, 정비 인터페이스로 분리하면
사용자 클라이언트를 -> 운전자 클라이언트, 정비사 클라이언트로 분리를 할 수 있습니다.
분리하면 정비 인터페이스 자체가 변해도 운전자 클라이언트에 영향을 주지 않고
자동차 인터페이스 -> 운전 인터페이스, 정비 인터페이스로 분리하면
사용자 클라이언트 -> 운전자 클라이언트, 정비사 클라이언트로 분리됩니다.
분리하면 정비 인터페이스 자체가 변해도 운전자 클라이언트에 영향을 주지 않고, 인터페이스가 명확해지고, 대체 가능성이 높아집니다.

참고
김영한 강의 스프링기본
https://aws.amazon.com/ko/what-is/api/

profile
개발자꿈나무

0개의 댓글