Question) "Java 애플리케이션 실행 과정에 대해 설명해 주세요."
먼저,컴파일러
가.java
형태의자바 소스 코드
를
.class
형태의바이트 코드
로 변환 합니다.
이후,Class Loader
가바이트 코드
를
런타임 데이터 영역 (Runtime Data Area)
에 로딩 시킵니다.
로딩된바이트 코드
는실행 엔진 (Execution Engine)
에 의해 실행 됩니다.
※ Java의 바이트 코드
.class
확장자JVM
이 읽을 수 있는 코드바이트 코드
라고 해서 0100111
형태가 아님① Method Area
② Heap Area
① PC Register
② JVM Stack (Stack Area)
③ Native Method Stack
Question) "Java 메모리 구조에 대해 설명해 주세요."
자바 메모리 구조는 크게 5가지 영역으로 구분 됩니다.
우선, 쓰레드 공통으로Method Area
,Heap Area
가 존재 합니다.
쓰레드 별로는PC Register
,JVM Stack
,Native Method Stack
이 존재 합니다.
Method Area
는 클래스 별로 전역 변수, 정적 변수, 메소드 정보들이 저장되는 영역 입니다.Heap Area
는 런타임 중, 생성되는 객체들이 동적으로 할당되는 영역 입니다.PC Register
는 현재 수행중인 JVM 명령어가 저장되는 영역 입니다.JVM Stack
은 호출된 메소드의 매개변수, 지역 변수, 리턴 정보들이 저장되는 영역 입니다.Native Method Stack
은 자바 외의 다른 언어인
C나 C++로 작성된 코드를 수행하기 위한 영역 입니다.
JVM
에서 메모리를 관리해주는 모듈
Heap
메모리를 재활용
Mark and Swip
동작
: 실행을 잠시 멈추고, 더 이상 참조되지 않는 객체들을 찾고 메모리에서 제거
Question) "GC (가비지 컬렉션)에 대해 설명해 주세요."
GC
는JVM
에서 메모리를 관리해주는 모듈 입니다.
Heap
메모리를 재활용 하기 위해서, 더 이상 참조되지 않는 객체들을 메모리에서 제거 합니다.
개발자가 직접 메모리를 직접 정리하지 않아도 되므로,
개발 편의성 및 개발 속도가 향상되는 장점이 있습니다.
Mark and Swip
동작에서 참조되지 않는 객체를 찾는 과정이 있는데,
이때 쓰레드가 잠시 중단되어 성능이 떨어진다는 단점이 있습니다.
객체
를 만들고,객체
에서 필요한 속성
을 뽑아 프로그래밍 수행공통 속성, 기능
을 묶어내는 것속성
과 기능
을 모아서 캡슐화
정보 은닉
)부모 클래스
의 속성
과 메소드
를 그대로 이어받아 사용하는 것하나의 변수명, 메소드명 등이 상황에 따라 다른 의미로 해석될 수 있는 것
오버라이딩 (Overridng
): 부모 클래스의 메소드를 재정의
오버로딩 (Overloading
): 같은 이름의 메소드를 매개변수 등을 다르게 하여 여러개 정의
Question) "OOP (객체지향 프로그래밍)에 대해 설명해 주세요."
현실 세계의 사물과 같은객체
를 만들고,
객체
에서 필요한속성
을 뽑아 프로그래밍을 하는 것 입니다.
객체지향 프로그래밍은 크게 4가지 특징이 있습니다.
추상화
는 객체들의 공통 속성, 기능을 묶어내는 것 입니다.캡슐화
는 속성과 기능을 모아서 캡슐화하며,
외부로부터 숨겨야하는 정보를 숨기고 접근을 제한하는 것 입니다.상속
은 부모 클래스의 속성과 메소드를 그대로 이어받아 사용하는 것 입니다.다형성
은 하나의 변수명, 메소드명 등이 상황에 따라 다른 의미로 해석될 수 있는 것 입니다.
부모 클래스의 메소드를 재정의하는 오버라이딩,
같은 이름의 메소드를 매개변수 등을 다르게 하여 여러개 정의하는 오버로딩이 있습니다.
Question) "현재 방에 있는 사물들에 객체지향 프로그래밍을 적용 한다면,
객체들의 속성, 메소드들을 어떻게 정의 할지 예시를 들어 설명 해주세요."
- 먼저, 전등을 나타내는
Light
클래스를 정의 할 것 같습니다.
Light
클래스의 속성으로는 전등이 켜진 상태를 나타내는boolean isLightOn
을 정의 합니다.
메소드로는 전등을 켜고 끄는lightOn()
,lightOff()
메소드를 정의 합니다.
- 이후, 전등을 조작하는
Switch
클래스를 정의 할 것 같습니다.
Switch
클래스의 속성으로는 연결된 전등을 나타내는Light light
객체를 정의 합니다.
메소드로는 스위치를 누르는switchOn()
,switchOff()
메소드를 정의 합니다.
switchOn()
,switchOff()
메소드는 내부에서light
객체 속성에 접근하여,
Light
클래스의lightOn()
,lightOff()
메소드를 호출하는 방식으로 구현 합니다.
- 최종적으로 사용자가
Switch
객체의 메소드를 호출하여,
Light
객체를 조작 하도록 제공 할 것 같습니다.
abstract
지시자로 정의하며, 추상 메소드
가 하나 이상 포함interface
지시자로 정의하며, 모든 메소드가 추상 메소드
로 정의됨Question) "추상 클래스와 인터페이스에 대해 설명해 주세요."
추상 클래스
는abstract
지시자로 정의되며,추상 메소드
가 하나 이상 포함 됩니다.
인터페이스
는interfacew
지시자로 정의되며,모든 메소드가 추상 메소드
로 정의 됩니다.
추상 클래스
와인터페이스
의 차이는존재의 목적
에 있습니다.
추상 클래스
는상속
을 받아서, 그 기능을 재활용하고 확장 시키는 데 목적이 있습니다.
인터페이스
는메소드
구현을 강제하여,
인터페이스
를 구현한클래스
에서 같은 기능을 보장하는 데 목적이 있습니다.