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지시자로 정의되며,모든 메소드가 추상 메소드로 정의 됩니다.
추상 클래스와인터페이스의 차이는존재의 목적에 있습니다.
추상 클래스는상속을 받아서, 그 기능을 재활용하고 확장 시키는 데 목적이 있습니다.
인터페이스는메소드구현을 강제하여,
인터페이스를 구현한클래스에서 같은 기능을 보장하는 데 목적이 있습니다.