상세 컨텐츠

본문 제목

자바강의 - [7주차] 객체지향

Programming/Java

by leediz 2022. 3. 7. 20:59

본문

자바강의 - [7주차] 객체지향


객체지향의 등장

  • 1970년대 들어 용어가 나왔으며 50년이 넘는 역사를 가지고 있음
  • 객체 지향 이전에는 C언어 처럼 실행하고자 하는 순서대로 명령어를 입력해서 실행되는 “절차 지향”이 주를 이뤘으며 이를 “절차지향 언어"라고 함
  • 현대에 와서 프로그램의 복잡도가 증가하며 유지보수, 개발기간 등 다양한 부분에서 비효율이 발생하기시작
  • 이런 어려움을 해결하기 위해 기존 절차지향 개발 방식에서 벗어나 “추상화, 상속, 은닉, 재사용, 인터페이스 등"의 특성을 가진 객체지향으로 개발을 시작함
  • 객체지향이란 현실에 존재하는 사물을 있는 그대로 모델링하여, 이들의 행위와 속성을 정의하고 절차적이 아닌 객체가 중심이 되어 실제 사물이 동작하는 방식으로 설계하는 방법

객체지향의 4대 특성

캡슐화

  • 객체의 속성을 보호하기 위해서 사용
  • 객체지향의 패러다임 중 하나인 추상화를 제공
  • 재사용성 향상
  • 유지보수의 효율성이 향상됨

상속

  • 객체지향에서의 상속은 속성의 상속이 아닌 하위로 내려갈 수록 구체화 되는 것

  • 프로그램 구조에 대한 이해도 향상 - 최상위 클래스의 구조를 보고, 하위 클래스의 동작을 이해할 수 있음
  • 재사용성 향상
  • 확장성 향상
  • 유지보수성 향상

다형성

  • 하나의 개체가 여러 개의 형태로 변화하는 것
  • 오버라이딩을 통해서 구현 가능

추상화

  • 객체지향에서의 추상화는 모델링
  • 구체적으로는 공통적인 부분, 특정 특성을 분리해서 재조합 하는 부분이 추상화
  • 다형성, 상속 모두 추상화에 속함

객체지향 설계 5원칙 SOLID

응집도와 결합도

  • 좋은 소프트웨어 설계를 위해서는 결합도(coupling)을 낮추고 응집도(cohesion)는 높여야 함
  • High Cohesion Loose Coupling
  • 결합도
    • 모듈(클래스)간의 상호 의존 정도를 나타내는 지표
    • 결합도가 낮으면 모듈간의 상호 의존성이 줄어들어서 객체의 재사용 및 유지보수가 유리
  • 응집도
    • 하나의 모듈 내부에 존재하는 구성 요소들의 기능적 관련성
    • 응집도가 높은 모듈은 하나의 책임에 집중하고 독립성이 높아져, 재사용 및 유지보수가 용이

SRP(Single Responsibility Principle) - 단일 책임 원칙

  • 어떠한 클래스를 변경해야 하는 이유는 한가지 뿐이어야 함

OCP(Open Closed Principle) - 개방 폐쇄 원칙

  • 자신의 확장에는 열려 있고, 주변의 변화에 대해서는 닫혀 있어야 함
  • 상위 클래스 또는 인터페이스를 중간에 둠으로써, 자신은 변화에 대해 폐쇄적이지만, 인터페이스는 외부의 변화에 대해 확장을 개방해 둘 수 있음
  • JDBC와 Mybatis, Hibernate 등의 예시가 있음

LSP(Liskov Substitution Principle) - 리스코프 치환 원칙

  • 서브 타입은 언제나 자신의 기반(상위) 타입으로 교체할 수 있어야 함

ISP(Interface Segregation Principle) - 인터페이스 분리 원칙

  • 클라이언트는 자신이 사용하지 않는 메서드에 의존 관계를 맺으면 안됨
  • 프로젝트 요구 사항과 설계에 따라서 SRP(단일책임원칙) / ISP(인터페이스분리원칙)를 선택

DIP(Dependency Inversion Principle) - 의존 역전 원칙

  • 자신보다 변하기 쉬운 것에 의존하지 말아야 함

POJO JAVA

  • POJO(Plain Old Java Object) 의 약자
  • 순수한 자바 오브젝트
  • 특정 규약에 종속되지 않음
    • 특정 Library, Module에서 정의된 클래스를 상속받아서 구현하지 않아도 됨
    • POJO가 되기 위해서는 외부의 의존성을 두지 않고, 순수한 JAVA로 구성이 가능해야 함
  • 특정 환경에 종속되지 않음

참고자료


Java & SpringBoot로 시작하는 웹 프로그래밍 강의 : #패스트캠퍼스 #내일배움카드 #K디지털크레딧 #바이트디그리 #자바인강

관련글 더보기

댓글 영역