<TIL> 20. SOLID

YUJIN LEE·2023년 2월 22일
0

개발log

목록 보기
16/149

절차적 프로그래밍

물이 아래로 흐르는 것 처럼 프로그램의 순차적인 처리를 중요시함.
프로그램 전체가 유기적으로 연결 되도록 개발하는 것을 뜻함

  • 컴퓨터의 작업 처리 방식과 유사해 처리 속도가 빨라 시간적 유리
  • 프로그램의 기능을 중심으로 개발 진행

구조적 프로그래밍

'함수를 사용해서 개발'
함수를 사용하면 중복 코드를 한 곳에 모아서 관리할 수 있어 이해하기 쉬운 코드를 작성할 수 있다.

객체지향이란?

기존의 구조적 프로그래밍에서 가장 중요한 것은 함수.
소스코드를 논리적인 단위로 구분하고 분할해 개발하여 프로그래밍을 조금 더 편하게 만듬
이에 그치지 않고 개발자들은 더욱더 나아가 '우리가 주변 사물들을 인지하는 것 처럼 프로그래밍을 할 수 있지 않을까?'라고 생각하기 시작

  • 세상에 존재하는 것은 모두 사물 즉, 객체!
  • 각각의 사물은 고유함
  • 사물은 속성을 가짐
  • 사물은 행동을 함

사물을 덩어리로 한번에 크게 이해하기 보다는 분류하여 이해할 수 있도록 시도.
이를 class라는 표현 방법으로 만듬

책임과 권한을 가진 객체들이 서로 메세지를 주고받고 협력해 필요한 기능을 수행할 수 있도록 프로그램을 개발하는 것 -> 객체지향 개발

객체지향 개발은 복잡한 프로그램을 효과적으로 분해하고 구성할 수 있고,
쉽게 이해하며 효율적으로 다룰 수 있게 도와줌

객체지향의 4대 특성

캡슐화: 정보의 은닉

상속: 재사용

추상화: 모델링

다형성: 사용의 편의

캡슐화

객체 내부의 세부적인 사항을 감추는 것을 캡슐화라 부름

  • 변경하기 쉬운 객체를 만들기 위해 사용
  • 캡슐화 통해 객체 내부의 접근을 제한함으로써 객체와 객체 사이의 결합도를 낮출 수 있어 좀 더 유연한 객체 설계를 할 수 있다.

상속

상위 클래스의 특징을 하위 클래스가 물려받아 코드의 중복을 제거하고 코드 재사용성을 증가시킴

  • 각각의 클래스들을 상속 관계로 묶음으로써 클래스 간의 체계화된 구조를 파악하기 쉬워짐
  • 데이터와 메서드를 변경할 때 상위에 있는 것만 수정하여 전체적으로 일관성을 유지

추상화

객체에서 공통된 부분을 모아 상위 개념으로 새롭게 선언하는 것

  • 공통적이고 중요한 것을 모아 모델링
  • 복잡한 내부 구현에는 신경쓰지 않고 외부에 노출되어 있는 인터페이스만을 사용해 코드를 작성
  • 추상화 -> 추상 클래스 -> 인터페이스 순서로 모델링해 다형성으로 확장될 수 있도록 설계

다형성

객체가 연산을 수행할 때 하나의 행위에 대해 각 객체가 갖고 있는 고유한 특성에 따라 다른 여러가지 형태로 재구성

  • 동일한 메서드의 이름을 사용하지만, 클래스 마다 다르게 구현됨
  • 오버로딩, 오버라이딩

의존성?
객체들이 협력을 하는 과정에서 해당 객체들이 다른 객체를 의존하게 됨을 뜻함

  • 어떤 객체가 변경될 때 그 객체에 의존하고 있는 다른 객체도 함께 변경될 수 있음을 의미

결합도?
의존성의 정도를 나타냄. 다른 모듈에 대해 얼마나 높은 의존성을 가지고 있는지를 뜻함

  • 객체 사이의 의존성이 높은 경우를 가리켜 결합도가 높다 라고 표현.
  • 반대로 합리적인 수준으로 의존을 하는 경우, 결합도가 낮다 표현.
  • 결합도가 높으면 함께 변경될 확률도 높아 설계를 할 때는 객체 사이의 결합도를 합리적인 수준으로 낮춰 변경에 용이하게 설계하는게 좋다.

응집도?
모듈에 포함되어 있는 내부 요소들이 각각 연관되어 있는 관계의 정도를 뜻함

  • 밀접하게 연관된 작업만 수행, 연관성이 적은 다른 작업은 다른 객체에 위임하는 객체를 가리켜 응집도가 높다고 표현
  • 객체 스스로가 자신의 데이터를 직접 처리하면 할 수록 응집도를 높일 수 있다.

객체지향 설계의 5원칙

유지보수와 확장이 쉬운 프로그램을 만들기 위한 객체지향 설계의 다섯가지 기본원칙

  • SRP (Single Responsibility Principle) : 단일 책임 원칙
  • OCP (Open-Closed Principle) : 개방-폐쇄 원칙
  • LSP (Liskov Substitution Principle) : 리스코프 치환 원칙
  • ISP (Interface Segregation Principle) : 인터페이스 분리 원칙
  • DIP (Dependency Inversion Principle) : 의존성 역전 원칙
profile
인정받는 개발자가 되고싶습니다.

0개의 댓글