티스토리 뷰
- 자바
객체지향 프로그래밍 언어.
JVM 위에서 동작하기 때문에 운영체제에 독립적이지만 실행 속도가 상대적으로 느리다.
가비지 콜렉션을 통해 메모리 관리가 간편하다.
- 객체지향이란 (캡상추다)
현실세계의 사물들을 객체라고 보고, 객체를 중심으로 프로그래밍하는 것.
코드의 재사용성이 높고 유지보수 용이
- 캡슐화
정보은닉. 접근제어자에 따라 접근할수있는 대상을 결정 - 상속
상위 클래스의 변수와 메서드를 하위 클래스에서 재사용하고, 더 확장할 수 있는것. - 추상화
클래스를 통해 객체의 공통적인 속성과 기능을 추출하여 정의하는 것. - 다형성
오버라이딩과 오버로딩을 통해 하나의 객체가 여러 타입을 가지는 것.
- 객체지향 설계 원칙 (SOLID)
- SRP(Single Responsibility Principle) : 단일 책임 원칙
클래스는 단 하나의 책임을 가져야 한다.
클래스를 변경하는 이유는 단 하나의 이유이어야 한다. - OCP(Open-Closed Principle) : 개방-폐쇄 원칙
확장에 열려 있고 변경에 닫혀 있어야 한다. - LSP(Liskov Substitution Principle) : 리스코프 치환 원칙
상위 타입의 객체를 하위 타입의 객체로 치환했을 경우
상위 타입을 사용하는 프로그램이 정상적으로 동작해야 한다. - ISP(Interface Segregation Principle) : 인터페이스 분리 원칙
인터페이스는 그 인터페이스를 사용하는 클라이언트를 기준으로 분리해야 한다. - DIP(Dependency Inversion Principle) : 의존 역전 원칙
고수준 모듈은 저수준 모듈의 구현에 의존해서는 안된다.
- primitive type vs wrapper class
primitive type은 변수에 값 자체를 저장하고,
wrapper class는 new 키워드를 이용해 생성하여 객체가 있는 주소를 저장한다.
primitive type는 null값을 가지지 못하고, wrapper class는 null 값을 가질 수 있다. (기본값)
* boxing : primitive type -> wrapper class
unboxing : wrapper class -> primitive type
wrapper class 사용 이유 : 형변환, 비교 연산을 하기 위해
- reference type
실제 값의 주소를 저장. 힙 영역에 저장된다.
배열, 열거(enum), 클래스, 인터페이스가 해당.
- 프리미티브 타입 종류
정수형: byte1 short2 int4 long8
실수형: float4 double8
문자형: char2
논리형: boolean1
- 컬렉션 프레임워크
다수의 데이터를 쉽고 효과적으로 관리할 수 있는 클래스의 집합을 의미.
List, Set, Map 인터페이스를 기준으로 여러 클래스 존재하며 Stack, Queue 클래스도 존재함.
- array vs arraylist
array: 크기를 한번 정하면 변경할 수 없다. 초기화시 메모리에 할당되어 비교적 속도가 빠르다.
arraylist: 크기가 가변적이다. 데이터를 추가하거나 삭제시 메모리를 재할당하기 때문에 속도가 느리다.
- 추상 클래스 vs 인터페이스
- 추상 클래스
abstract 키워드를 사용하여 생성, 다중 상속이 불가능
추상 메소드가 하나 이상 포함되거나 abstract로 정의된 경우 - 인터페이스
mplements를 사용해 상속받고 다중 상속이 가능
모든 메소드가 추상 메소드 - 공통점
추상 메소드를 가져야 한다.
추상 클래스나 인터페이스를 상속한 클래스는 추상 메소드를 반드시 구현해야 한다.
new 키워드로 객체를 생성할 수 없다.
- hashtable vs hashmap
HashTable : thread-safe(동기화)하기 때문에 멀티 스레드 환경에 적합하다.
HashMap : 단일 스레드 환경에 적합하다. 보조 해시함수를 사용해 해시 충돌이 발생할 가능성이 적다.
* thread-safe?
다중 스레드 환경에서 어떤 객체, 메소드 등에 여러 스레드가 동시에 접근해도 프로그램 실행에 문제가 없는 것.
- 제네릭
데이터 타입을 일반화한다는 의미로, 클래스나 메소드에서 사용할 데이터 타입을 컴파일 시에 미리 지정하는 것.
(사용자가 지정)
잘못된 타입이 들어오는 것을 컴파일 단계에서 방지.
* 컴파일 타임 : 실행하기 위해 코드를 기계어로 변경하는 것
* 런타임 : 이러한 프로그램이 실제 실행되는 것
- 자바 메모리 영역
- 메소드 영역: JVM이 동작해서 클래스가 로딩될 때 생성. 전역변수와 static 변수를 저장.
- 스택 영역: 컴파일시 할당. 지역변수와 매개변수가 저장. 메소드가 호출될 때 메모리에 할당되고 종료되면 메모리가 해제된다.
- 힙 영역: 런타임시 할당. new 키워드로 생성되는 객체, 배열 등이 저장.
- 클래스 vs 객체
클래스는 객체를 만들어내기 위한 틀.
객체는 클래스를 기반으로 생성되어 자신의 고유한 주소와 필드, 메소드를 가진다.
- 생성자
클래스와 같은 이름의 메소드. 객체가 생성될 때 호출됨
- 싱크로나이즈드
다중 스레드 환경에서 현재 데이터를 사용하고 있는 스레드를 제외한 나머지 스레드들은 해당 데이터에 접근할 수 없게 동기화하는 것.
데이터의 thread-safe를 보장.
- jvm
자바 프로그램 실행환경을 만들어주는 소프트웨어.
스택 기반으로 동작하며 자바 바이트 코드를 os에 맞게 해석한다.
가비지 컬렉션을 통해 자동적인 메모리 관리를 해준다.
- 가비지 컬렉션
- JVM의 메모리 관리 기법 중 하나.
- 동적으로 할당됐던 메모리 영역 중에서 더이상 필요하지 않은 메모리 영역을 회수하여 관리.
- JVM이 애플리케이션의 실행을 잠시 멈추고, GC를 실행하는 스레드를 제외한 모든 스레드들의 작업을 중단한 후 gc 실행 (-> stop the world)
- young 영역에 대한 miner gc와 old 영역에 대한 major gc로 구분.
- 전역/지역 변수
전역 변수: 메소드 밖에 선언하여 어느 위치에서든 사용 가능.
지역 변수: 특정 블록 {} 안에 생성되어 그 블록 안에서만 사용가능.
- static
static 키워드를 사용한 변수나 메소드는 클래스가 메모리에 올라갈 때자동으로 생성된다.
객체 생성없이 바로 사용이 가능하다.
모든 객체가 메모리를 공유한다.
공통으로 사용하는 데이터를 관리할 때 사용.
- string vs stringbuffer vs stringbuilder
- string: immutable. new 키워드로 문자열이 생성되면 그 메모리 공간이 변하지 않음.
""로 문자열 생성 시 heap 안의 string pool에 저장. new String()으로 생성시 heap 메모리 영역. - stringbuffer, stringbuilder: mutable. 객체를 한번 생성하면 메모리의 값을 변경시켜 문자열을 변경함.
- stringbuffer는 멀티스레드 환경에서 싱크로나이즈 키워드가 가능함. builder는 동기화 지원 x
- 오버로딩: 한 클래스 내에 메소드 이름이 같고 매개변수의 개수나 타입이 다른 메소드를 여러개 정의하는 것.
매개변수의 개수,타입이 갖고 리턴타입만 다르면 오버로딩 불가능. - 오버라이딩: 부모 클래스로부터 상속받은 메소드를 자식 클래스에서 재정의하는 것.
메소드 이름, 매개변수, 리턴타입이 모두 같아야 함.
- 접근 제한자
변수, 메소드의 접근 범위를 설정해주기 위한 것.
public : 같은 프로젝트 내 어디서든 접근 가능
protected: 같은 패키지, 다른 패키지의 자식 클래스에서 접근 가능
default: 같은 패키지에서 접근 가능
private: 해당 클래스에서만 접근 가능
https://github.com/JaeYeopHan/Interview_Question_for_Beginner
https://dev-coco.tistory.com/category/%F0%9F%93%8CETC
https://jminc00.tistory.com/13
'etc > 면접' 카테고리의 다른 글
면접 준비 - 데이터베이스 (0) | 2023.03.11 |
---|---|
면접 준비 - 스프링, 기타 (0) | 2023.03.11 |
면접 준비 - 네트워크 (0) | 2023.03.11 |
면접 준비 - 운영체제 (0) | 2023.03.10 |
면접 준비 - 자료구조 (0) | 2023.03.10 |