자바는 객체지향 언어이다.
세상에 존재하는 모든 대상을 객체라고 할 수 있으며,
객체지향 프로그래밍은 프로그래밍에 필요한 모든 객체를 파악하고
각각의 객체들의 역할을 구분하여
객체들 간의 상호작용으로 프로그램을 만드는 것을 말한다.
그래서 이게 어떻게 다른건데? 라는 생각이 들 수 있다.
프로그래밍은
절차적 프로그래밍 vs 객체 지향 프로그래밍
으로 나누어진다.
손님이 마트에서 과일을 사는 상황을 프로그래밍 한다고 했을 때,
손님이 과일의 종류를 골라서 돈을 지불한다.
-> 계산대에서 돈을 세고 과일과 잔돈을 돌려준다.
-> 손님은 과일과 잔돈을 가지고 돌아간다.
절차지향은 흐름에 따라 하나의 클래스에 필요한 모든 기능과 절차를 구성한다.
- [손님] = [과일], [돈]
- [마트] = [과일], [돈]
- 손님
과일을 고른다.
돈을 지불한다.
과일을 받는다.
잔돈을 받는다.
- 마트
받은 돈과 과일 금액의 차를 계산한다.
과일을 돌려준다.
잔돈을 돌려준다.
객체지향은 객체와 기능을 각 클래스로 구분해서 구성한다.
말 그대로 '자바를 실행하기 위한 가상 컴퓨터' 라고 이해할 수 있으며,
자바 프로그램을 실행시키면 JVM을 거치고 os를 통해 하드웨어로 전달한다.
운영체제에 독립적이라는 자바언어의 특징이기 때문에 알아두어야 한다고 볼 수 있다*
다른 프로그램은 실행시켰을 때 os만 거치고 하드웨어로 전달된다.
속도가 빠른 대신에 os에 종속적이어서 각 os에 맞게 프로그램을 구성해야 한다.
반면 JVM은 os를 거치기 전에 해석과정을 수행하기 때문에 상대적으로 속도가 느린 반면에 자바를 os에 구애받지 않고 재사용을 가능하게 해준다.
(os에 맞는 JVM은 갖춰져야 함)
자동 메모리 관리인 Garbage collection을 수행한다.
자바로 작성된 프로그램이 실행되면 가비지컬렉터(garbage collector)가 자동적으로 메모리를 관리해주기 때문에 프로그래머는 메모리를 따로 관리하지 않아도 된다.