[WIL] 객체지향 프로그래밍, JVM 정리

컴클로딩·2022년 7월 2일
0
post-thumbnail

📌Intro


  • 항해99 2주차는 알고리즘 주차이다. 내가 선택한 주특기 Spring의 기반이 되는 Java로 알고리즘 문제를 28문제 풀었고 Velog에 정리 후 깃허브에도 올렸다. 3~5주차에는 Spring을 학습하는 주차인데 Spring이 익숙해질 때쯤 알고리즘도 같이 공부해야겠다. 안하면 또 까먹는다...

  • Java에서 가장 중요한 개념이자 특징인 객체지향 프로그래밍과 JVM에 대해 포스팅을 해보려고 한다.

JVM


JVM( Java Virtual Machine ) : 자바 바이트코드를 실행할 수 있는 주체.

  • 자바 바이트코드는 플랫폼에 독립적이며 모든 자바 가상 머신은 자바 가상 머신 규격에 정의된 대로 자바 바이트코드를 실행한다.

  • 따라서 표준 자바 API까지 동일한 동작을 하도록 구현한 상태에서는 이론적으로 모든 자바 프로그램은 CPU나 운영 체제의 종류와 무관하게 동일하게 동작할 것을 보장한다.

  • Java는 "Write Once, Run Anywhere"

  • JVM에 대해 더 깊이 알고싶다면 아래 블로그가 정말 잘 설명되어있다.

객체지향 프로그래밍


객체지향프로그래밍( Object Oriented Programming, OOP ) : 프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법

OOP 원칙

  • 단일 책임 원칙(Single Responsibility Principle, SRP)
    • 객체는 오직 하나의 책임을 가져야 한다.(객체는 오직 하나의 변경의 이유만을 가져야 한다.)
  • 개방-폐쇄 원칙(Open-Closed Principle, OPC)
    • 객체는 확장에 대해서는 개방적이고 수정에 대해서는 폐쇄적이어야 한다.
  • 리스코프 치환 원칙(Liskov Substitution Principle, LSP)
    • 자식 클래스는 언제나 자신의 부모 클래스를 대체할 수 있다는 원칙.
  • 인터페이스 분리 원칙(Interface Segregation Principle, ISP)
    • 클라이언트에서 사용하지 않는 메서드는 사용해선 안 된다. 그러므로 인터페이스를 다시 작게 나누어 만든다. OCP와 비슷한 느낌도 들지만 엄연히 다른 원칙이다. 하지만 ISP를 잘 지키면 OCP도 잘 지키게 될 확률이 비약적으로 증가한다. 정확히 말하자면 인터페이스의 SRP라고 할 수 있다.
  • 의존성 역전 원칙(Dependency Inversion Principle, DIP)
    • 추상성이 높고 안정적인 고수준의 클래스는 구체적이고 불안정한 저수준의 클래스에 의존해서는 안 된다는 원칙으로서, 일반적으로 객체지향의 인터페이스를 통해서 이 원칙을 준수할 수 있게 된다. (상대적으로 고수준인) 클라이언트는 저수준의 클래스에서 추상화한 인터페이스만을 바라보기 때문에, 이 인터페이스를 구현한 클래스는 클라이언트에 어떤 변경도 없이 얼마든지 나중에 교체될 수 있다. (디자인 패턴 중 전략 패턴을 떠올리면 된다)

OOP 장점

  • 코드 재사용성이 높다.
  • 유지보수가 쉽다.
  • 대형 프로젝트에 적합하다.

OOP 단점

  • 실행 속도가 상대적으로 느리다.
  • 설계시 많은 시간과 노력이 필요하다.

OOP관련 키워드

  • 클래스, 인스턴스, 추상화, 캡슐화, 상속, 다형성
  • 위의 키워드들은 현재 Java 클래스 관련 포스팅을 진행중인데 포스팅이 완료되면 아래에 URL을 남길 계획.

OOP 대조되는 키워드 : 절자치향 프로그래밍

  • 절자치향 프로그래밍 장점
    • 초기 프로그래밍 언어로 컴퓨터의 처리 구조와 비슷해 실행 속도가 빠르다.
  • 절차지향 프로그래밍 단점
    • 코드 실행 순서에 기반을 두고 함수 중심의 모듈로 구성되있으므로 재사용성이 떨어진다.
    • 함수 단위로 이루어지기에 프로그램이 커지면 매우 복잡해져 유지보수성이 떨어진다.

참고자료

profile
어떠한 가치를 창출할 수 있을까를 고민하는 개발자. 주로 Spring으로 개발해요. https://comclothing.tistory.com/ 👈🏻티스토리 블로그로 이전 완료

0개의 댓글