목록CS 지식/면접준비 (78)
개발놀이터
Q. String, StringBuilder, StringBuffer에 대해서 설명해주세요 A. String은 불변입니다. StringBuilder와 StringBuffer는 이런 String의 특징때문에 사용하는 가변타입라고 볼 수 있습니다. StringBuilder와 StringBuffer는 Thread-safe 여부의 차이가 있습니다. StringBuilder는 Thread-safe 하지 않습니다. 따라서 Multi-Thread 환경에서 사용할 때는 String Buffer를 사용합니다.
Q. 원시타입과 참조타입의 차이에 대해 설명해주세요. A. 원시타입은 Java에서 단 8개밖에 존재하지 않는 타입입니다. 나머지는 모두 참조타입이라고 볼 수 있고, 참조 타입은 Object클래스이거나 이를 상속하는 클래스들로 이루어져 있습니다. 원시타입은 항상 값이 존재해야 합니다. 반면 참조타입은 null을 가질 수 있습니다. 그리고 멤버변수가 초기화될 때 원시타입은 기본값을 가지지만, 참조타입은 null을 가지는 차이도 있습니다. https://coding-review.tistory.com/143 원시타입과 참조타입 원시타입 원시타입은 정수, 실수 ,문자, 논리 리터럴등 실제 데이터 값을 저장하는 타입이다. int a = 10; 과 같이 코드를 작성했다면 정수 값이 할당될 수 있는 a라는 이름의 메모..
Q. 동일성(identity)과 동등성(equality)에 대해서 설명해주세요 A. 동일성은 객체의 주소를 비교하는 것이고, 동등성은 객체의 같음을 비교하는 것입니다. 기본적으로 자바에서는 Object 클래스에 정의된 equals() 메소드가 동등성을 비교합니다. 따라서, 개발자는 원한다면 equals() 메소드를 오버라이딩해서 동등성의 판단 기준을 정의해주면 됩니다. https://coding-review.tistory.com/141 동일성(identity)과 동등성(equality) 동일성 동일성은 동일하다는 뜻으로 두 개의 객체가 완전히 같은 경우를 의미한다. 여기서 완전히 같다는 뜻은 두 객체가 사실상 하나의 객체로 봐도 무방하며, 주소 값이 같기 때문에 두 변수 coding-review.tist..
Q. 객체지향의 5대원칙 (SOLID)에 대해서 설명해주세요. A. 객체지향의 5대원칙은 SOLID라고 불리며 각각 SRP, OCP, LSP, ISP, DIP로 이루어져 있습니다. SRP는 단일책임 원칙으로 한 클래스에 하나의 책임만 가져야 한다는 원칙입니다. OCP는 개방-폐쇄 원칙으로 확장에는 열려 있으나 변경에는 닫혀 있어야 한다는 원칙입니다. 이는 다형성을 활용해야 합니다. LSP 리스코프 치환 원칙으로 프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 하는 원칙입니다. 리스코프 치환 원칙에 따르면 상위 타입을 상속해서 재정의 했을 때 프로그램이 깨지지 않아야 합니다. ISP는 인터페이스 분리 원칙으로 클라이언트는 자신이 사용하지 않는 메서드에 의존 관..
Q. 정적 (static) 이란 무엇인가요? A. static은 클래스 변수라고 하고 정적 변수라고도 합니다. static은 클래스로더가 클래스를 로딩해서 메소드 메모리 영역에 적재할 때 클래스별로 관리됩니다. static 키워드를 사용해서 생성된 정적 멤버들은 PermGen이나 Metaspace에 저장되고 저장된 메모리는 모든 객체가 공유하면서 하나의 멤버를 어디서든지 참조할 수 있다는 장점을 가지고 있습니다. 하지만 GC의 관리 영역 밖에 있기 때문에 프로그램 종료시까지 메모리가 할당된 채로 남아있습니다. 따라서 너무 남발하면 시스템 성능에 악영향을 미칠 수 있습니다. 꼬리질문 Q. PermGen이나 Metaspace에 대해 설명해주세요. A. PermGen이나 Metaspace모두 메타정보를 모아두..
Q. 어노테이션에 대해서 설명해주세요. A. 어노테이션은 인터페이스를 기반으로 한 문법으로 주석처럼 코드에 달아 클래스에 특별한 의미를 부여하거나 기능을 주입할 수 있습니다. 더 자세히 물어보면 대답하기 어노테이션의 종류로는 내장어노테이션, 메타어노테이션, 사용자정의 어노테이션이 있습니다. 내장 어노테이션은 자바에서 기본적으로 제공해주는 어노테이션입니다. 메타어노테이션은 어노테이션을 위한 어노테이션으로 어노테이션이 적용될 위치나 어느시점까지 적용될 것인지를 결정합니다. 사용자정의 어노테이션은 메타어노테이션을 이용해 만든 커스텀 어노테이션입니다. https://coding-review.tistory.com/131 어노테이션 어노테이션의 정의 애노테이션은 인터페이스를 기반으로 한 문법으로 주석처럼 코드에 달..
Q. 제네릭에 대해서 설명해주세요. A. 제네릭은 자바의 타입 안전성을 맡고 있습니다. 컴파일 과정에서 타입체크를 해주는 기능으로 객체의 타입을 컴파일 시에 체크하기 때문에 객체의 타입 안전성을 높이고 형변환의 번거로움을 줄여줍니다. https://coding-review.tistory.com/129 제네릭 제네릭 자바에서 제네릭이란 데이터의 타입을 일반화한다는 것을 의미한다. 제네릭은 클래스나 메소드에서 사용할 내부 데이터 타입을 컴파일 시에 미리 지정하는 방법이다. 이렇게 컴파일 시 coding-review.tistory.com
Q. 컬렉션 프레임워크에 대해 설명해주세요. A. 자바 컬렉션은 널리 알려져 있는 자료구조를 바탕으로 객체, 데이터들을 효율적으로 관리할 수 있는 자료구조들이 있는 라이브러리를 컬렉션 프레임워크라고 합니다. List, Set은 컬렉션 인터페이스를 상속받지만 Map 인터페이스는 구조상의 차이라 별도로 정의합니다. https://coding-review.tistory.com/127 컬렉션 프레임워크 (Collection Framework) 컬렉션 프레임워크란? 배열을 사용하다 보면 여러가지 비효율적인 문제가 생긴다. 가장 큰 문제점은 크기가 고정적이라는 것이다. 배열의 크기는 생성할 때 결정되며 그 크기를 넘어가게 되면 coding-review.tistory.com
Q. GC가 무엇이고 필요한 이유는 뭔가요? A. GC는 힙 영역에서 사용하지 않는 객체들을 제거하는 작업을 총칭합니다. 이 객체를 제거하는 작업이 필요한 이유는 자바는 개발자가 메모리를 직접 해제해줄 수 없는 언어이기 때문입니다. 따라서 객체를 사용하고 제거하는 기능이 필요하게 됩니다. Q. GC의 동작방식에 대해 설명해주세요 A. GC의 동작방식은 가장 간단한 Serial GC 방식으로 설명합니다. GC는 Minor GC, Major GC로 구분할 수 있습니다. Minor GC는 young한 영역에서, Major GC는 old한 영역에서 일어난다고 정의합니다. GC를 수행할 때는 GC를 수행하는 스레드 이외의 스레드는 모두 정지합니다. 이를 Stop-the-world라고 합니다. Minor GC는 E..
Q. JVM이 뭔가요? / JVM에 대해서 설명해주세요 A. 자바 가방 머신의 약자로 JVM의 역할은 자바 애플리케이션을 클래스 로더를 통해 읽어 자바 API와 함께 실행하는 것입니다. 메모리 관리를 수행하며 스택 기반의 가상머신입니다. Q. JVM의 구조를 설명해주세요 A1. JVM의 구조는 Class Loader, Execution Engine, Runtime Data Areas, JNI, Native Method Library로 이루어져 있습니다. 이 뒤는 자세하게 듣기를 원하면 대답하기 A1-1. Class Loader는 JVM내로 클래스들을 로드하고 링크를 통해 배치하는 작업을 수행합니다. Execution Engine은 바이트 코드를 실행시키는 역할을 하며, 구성 요소로는 인터프리터, JIT ..