1. JAVA란?
2. JVM이란?
3. 가비지 컬렉션 (Garbage Collection) , 가비지 컬렉터 (Garbage Collector)
4. Overriding VS Overloading
# JAVA란?
자바는 객체지향 프로그래밍 언어(OOP) 입니다.
객체지향 프로그래밍 언어란 데이터를 객체로 취급하여 프로그램에 반영하고, 순차적으로 프로그램이 동작하는 것과는 다르게 객체의 상호작용을 통해 프로그램이 동작하는 것을 말한다.
객체지향 개념의 특징인 상속,캡슐화,다형성이 잘 적용된 순수한 객체지향언어이다.
- 특징
- 운영체제에 독립적이다.
- 객체지향언어이다.
- 가비지 컬렉터가 자동적으로 메모리를 관리해주기 때문에 프로그래머는 메모리를 따로 관리 하지 않아도 된다.
- 네트워크와 분산처리를 지원한다.
- 멀티쓰레드를 지원한다.
- 동적 로딩을 지원한다.
- 장점
JVM 위에서 동작하기 때문에 운영체제에 독립적이다.
GabageCollector를 통한 자동적인 메모리 관리가 가능하다.
- 단점
JVM 위에서 동작하기 때문에 실행 속도가 상대적으로 느리다.
다중 상속이나 타입에 엄격하며, 제약이 많다.
# JVM이란?
JVM이란 Java Virtual Machine, 자바 가상 머신의 약자를 따서 줄여 부르는 용어이며
JVM 역할은 JAVA와 OS사이에서 중개자 역할을 수행하여 JAVA가 OS에 구애받지 않고 재사용을 가능하게 해준다.그리고 가장 중요한 메모리관리, Garbage Collection을 수행한다. 그리고 JVM은 스택기반의 가상머신이다.
(=Java Byte Code를 OS(운영체제)에 맞게 해석 해주는 역할을 하고 GC를 통해 자동적인 메모리 관리를 해준다.)
# 가비지 컬렉션(Garbage Collection)
유효하지 않은 메모리를 자동으로 제거해주는 작업이다. Java Application은 JVM위에서 구동되는데,
JVM의 기능 중 더이상 사용하지 않는 객체를 청소하여 메모리 공간을 확보하는 작업이다.
- GC가 필요한 이유는?
Heap 영역에 저장되는 객체들이 계속해서 쌓이게 되면 out of memoryexception이 발생하여, 이를 방지하기 위해 주기적으로 사용하지 않는 객체를 수집하여 제거해줘야한다.
# 가비지 컬렉터(Garbage Collector)
메모리가 부족할때 쓰레기를 정리해주는 작업을 수행하는 프로그램이다. GC작업을 하는 가비지 컬렉터는 다음과 같은 일을 한다.
- 메모리 할당
- 사용중인 메모리 인식
- 메모리 관리를 위해 힙영역에서 더이상 사용하지 않는 객체를 메모리에서 제거
-가비지 컬렉터의 한계
- 어떤 방식의 쓰레기 수집을 사용하든 실행 시간에 작업을 하는 이상 성능 하락을 피할 수는 없다.
- 쓰레기 수집기가 존재하더라도 더 이상 접근이 불가능한 객체만 회수하기 때문에 메모리 누수는 발생 할 수있다.
# Overloading VS Overriding
- 오버로딩(Overloading)
자바의 한 클래스 내에 이미 사용하려는 이름과 같은 이름을 가진 메소드가 있더라도 매개변수의 개수 또는 타입이 다르면, 같은 이름을 사용해서 메소드를 정의할 수있다.
ex)
public double computeArea(Circle c) { ... }
public double computeArea(Circle c1, Circle c2) { ... }
public double computeArea(Square c) { ... }
- 오버라이딩(Overriding)
부모 클래스로부터 상속받은 메소드를 자식 클래스에서 재정의하는 것을 오버라이딩이라고 한다.
오버라이딩은 부모 클래스의 메소드를 재정의하는 것이므로, 자식 클래스에서는 오버라이딩하고자 하는 메소드의 이름,매개변수,리턴값이 모두 같아야 한다.
ex)
↑ 상속
parent class
(짜장만드는 기능)
child class
(더 맛있는 짜장만드는 기능)
구분 | 오버로딩 | 오버라이딩 |
메소드 이름 | 동일 | 동일 |
매개변수,타입 | 다름 | 동일 |
리턴 타입 | 상관없음 | 동일 |
'IT > 용어정리' 카테고리의 다른 글
클라이언트(Client)와 서버(Server)란? (0) | 2023.07.14 |
---|---|
컴파일러 vs 인터프리터 (0) | 2023.07.12 |
프레임워크와 라이브러리? (0) | 2023.07.03 |
String, StringBuffer vs StringBuilder (0) | 2023.04.29 |
용어 정리2 (0) | 2023.04.13 |