고을마을 : 나의 코딩 이야기

항해99 7기 2주차 WIL[객체지향 프로그래밍, JVM] 본문

항해99 7기/WIL(Weekly I Learned

항해99 7기 2주차 WIL[객체지향 프로그래밍, JVM]

고을마을 2022. 5. 23. 00:41

2022년 5월 22일 

항해99에 참여한지 2주가 된 날이다.

 

2주간 공부하면서 제대로 이해 못했던 부분을 다시한번 살펴보고 그 내용을 적어보고자 한다.


객체지향 프로그래밍이란?

객체지향 프로그래밍(Object Oriented Programming)은 문제를 여러 개의 객체 단위로 나눠 작업하는 방식.

이 방식은 오늘날 가장 많이 사용하는 대표적인 프로그래밍 방식이고 JAVA가 대표적인 객체지향 프로그래밍 언어!

 

객체지향 프로그래밍의 가장 큰 특징은 클래스를 이용해 연관 있는 처리부분(함수)과 데이터 부분(변수)를 하나로 묶어 객체(인스턴스)를 생성해 사용한다는 점이다.

그리고 객체지향 프로그래밍에서는 프로젝트를 독립적인 객체 단위로 분리해서 작업할 수 있기 때문에 여러 개발자와 협업해 규모가 큰 프로젝트를 진행할 수 있으며 유지보수측면도 뛰어나다는 장점이 있다.

 

[객체간의 관계]

객체 지향 프로그램에서는 객체는 다른 객체와 다른 객체와 관계를 맺고 있다.

집합 관계 : 완성품과 부품의 관계

사용 관계 : 객체가 다른 객체를 사용하는 관계

상속 관계 : 종류 객체와 국체적인 사물 객체 관계 

 

[객체지향 프로그래밍]

부품객체를 만들고 이것들은 하나씩 조립해서 완성된 프로그램을 만드는 기법이다.

 

위는 이번주에 실시했던 자바 객체지향 과제 모범답안이다. 

이게 바로 객체지향의 예이다.

답안의 저작권 문제가 있을것같아 디테일하게 소개하지는 못하지만

Bus, Destination, Taxi 클래스, Transportaion 추상클래스, Status 열거형이 상속을 통해 유기적으로 결합되어 있어서 출력이 이루어졌다.

나는 Bus, Taxi 클래스, Car 추상클래스만 만들었는데.

모범답안에는 Destination 클래스, Transportation 추상클래스까지 만들어서 더 체계적으로 작성됐다는게 놀라웠다.

컴퓨터적 사고와 코딩실력이 많이 부족하다는 점을 다시한번 깨닫게 된 계기.. (더 열심히 노력해야겠다!)


JVM이란?

 

Java Virtual Machine의 줄임말.

직역하면 '자바를 실행하기 위한 가상 기계(컴퓨터)'라고 할 수 있다.

Java 는 OS에 종속적이지 않다는 특징을 가지고 있다. OS에 종속받지 않고 실행되기 위해선 OS 위에서 Java 를 실행시킬 무언가가 필요하다. 그게 바로 JVM이다.

즉, OS에 종속받지 않고 CPU 가 Java를 인식, 실행할 수 있게 하는 가상 컴퓨터이다.

 

컴파일 과정

Java 소스코드, 즉 원시코드(*.java)는 CPU가 인식을 하지 못하므로 기계어로 컴파일을 해줘야한다.

하지만 Java는 이 JVM 이라는 가상머신을 거쳐서 OS에 도달하기 때문에 OS가 인식할 수 있는 기계어로 바로 컴파일 되는게 아니라 JVM이 인식할 수 있는 Java bytecode(*.class)로 변환된다.

 

Java compiler 가 .java 파일을 .class 라는 Java bytecode로 변환한다.

 

💡 여기서 Java compiler는 JDK를 설치하면 bin 에 존재하는 javac.exe를 말한다.
     (즉, JDK에 Java compiler가 포함되어 있다는 것)
     javac 명령어를 통해 .java를 .class로 컴파일 할 수 있다.

 

변환된 bytecode는 기계어가 아니기 때문에 OS에서 바로 실행되지 않는다.

이 때, JVM이 OS가 bytecode를 이해할 수 있도록 해석해준다. 따라서 Byte Code는 JVM 위에서 OS 상관없이 실행될 수 있는 것이다.

OS에 종속적이지 않고, Java 파일 하나만 만들면 어느 디바이스든 JVM 위에서 실행할 수 있다.

 

💡 bytecode는 가상 컴퓨터(VM)에서 돌아가는 실행 프로그램을 위한 이진 표현법.
 
자바 바이트 코드(Java bytecode)는 JVM이 이해할 수 있는 언어로 변환된 자바 소스코드를 의미한다.
자바 컴파일러에 의해 변환된 코드의 명령어 크기가 1바이트라서 자바 바이트 코드라고 불리고 있다.