객체지향 프로그래밍과 SOLID 원칙

YOON SUNA·2023년 5월 30일
0

객체지향

목록 보기
1/2

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

객체의 관점에서 프로그래밍을 한다

기계의 부품을 조립하여 제품을 만들 듯이 객체를 만들어 소프트웨어를 개발할 때에 객체들을 조립하여 작성하는 프로그래밍

객체란 우리가 보고 느끼고 인지할 수 있는 모든 것을 의미한다

애플리케이션을 구성하는 요소들을 객체로 바라보고, 객체들을 유기적으로 결합하여 프로그래밍 하는 것

장점) 소프트웨어의 재사용 및 확장에 용이, 유지보수 쉬움, 사용자와 개발자가 쉽게 이해

면접질문

  • 객체란 무엇인가?
  • 장점이 왜 나오는것인가?

추상화


불필요한 세부 사항들은 제거하고 가장 본질적이고 공통적인 부분만을 추출하여 표현

추상 클래스(abstract class)와 인터페이스(interface)

상속


이미 정의된 상위 클래스의 모든 속성과 연산을 하위 클래스가 물려받는 것

기존의 클래스를 재활용하여 새로운 클래스를 작성하는 문법 요소

하위클래스들이 상위 클래스의 속성과 기능들을 간편하게 사용할 수 있음

이는 클래스들 간 공유하는 속성과 기능들을 반복적으로 정의할 필요 없이 딱 한번만 정의해두어, 소프트웨어의 재사용을 높이는 중요한 개념으로 코드의 중복을 없애기 위함이다.

다형성


어떤 객체의 속성이나 기능이 상황에 따라 여러가지 형태를 가질 수 있는 성질

동일한 메소드명이지만 다른 기능을 하는 것

맥락에 따라 다른 역할을 수행할 수 있는 객체 지향의 특성을 의미한다.

  • 오버라이딩 : 부모 클래스에서 만들어진 메서드를 자식 클래스에서 다시 재정의하여 사용

  • 오버로딩 : 같은 이름의 메서드를 사용하지만 메서드마다 다른 용도로 사용되며 결과물도 다름

캡슐화


클래스 안에 서로 연관 있는 속성과 기능들을 하나의 캡슐로 만들어 데이터를 외부로부터 보호하는 것

외부로부터 클래스에 정의된 속성과 기능들을 보호하고, 필요한 부분만 외부로 노출되어 각 객체 고유의 독립성과 책임 영역을 안전하게 지키고자 하는 목적이 있다.

인터페이스를 제외한 세부 내용이 은폐(정보은닉)되어 외부에서의 접근이 제한적

자바에서 public, default, protected, private 접근 제어자를 통해 접근을 제한한다.

SOLID 원칙

객체지향 설계에서 지켜야 할 5개의 소프트웨어 개발 원칙

SRP(Single Responsibility Principle)

OCP(Open Closed Principle)

LSP(Listov Substitution Principle)

ISP(Interface Segregation Principle)

DIP(Dependency Inversion Principle)

객체지향 프로그래밍의 특징을 재정립한 것으로 SOLID 원칙을 적용하면 코드를 확장하고 유지 보수 관리가 쉬워지며 복잡성을 제거해 개발의 생산성을 높일 수 있다.

단일 책임 원칙(SRP)


객체는 단 하나의 책임만 가져야 하는 원칙

책임이라는 의미는 하나의 기능 담당. 즉, 하나의 클래스는 하나의 기능 담당하여 하나의 책임을 수행하는데 집중해야한다.

한 책임의 변경으로부터 다른 책임의 변경으로의 연쇄작용을 극복할 수 있으므로, 프로그램의 유지보수를 높이기 위한 설계 기법

면접질문

  • SRP와 가장 연관된 객체지향 특징은 무엇인가?
  • 단 하나의 책임이 도대체 무엇인가?

개방 폐쇄 원칙(OCP)


확장에 열려있어야 하며, 변경에는 닫혀있어야 한다

기존의 코드를 변경하지 않고 기능을 추가할 수 있도록 설계해야 한다는 방식

확장에 열려있다는 의미는 새로운 변경사항에 대해 유연하게 코드를 추가하면서 확장이 가능하도록 하는 것이고, 변경에 닫혀있다는 의미는 새로운 변경사항에 대해 직접적인 수정을 제한한다는 의미

추상화 사용을 통한 관계 구축을 권장한다는 의미

다형성과 확장을 가능케 하는 객체지향의 장점을 극대화하는 기본적인 설계 원칙

리스코프 치환 원칙(LSP)


자식 클래스는 최소한 자신의 부모 클래스의 가능한 행위는 수행할 수 있어야 한다

자식 클래스는 부모 클래스의 책임을 무시하거나 재정의하지 않고 확장만 수행하도록 해야함

상속된 상태에서 부모 클래스의 메서드를 사용해도 동작의 의도대로 흘러가야 함을 의미

다형성의 특징을 이용하기 위한 원칙

인터페이스 분리 원칙(ISP)


자신이 사용하지 않는 인터페이스와 의존 관계를 맺거나 영향을 받지 않아야 한다.

인터페이스를 각각 사용에 맞게 끔 잘게 분리해야 한다는 설계 원칙

인터페이스의 단일 책임을 강조

클라이언트의 목적과 용도에 적합한 인터페이스만을 제공하는 것이 목표

면접 질문

  • ISP와 SRP의 차이점은?

의존 역전 원칙(DIP)


객체들 간에 의존 관계가 성립될 때, 추상적인 것에 의존하는 원칙

의존해야 할 상황이 생긴다면, 클래스를 직접 참조하는 것이 아니라 대상의 상위 요소로 참조해야 한다는 원칙

인터페이스, 추상클래스의 개념이 더 안정적이기 때문, 안정적이라는 의미는 변화가 없는것

각 클래스 간의 결합도를 낮춘다.

2개의 댓글

comment-user-thumbnail
2023년 5월 31일

*** 비모소프트 면접 질문

  • 객체란 정확히 무엇인가?
  • SRP와 가장 연관이 깊은 객체지향 특징은 무엇인가?
    -> 추상화
  • 단일 책임이 정확하게 무엇인가?
    -> 추상클래스의 한 덩어리
  • ISP와 SRP의 차이점?
답글 달기
comment-user-thumbnail
2023년 6월 7일

운영체제 32bit와 64bit가 의미하는 것은?

답글 달기