-
728x90
본 포스팅은 jisikTank 스터디에 참여하며 정리한 문서입니다.
jisikTank Skill 지식 Git Repository
Java, JVM, 객체지향 프로그래밍
Java란?
네트워크상에서 쓸 수 있도록 미국의 Sun마이크로시스템이 개발한 객체지향 프로그래밍 언어이다. 다른 언어와 비교하여 자바의 가장 큰 특징은 운영체제 없이 독립적이라는 것이다. 운영체제에 관계없이 같은 코드를 사용 가능한데, OS위의 JVM(Java Virtual Machine) 이라는 가상머신 위에서 자바가 실행되기 때문이다.
- Java 프로그램은 한 개이상의 Class로 구성
- Class는 한개이상의 필드나 메소드로 구성
- 가장 먼저 메인메소드 public static void main(String[] args) 를 찾아 실행
특징
- JVM만 설치하면 컴퓨터의 운영체제에 상관없이 작동한다.( 운영체제에 독립적)
- 기본 자료형을 제외한 모든 요소들이 객체로 표현
- 객체 지향 개념의 특징인 캡슐화, 상속, 다형성이 잘 적용된 언어
- Garbage Collector(GC)를 통한 메모리 관리기능
- 멀티쓰레드(Multi-thread)를 지원한다.
컴파일 과정
- 컴파일러가 소스코드를 자바 바이트코드로 변환 (xxx.java -> xxx.class)
- JVM(JIT 컴파일러)이 바이트코드를 기계어로 변환
인터프리터 방식!!!
컴파일 언어와 스크립트 언어
작성한 코드를 컴퓨터가 알아듣게 하기 위해서는 프로그래밍 언어를 기계어(0, 1)로 번역하는 과정이 필요하다. 그 과정을 언어에 따라 컴파일(Compile) 혹은 인터프릿(Interpret)이라고 하고, 각각을 실행하는 변환기를 컴파일러, 인터프리터라고 한다.
이 때, 컴파일을 하는 언어를 컴파일 언어, 인터프릿을 하는 언어를 인터프리터 언어 혹은 스크립트 언어라고 한다.
- 컴파일 언어
C, C++, Java와 같은 컴파일 언어는 코드를 작성한 후 컴파일을 하면, 컴파일러에 의해 기계어로 변환된 파일이 생성되고 컴퓨터는 그 파일을 실행한다.
- 스크립트 언어
Python과 Javascript와 같은 스크립트 언어는 별도의 파일 생성 없이 소스 코드가 작성될 때마다 인터프리터가 해당 코드를 기계어로 번역하고 실행한다.
컴파일 언어는 이미 기계어로 번역된 파일을 컴퓨터가 실행하므로 스크립트 언어에 비해 빠르고 소스코드에 문법적 오류가 있으면 컴파일 에러를 발생시켜 디버깅이 수월하다. 하지만 일반적으로 문법적 제약이 많아 작성이 비교적 어렵고, 운영체제마다 사용하는 기계어가 다르기 때문에 운영체제에 따라 작업을 각각 다르게 해줘야 하는 단점이 있다.
스크립트 언어는 컴퓨터가 코드를 실행하는 과정에서 소스 코드를 기계어로 번역하는 과정이 포함되어 있으므로 컴파일 언어에 비해 느리다. 또 문법적 오류가 있든 없든 일단 실행되기 때문에 디버깅이 비교적 어렵다. 하지만 문법적 제약이 비교적 적어 작성이 비교적 쉽고, 운영체제를 신경 쓸 필요 없이 한 번만 작성해놓으면 된다는 장점이 있다.
Java는 컴파일 언어와 스크립트 언어의 장점을 동시에 지닌다!
JVM(Java Virtual Machine)
- Java를 실행하기 위한 가상머신
Java 애플리케이션은 JVM을 한 번 더 거치면서 하드웨어에 맞게 완전히 컴파일된 상태가 아니고, 실행시에 해석(interpret)된다. 이 때문에 속도가 느리다는 단점을 가지고 있다. 그러나 바이트코드(컴파일된 Java 코드)를 하드웨어의 기계어로 바로 변환해주는 JIT컴파일러와 향상된 최적화 기술이 적용되어 속도의 격차를 많이 줄였다.
또, 우측의 일반적인 애플리케이션은 OS와 바로 맞붙어 있기 때문에 OS 종속적이다. 그래서 다른 OS에서 실행시키기 위해서는 애플리케이션을 그 OS에 맞게 변경해야 한다. 반면 Java 애플리케이션은 JVM하고만 상호작용을 하기 때문에 OS와 하드웨어에 독립적이라 다른 OS에서도 프로그램의 변경없이 실행이 가능하다.
객체지향 프로그래밍
데이터를 객체로 취급하여 프로그램에 반영한 것 순차적으로 프로그램이 동작하는 기존의 것들과 다르게 객체와 객체의 상호작용을 통해 프로그램이 동작한다. Java의 경우에는 구현은 Class, 사용은 Object로 구분단위를 가지며 구현한 객체들을 벽돌처럼 쌓듯이 합쳐서 전체 결과물을 만든다.
- 객체 : 실제로 존재하는 것. 사물 또는 개념, 논리
- 클래스 : 객체를 정의해 놓은 것
- 인스턴스 : 클래스로부터 객체를 생성한 것
특징
- 코드 재사용이 높음, 코드의 변경이 용이
- 유지보수 용이
- 직관적인 코드 분석 가능
- 상속, 다형성(Polymorphism), 캡슐화(encaptulation)
절차지향 프로그래밍과의 차이
- 절차지향, 구조적 프로그래밍(C)
초창기에 많이 사용한 방법으로 순차적 프로그래밍이라고도 한다. 해야할 작업을 순서대로 코딩을 한다. 구조적 프로그래밍에서는 함수 단위로 구성되며 기능별로 묶어놓은 특징이 있다. 컴퓨터의 처리 구조와 유사해 실행 속도가 빠르다는 장점이 있다.
- 객체지향 프로그래밍(Java, C++, C#)
주 구성요소는 클래스와 객체이다. 그리고 상속과 다형성을 특징으로 들 수 있다. 클래스를 활용하여 각각의 기능별로 구성이 가능하며, 이를 나중에 하나로 합쳐서 프로그램의 완성이 가능하다. 객체 별로 개발이 가능하기에 팀 프로젝트를 하기에도 유리한 장점을 가지고 있다. 또한 코드의 재사용이 가능하며, 오류 발생 가능성이 적고 안정성이 높다.
예를 들면 물건을 파는 판매자와 사는 구매자가 있다고 하자. 그렇다면 “판매자”와 “구매자”는 서로 다른 객체인 것이다. 즉, 객체지향에서의 클래스는 어떠한 ‘행동’을 하는 사람이라고 생각하며 구현해야한다. 이래도 이해가 되지 않는다면 객체는 작은 프로그램이라고 생각해도 된다. 즉, 프로그램에서 필요한 행위들을 일반화 시켜서 객체로 만들고 이 객체를 사용하는 형태로 프로그래밍을 하는 것.
Quiz
- OOP란?
- 객체란?
- Java 특징?
출처
Quiz 답안
- OOP란?
객체란?
- Object(객체)는 OOP에서 데이터(변수)와 그 데이터에 관련되는 동작(함수). 즉 절차, 방법, 기능을 모두 포함한 개념
- 클래스는 객체를 만들기 위한 설계도
- Java 특징?
'Skill > Java' 카테고리의 다른 글
[Java] String & StringBuffer & StringBuilder 비교 (0) 2021.04.21 [Java] Call by Value와 Call by Reference (0) 2021.04.21 [Java] Java에서의 Thread (0) 2021.04.21 [Java] JVM 메모리 구조와 Wrapper Class (0) 2021.04.21 [Java] 추상화, 상속, 추상클래스와 인터페이스 비교, 다형성 (0) 2021.04.20 댓글