티스토리 뷰

etc/면접

면접 준비 - 자바

hrniin 2023. 3. 10. 18:23
728x90

- 자바

객체지향 프로그래밍 언어.

JVM 위에서 동작하기 때문에 운영체제에 독립적이지만 실행 속도가 상대적으로 느리다.

가비지 콜렉션을 통해 메모리 관리가 간편하다.

 

 

- 객체지향이란 (캡상추다)

현실세계의 사물들을 객체라고 보고, 객체를 중심으로 프로그래밍하는 것.

코드의 재사용성이 높고 유지보수 용이

  1.  캡슐화
    정보은닉. 접근제어자에 따라 접근할수있는 대상을 결정
  2. 상속
    상위 클래스의 변수와 메서드를 하위 클래스에서 재사용하고, 더 확장할 수 있는것.
  3. 추상화
    클래스를 통해 객체의 공통적인 속성과 기능을 추출하여 정의하는 것.
  4. 다형성
    오버라이딩과 오버로딩을 통해 하나의 객체가 여러 타입을 가지는 것. 

 

 

- 객체지향 설계 원칙 (SOLID)

  1. SRP(Single Responsibility Principle) : 단일 책임 원칙
    클래스는 단 하나의 책임을 가져야 한다.
    클래스를 변경하는 이유는 단 하나의 이유이어야 한다.
  2. OCP(Open-Closed Principle) : 개방-폐쇄 원칙
    확장에 열려 있고 변경에 닫혀 있어야 한다.
  3. LSP(Liskov Substitution Principle) : 리스코프 치환 원칙
    상위 타입의 객체를 하위 타입의 객체로 치환했을 경우
    상위 타입을 사용하는 프로그램이 정상적으로 동작해야 한다.
  4. ISP(Interface Segregation Principle) : 인터페이스 분리 원칙
    인터페이스는 그 인터페이스를 사용하는 클라이언트를 기준으로 분리해야 한다.
  5. 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? 

다중 스레드 환경에서 어떤 객체, 메소드 등에 여러 스레드가 동시에 접근해도 프로그램 실행에 문제가 없는 것.

 

 

- 제네릭

데이터 타입을 일반화한다는 의미로, 클래스나 메소드에서 사용할 데이터 타입을 컴파일 시에 미리 지정하는 것.

(사용자가 지정)

잘못된 타입이 들어오는 것을 컴파일 단계에서 방지.

* 컴파일 타임 : 실행하기 위해 코드를 기계어로 변경하는 것

* 런타임 : 이러한 프로그램이 실제 실행되는 것

 

 

- 자바 메모리 영역

  1. 메소드 영역: JVM이 동작해서 클래스가 로딩될 때 생성. 전역변수와 static 변수를 저장.
  2. 스택 영역: 컴파일시 할당. 지역변수와 매개변수가 저장. 메소드가 호출될 때 메모리에 할당되고 종료되면 메모리가 해제된다. 
  3. 힙 영역: 런타임시 할당. 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

 

- 오버로딩 vs 오버라이딩
  • 오버로딩: 한 클래스 내에 메소드 이름이 같고 매개변수의 개수나 타입이 다른 메소드를 여러개 정의하는 것.
    매개변수의 개수,타입이 갖고 리턴타입만 다르면 오버로딩 불가능.
  • 오버라이딩: 부모 클래스로부터 상속받은 메소드를 자식 클래스에서 재정의하는 것.
    메소드 이름, 매개변수, 리턴타입이 모두 같아야 함.

 

 

- 접근 제한자

변수, 메소드의 접근 범위를 설정해주기 위한 것.

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

 

728x90

'etc > 면접' 카테고리의 다른 글

면접 준비 - 데이터베이스  (0) 2023.03.11
면접 준비 - 스프링, 기타  (0) 2023.03.11
면접 준비 - 네트워크  (0) 2023.03.11
면접 준비 - 운영체제  (0) 2023.03.10
면접 준비 - 자료구조  (0) 2023.03.10
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함