✔ Java에 대해 설명하시오.
Java는 객체지향 프로그래밍 언어이다. 따라서 객체지향 언어의 특징인 캡슐화, 상속성, 다형성을 완벽하게 지원한다.
또한 Garbage Collector를 통한 자동 메모리 관리가 가능하다. 덕분에 개발자들은 메모리 관리의 수고를 덜어, 핵심 기능 코딩에 집중할 수 있다.
- 객체지향 프로그래밍 언어
- 캡슐화, 상속성, 다형성의 특징
- Garbage Collector로 자동 메모리 관리 가능
- JVM(자바가상머신)위에서 동작하기 때문에 운영체제에 독립적
- JVM 위에서 동작하기 때문에 실행 속도가 상대적으로 느림
🗝 KEY WORD |
#객체지향 프로그래밍언어 #자동메모리관리 #JVM 위에서 동작 |
✔ JVM의 역할에 대해 설명하시오.
JVM은 스택 기반으로 동작하며, Java와 운영체제 사이에서 중개자 역할을 수행하여 Java가 운영체제에 구애받지 않고 독립적으로 작동하도록 한다. 또한 가비지컬렉션을 통해 자동적인 메모리 관리를 해준다.
🗝 KEY WORD |
#스택 기반의 가상 머신 #메모리 관리 #컴파일된 바이트 코드를 기계어로 변환 |
✔ 오버라이딩과 오버로딩에 대해 설명하시오
오버라이딩(Overriding)은 상위 클래스가 가지고 있는 메서드를 하위 클래스에서 재정의하여 사용하는 기술입니다.
오버로딩(Overloading)은 매개변수의 타입과 개수를 변경하면서 같은 이름의 메서드를 여러 개 사용하는 기술입니다.
오버라이딩(Overriding) | 오버로딩(Overloading) |
부모클래스 기능을 자식클래스에서 재정의 | 같은 이름의 메서드지만 매개변수의 타입/개수가 다르다 |
class AAA {
public void method1() {
System.out.println("AAA : method1...");
}
public void method2() {
System.out.println("AAA : method2...");
}
//overload
public void method3() {
System.out.println("AAA : method3...");
}
}
class BBB extends AAA{
@Override
public void method2() {
System.out.println("BBB : method2...");
}
//overload
public void method3(int a) {
System.out.println("BBB : method3...");
}
}
class CCC extends BBB{
@Override
public void method1() {
System.out.println("CCC : method1...");
}
@Override
public void method2() {
System.out.println("CCC : method2...");
}
//overload
public void method3(int a, int b) {
System.out.println("CCC : method3...");
}
}
public class OverrideTest {
public static void main(String[] args) {
//오버라이드 메서드 호출
CCC c = new CCC();
c.method1(); // 오버라이딩
// 클래스 AAA 기능을 클래스 CCC가 덮어씌우기 때문에 클래스 CCC의 기능으로 실행
c.method2(); // 위와 동일한 방식
c.method3(); // 오버로딩
// method3은 각 클래스마다 매개변수만 다르다 - 매개변수가 없는 형식인 AAA에서 실행
c.method3(1); // 매개변수를 하나 가지는, int a가 있는 BBB에서 실행
c.method3(1, 2); // 매개변수가 두 개 가지는, CCC에서 실행
}
// 출력값
CCC : method1...
CCC : method2...
AAA : method3...
BBB : method3...
CCC : method3...
🗝 KEY WORD |
#오버라이딩은 하위클래스가 재정의 #오버로딩은 매개변수의 타입과 개수만 다르다 |
✔ 자바 메모리 영역에 대해 설명하시오.
자바의 메모리 영역은 크게 Method 영역, Heap 영역, Stack 영역으로 구분되고, 데이터 타입에 따라 할당된다.
- Method Area : 클래스의 모든 정보가 저장 되는 공간이다. 전역변수와 static 변수를 저장한다.
- Heap Area : new 연산자로 생성되는 객체(인스턴스), 배열 등이 Heap 영역에 저장되며, 가비지컬렉션에 의해 메모리가 관리된다.
- Stack Area : 지역변수와 매개변수의 값이 저장되는 공간이며 메서드 호출과 관련이 있기에, 호출이 종료될 시 정보는 Pop 되어 소멸된다.
🗝 KEY WORD |
#Method Area #Stack Area #Heap Area |
✔ 클래스, 객체, 인스턴스의 개념을 설명하시오.
- 클래스(Class) : 객체를 만들어내기 위한 설계도 혹은 틀
- 객체(Object) : 클래스 기반으로 선언된 대상, 클래스의 인스턴스라고도 불림
- 인스턴스(Instance) : 객체에 메모리가 할당되어 실제로 활용되는 실체
public class Animal {
}
public class main {
public static void main(String[] args){
Animal cat; // 객체
cat = new Animal(); // 인스턴스
}
}
🗝 KEY WORD |
#메모리에 할당되면 인스턴스 #선언된 대상은 객체 |
✔ 싱글톤 패턴의 개념과 사용 이유를 설명하시오.
싱글톤 패턴은 static을 활용하여 단 하나의 인스턴스를 생성하며 사용하는 디자인 패턴이다. new 연산자를 이용해 매번 새로운 객체를 만들어 낸다면 불필요한 메모리 차지가 생기기에 메모리 절약과 성능 향상을 위해 사용한다.
그렇다면 단점은?
- 서로 독립적이지 못한 싱글톤 패턴은 TDD(테스트 주도 개발)에서 독립적인 인스턴스를 만들기가 어렵다.
- 모듈 간의 결합이 강해진다.
🗝 KEY WORD |
# static # 단 하나의 인스턴스 # 메모리 절약 # 성능 향상 |
✔ 팩토리 패턴(Factory Pattern)의 개념과 사용 이유를 설명하시오.
팩토리 패턴은 객체를 사용하는 코드에서 객체 생성 부분을 떼어내 추상화한 패턴이자 상속 관계에 있는 두 클래스에서 상위 클래스는 중요한 뼈대 역할을 하고, 하위 클래스에서는 객체 생성에 대한 구체적인 역할을 지닌다.
따라서 상위/하위 클래스가 분리가 되므로 더 많은 유연성을 가지게 된다. 또한 코드를 리팩터링하더라도 한 곳만 고칠 수 있게 되니 유지 보수성이 증가한다.
🗝 KEY WORD |
#추상화 # 상위/하위클래스의 분리 # 유연성 # 유지보수성 |
✔ 생성자(Constructor)에 대해 설명하시오.
생성자는 클래스와 같은 이름의 메서드로, 객체가 생성될 때 호출되는 메서드다. 생성자는 파라미터를 다르게 하여 오버로딩할 수 있다.
🗝 KEY WORD |
#클래스와 같은 이름의 메서드 #오버로딩 |
✔ 상속과 구현의 차이에 대해 설명하시오.
상속(extends) | 구현(implements) |
자식클래스가 부모클래스의 메서드 등을 상속 받아 사용 | 부모 인터페이스를 자식 클래스에서 재정의 |
재사용성, 중복성의 최소화 | 반드시 부모 클래스의 매서드를 재정의하여 구현해야 함 |
일반클래스, 추상 클래스 기반으로 구현 | 인터페이스 기반으로 구현 |
🗝 KEY WORD |
#상속 # 재정의 |
✔ Static 에 대해 설명하시오.
static 키워드를 사용한 변수나 메서드는 클래스가 메모리에 올라갈 때 자동으로 생성되며, 클래스 로딩이 끝나면 바로 사용할 수 있다. 즉, 인스턴스 생성 없이 바로 사용 가능하다.
public class Car {
//필드
private static int count; //정적변수 선언
//생성자
public Car() { //private 관한 초기화
count++;
}
//메서드 (=정적메서드)
public static int getCount() {
return count;
}
}
🗝 KEY WORD |
#객체(인스턴스) 생성 없이 클래스로 참조 가능 |
✔ 상속(Inheritance)에 대해 설명하시오.
상속은 부모 클래스에서 기존에 만들어 놓은 클래스의 기능을 자식클래스가 그대로 물려받아 사용하는 것이다. 상속받고자 하는 자식 클래스명 옆에 extends 키워드를 붙이고 상속할 부모 클래스명을 적음으로써 상속받을 수 있다.
자식 클래스 내에서 부모 클래스의 생성자를 호출하는 방식으로 super 키워드를 사용한다. 다만, 주의할 점은 부모 클래스의 접근제어자가 private일 경우에 상속이 불가능하다. 따라서 사용하기 위해서는 필드나 메서드의 접근제어자를 public 이나 protected로 변경할 필요가 있다.
class Person {
public Person(){
System.out.println("Parent");
}
}
class Student extends Person{
public Student(){
super();
System.out.println("Child");
}
}
public class Test {
public static void main(Stirng[] args){
Student st = new Student();
}
}
// 출력 결과
Parent
Child
🗝 KEY WORD |
#부모 -> 자식 #extends #super |
✔ Java의 List, Set, Map에 대해 설명하시오.
List | Set | Map |
데이터를 순차적으로 저장 | 순서없이 Key로만 데이터 저장 | 순서없이 Key, Value 로 데이터 저장 |
데이터 중복 허용 | Key의 중복을 허용 하지 않음 | Key의 중복 허용 X, Value 중복 허용 O |
데이터로 null 허용 | Key로 null 허용 X | Key로 null 허용 X |
🗝 KEY WORD |
#List 순차적 #Set Key # Map Key-value |
✔ 추상클래스와 인터페이스에 대해 설명하시오.
추상클래스 | 인터페이스 |
단일 상속만 가능 | 다중 구현 가능 |
모든 접근 제어자 사용 가능 | public 접근 제어자만 사용 가능 |
변수와 상수 선언 가능 | 상수만 선언 가능 |
추상 메서드와 일반 메서드를 선언 가능 | 추상 메서드만 선언 가능 |
🗝 KEY WORD |
#추상클래스 단일/모든접근/변수상수 #인터페이스 다중/public/상수 |
✔ MVC패턴에 대해 설명하시오.
MVC 패턴이란, Model / View / Controller로 이루어진 디자인 패턴이다. 애플리케이션의 구성 요소를 세 가지 역할로 구분하여 확장성이 용이하다. 대표적인 프레임워크로는 스프링(Spring)이 있다.
Model | View | Controller |
애플리케이션의 데이터. 예) 데이터베이스, 상수, 변수 |
사용자 인터페이스 요소 예 ) checkbox, textarea |
이벤트 등 비즈니스 로직 담당 |
사용자가 볼 수 있는 화면 |
🗝 KEY WORD |
#동기는 요청 결과 동시 #비동기는 요청 결과 동시 X #여러 개의 요청 처리 가능 |
✔ Error와 Exception에 대해 설명하시오.
Error는 실행 중 일어날 수 있는 치명적인 오류를 말한다. 컴파일 시점에 체크할 수 없고, 오류가 발생하면 프로그램은 비정상 종료된다.
Exception은 Error보다 비교적 경미한 오류이며, try~catch 를 이용해 프로그램의 비정상 종료를 막을 수 있다.
🗝 KEY WORD |
#Error 치명적 #Exception try~catch |
<참고자료>
https://helloworld-88.tistory.com/3
https://dev-coco.tistory.com/153
https://mangkyu.tistory.com/94
https://backendcode.tistory.com/161
https://coding-factory.tistory.com/865
부족한 내용에 대한 조언은 언제나 환영입니다 :)
'취업일지' 카테고리의 다른 글
[CS]기술 면접 질문 리스트 - 데이터베이스 (1) | 2024.01.06 |
---|---|
[CS]기술 면접 질문 리스트 - 운영체제 (3) | 2023.12.27 |
[CS]기술 면접 질문 리스트 - 네트워크 (1) | 2023.12.22 |
[CS]기술 면접 질문 리스트 - 프로그래밍 공통/기타 (2) | 2023.12.19 |