[java 기초]객체 지향 프로그래밍? JVM?

RUreadyYe·2022년 8월 14일
0

자바 기초 이론

목록 보기
1/7

객체지향 프로그래밍(Object Oriented Programming)

1. 객체지향 프로그래밍이란(OOP)?

자바는 객체지향 언어이다.
세상에 존재하는 모든 대상을 객체라고 할 수 있으며,
객체지향 프로그래밍은 프로그래밍에 필요한 모든 객체를 파악하고
각각의 객체들의 역할을 구분하여
객체들 간의 상호작용으로 프로그램을 만드는 것을 말한다.

그래서 이게 어떻게 다른건데? 라는 생각이 들 수 있다.
프로그래밍은
절차적 프로그래밍 vs 객체 지향 프로그래밍
으로 나누어진다.
손님이 마트에서 과일을 사는 상황을 프로그래밍 한다고 했을 때,

*절차적 프로그래밍

손님이 과일의 종류를 골라서 돈을 지불한다.
-> 계산대에서 돈을 세고 과일과 잔돈을 돌려준다.
-> 손님은 과일과 잔돈을 가지고 돌아간다.

절차지향은 흐름에 따라 하나의 클래스에 필요한 모든 기능과 절차를 구성한다.

*객체지향 프로그래밍

  • [손님] = [과일], [돈]
  • [마트] = [과일], [돈]
  • 손님
    과일을 고른다.
    돈을 지불한다.
    과일을 받는다.
    잔돈을 받는다.
  • 마트
    받은 돈과 과일 금액의 차를 계산한다.
    과일을 돌려준다.
    잔돈을 돌려준다.

객체지향은 객체와 기능을 각 클래스로 구분해서 구성한다.

2. 객체지향 프로그래밍의 장단점

#장점

  1. 모듈화로 인해 유지보수가 편하다.
  2. 코드의 재사용이 높다.
  3. 구분이 뚜렷하여 코드를 이해하기 쉽다.
  4. 접근 제한자를 사용하면 보안성이 높다.

#단점

  1. 실행속도가 느리다.
  2. 프로그램 용량이 크다.
  3. 설계에 많은 시간이 소요된다.

3. 객체지향의 설계원칙

  • 단일 책임 원칙
  • 개방 폐쇄 원칙(OCP, Open-Closed Principle)
  • 리스코프 치환 원칙
  • 인터페이스 분리 원칙
  • 의존 역전 원칙

1. 단일 책임 원칙

  • 하나의 모듈은 한 가지 책임을 가져야 한다는 것으로,
    한 클래스에 연관성이 없는 기능을 수행하는 알고리즘을 두개 이상 포함하면 안된다는 것을 의미한다.

2. 개방 폐쇄 원칙

  • 요구사항이 변경될 때 새로운 동작을 추가하여 애플리케이션의 기능을 확장할 수 있고,
    기존의 코드를 직접적으로 수정하지 않고 인터페이스를 통해 동작을 추가하거나 변경할 수 있다.
    클라이언트 <- 인터페이스 -> 클래스

3. 리스코프 치환 원칙

  • 자식 클래스는 부모 클래스가 따르는 조건을 그대로 따라야 한다.
    자식 클래스에서 부모 클래스의 조건을 변경할 수 없다.

4. 인터페이스 분리 원칙

  • 부모 클래스에서는 모든 자식 클래스에 공통으로 적용되는 기능만 구현해야 한다.
    자식 클래스의 특성에 따라 달라지는 기능은 각각 인터페이스로 구현해 필요한 기능만 상속하도록 한다.

JVM(Java Virtual Machine)이란?

말 그대로 '자바를 실행하기 위한 가상 컴퓨터' 라고 이해할 수 있으며,
자바 프로그램을 실행시키면 JVM을 거치고 os를 통해 하드웨어로 전달한다.

  1. JVM을 알아야 하는 이유?
  • 운영체제에 독립적이라는 자바언어의 특징이기 때문에 알아두어야 한다고 볼 수 있다*
    다른 프로그램은 실행시켰을 때 os만 거치고 하드웨어로 전달된다.
    속도가 빠른 대신에 os에 종속적이어서 각 os에 맞게 프로그램을 구성해야 한다.
    반면 JVM은 os를 거치기 전에 해석과정을 수행하기 때문에 상대적으로 속도가 느린 반면에 자바를 os에 구애받지 않고 재사용을 가능하게 해준다.
    (os에 맞는 JVM은 갖춰져야 함)

  • 자동 메모리 관리인 Garbage collection을 수행한다.
    자바로 작성된 프로그램이 실행되면 가비지컬렉터(garbage collector)가 자동적으로 메모리를 관리해주기 때문에 프로그래머는 메모리를 따로 관리하지 않아도 된다.


profile
기억력이 짧은 나를 위한 기록 🍀

0개의 댓글