JAVA 면접 질문1
자바 특징
- 운영체제에 독립적이다.
- 객체지향 언어이다.
- 비교적 배우기 쉽다
- 자동 메모리 관리(Garbage Collection)을 지원한다
- 네트워크와 분산처리를 지원
- 멀티쓰레드를 지원
- 동적로딩(Dynamic Loading)을 지원
1. 자바의 구동원리를 설명
자바로 작성한 코드는 java라는 확장자를 가지며 ,자바에 존재하는 javac라는 전용 컴파일러가 java로 끝나는 자바코드를
컴퓨터가 이해할수 있또록 프로그래밍 언어를 기계어로 변경하게 되면 class라는 확장자를 가진 파일이 생성됨 그리고 class 파일은 jvm을 통해서 실행
2.객체지향과 절차지향 차이점 설명
객체지향은 실제세계를 모델링하는 소프트웨어 개발 방법, 코드의 재활용성이 높고 디버깅 쉬움
처리속도가 절차지향보다 느림, 설계에 많은 시간이 소요되는 단점 있음
절차지향 프로그래밍은, 물위에서 흐르듯 순차적임 프로그램 전체가 유기적 연결되도록 만드는 프로그래밍 기법
컴퓨터 처리구조와 유사해 실행속도가 빠름
반면 유지보수 어렵고, 실행순서가 정해져 있음, 코드의 순서가 바뀌면 결과값이 달라질수 있음
디버깅이 어려움
Garbage Collection(가비지 컬렉션)의 동작 방식
[ Garbage Collection(가비지 컬렉션)의 동작 방식 ]
Young 영역과 Old 영역은 서로 다른 메모리 구조로 되어 있기 때문에, 세부적인 동작 방식은 다르다. 하지만 기본적으로 가비지 컬렉션이 실행된다고 하면 다음의 2가지 공통적인 단계를 따르게 된다.
- Stop The World
- Mark and Sweep
1. Stop The World
Stop The World는 가비지 컬렉션을 실행하기 위해 JVM이 애플리케이션의 실행을 멈추는 작업이다. GC가 실행될 때는 GC를 실행하는 쓰레드를 제외한 모든 쓰레드들의 작업이 중단되고, GC가 완료되면 작업이 재개된다. 당연히 모든 쓰레드들의 작업이 중단되면 애플리케이션이 멈추기 때문에, GC의 성능 개선을 위해 튜닝을 한다고 하면 보통 stop-the-world의 시간을 줄이는 작업을 하는 것이다. 또한 JVM에서도 이러한 문제를 해결하기 위해 다양한 실행 옵션을 제공하고 있다.
2. Mark and Sweep
- Mark: 사용되는 메모리와 사용되지 않는 메모리를 식별하는 작업
- Sweep: Mark 단계에서 사용되지 않음으로 식별된 메모리를 해제하는 작업
Stop The World를 통해 모든 작업을 중단시키면, GC는 스택의 모든 변수 또는 Reachable 객체를 스캔하면서 각각이 어떤 객체를 참고하고 있는지를 탐색하게 된다. 그리고 사용되고 있는 메모리를 식별하는데, 이러한 과정을 Mark라고 한다. 이후에 Mark가 되지 않은 객체들을 메모리에서 제거하는데, 이러한 과정을 Sweep라고 한다.
출처: https://mangkyu.tistory.com/118 [MangKyu's Diary:티스토리]
추상클래스와 인터페이스의 차이점은 무엇인가요?
추상클래스 : 일반클래스와 기능은 같은지만 단지 추상메서드를 선언하여 상속을 통해 자손 클래스에 완성하도록 유도하는 클래스, 따라서 미완성 설계도 이나 상속을 위한 클래스이기 때문에 따로 객체를 생성할 수 없음
인터페이스 : 인터페이스는 추상메서드와 ,상수로만 이루어저 있고, 로직을 작성할수 없음
추상클래스 | 인터페이스 |
Default 생성자를 가진다 (서브클래스가 인스턴스화될 때 호출됨) | 생성자를 가지지 않는다 |
추상 메소드, 비 추상 메소드를 포함할 수 있다 | 추상 메소드만 선언할 수 있다 |
추상 클래스를 상속한 클래스는 꼭 모든 메소드를 구현할 필요는 없으며, 추상 메소드만 서브 클래스 안에서 구현되면 된다. | 인터페이스를 구현하는 클래스는 인터페이스에서 선언된 모든 메소드를 다 구현해야 한다. |
객체 생성 불가하므로 extend (상속)로 구현 | 객체 생성 불가하므로 implement 로 구현 |
생성자(Constructor)란?
생성자는 클래스와 같은 이름의 메소드로, 새 객체가 생성될 때 호출되는 메소드입니다. 명시적으로 생성자를 만들지 않아도 default로 만들어집니다. 생성자는 파라메터를 다르게 하여 오버로드 할 수 있으며, 파라메타 생성자를 만든다면 파라메터가 없는 default형 생성자도 명시적으로 만들어주어야 합니다.
Overloading과 Overriding의 차이
오버 로딩은, 다양한 타입과 개수의 파라메터를 가진 메소드를 여러 개 생성하여, 다양한 유형의 호출에 응답하게 하는 기술입니다.
오버 라이딩은, 상속 관계에 있는 두 클래스에서, 자식 클래스가 부모 클래스가 갖고 있지 않은 서브클래스만의 특정 정보를 재정의하게 하는 것입니다. 이 때 메소드 오버라이딩은 아래의 조건들을 만족하여야 합니다.
- 메소드 이름이 일치할 것
- 아규먼트가 같을 것
- 리턴 타입도 같을 것
직렬화(Serialize)란?
- 자바 시스템 내부에서 사용되는 Object 또는 Data를 외부의 자바 시스템에서도 사용할 수 있도록 byte 형태로 데이터를 변환하는 기술.
- JVM(Java Virtual Machine 이하 JVM)의 메모리에 상주(힙 또는 스택)되어 있는 객체 데이터를 바이트 형태로 변환하는 기술
역직렬화(Deserialize)란?
- byte로 변환된 Data를 원래대로 Object나 Data로 변환하는 기술을 역직렬화(Deserialize)라고 부릅니다.
- 직렬화된 바이트 형태의 데이터를 객체로 변환해서 JVM으로 상주시키는 형태
다형성 (Polymorphism)이란?
하나의 객체를 여러가지 타입으로 해석할 수 있는 기술입니다. 다형성 구현을 위하여 메소드의 이름은 같게 하되, 리턴 형이나 혹은 파라미터의 개수나 타입을 다르게 하여 재정의할 수 있습니다.