Java언어 특징 정리

최민수·2023년 7월 12일
0

프로그래밍 언어

목록 보기
4/14

Java 언어의 특징

1. OOP(객체지향) 언어다.

객체 간의 관계와 협업 중심으로 코드를 짜야 함.

즉, 결과를 내기 위한 과정이 절차 지향 언어와 다르다는 것.

객체지향의 3대 특징: 다형성(Polymorphism), 상속(Inheritance), 캡슐화(Encapsulation)

+) 한 가지 더 추가한다면?
추상화(Abstraction)

2. 플랫폼 독립적 언어다.

java 코드가 컴파일 되면, bytecode file이 만들어진다.

이 컴파일 된 클래스 파일은 linux, mac, windows 운영체제 환경에 상관없이 동작할 수 있는 파일이다.

JVM만이 클래스 파일을 해석할 수 있는 것.
그래서 플랫폼 종속적인 것이고,
그래서 c언어보다 느릴 수 밖에 없는 것.

하지만 옛날에 비해서 언어 간의 속도 차이는 많이 줄어들었음.
자바도 pre-compile 된 형태로 제공하거나 in-time-interpreter를 지원하는 등 노력을 많이 한 것.

3. 멀티 스레딩 지원

동시에 여러 프로그램 돌릴 수 있는 환경 지원.

4. JDBC로 코드를 짠다면 DB에도 독립적

5. 애매한 부분이 적음

다중 상속 지원 X: 부모가 많은 경우, 어디의 특성을 받을지 애매하기 때문.

포인터 지원 X, Garbage Collection으로 지원: 잘못된 영역 침범 예방, 메모리 누수 예방.
포인터로 동적 할당이 아닌 언어 차원에서 gc로 지원.


Garbage Collection(GC)의 동작

gc의 종류는 참조값 - 메모리 address 가 어떻게 설계되어 있는지에 따라서 종류가 다양하다.

참조값이 메모리 address를 찾아갈 수 있는 매핑된 값을 가지는 형태라면 다음과 같은 gc 가 적용될 수 있다.

우선 프로그램 코드가 heap 영역에 존재하고,
old, new(young) 영역으로 나눌 수 있다.
new 영역 안에서도 eden, survivor 영역이 존재하는데, 객체가 처음 생성되면 eden영역에 신규로 만들어지고 이 영역이 다 차게 되면 청소한다.

청소는 어떻게?) 참조값이 물려있지 않은 객체를 판단하는 로직을 거친 뒤 쓰레기가 아닌 객체들을 다른 영역으로 이사시킨다.
그리고 영역을 싹 밀어버림. 마지막으로 이사 간 객체들이 참조하는 값은 다시 메모리 address에 매핑된 값으로 바꿔준다.


부동소수점에 대하여

Primitive 데이터 타입정수형, 실수형 종류가 존재한다.

이 둘은 저장하는 방법이 다른데,
정수형이 이진법으로 8비트가 주어지면 2^8 가지의 수를 저장할 수 있던 반면,

실수형은 다른 방법의 저장 방식을 사용한다.
(부호, 지수, 가수) 영역으로 같은 비트로 더 넓은 범위를 저장할 수 있다.

예를 들어, 1억을 정수형으로 표현하면 int의 32비트 공간을 차지해야 하지만,
실수형으로 표현하면 1*10^8, 즉 0,8,1 만 저장하면 되므로 더 적은 비트로 더 넓은 수를 표현할 수 있게 된다.

하지만, 이렇게 저장된 값을 다시 원래 값으로 복구하는 과정이 복잡하기 때문에(오버헤드 또한 더 발생) 정확히 1억이 아닌 9999만 9999... 의 근사치로 표현될 수 있는 현상이 발생하는 것이다.

이를 부동소수점 현상이라고 하고, 따라서 실수형을 값 비교할 때에는 범위 비교로 해야 한다는 것이다.


Java 환경

JRE vs JDK

JRE: JVM + API

그래서 JRE에는 컴파일에 관련한 기능이 하나도 없음.

JDK: JRE + 개발에 필요한 도구들

개발을 하려면 JDK를 설치해야 함.

profile
CS, 개발 공부기록 🌱

0개의 댓글