들어가면서
- 여러회사들의 인터뷰를 보면서 대표 질문들을 정리하여 개념을 상기시키고자 작성하였음.
- 면접대비 목적과 공부한 내용을 복기하는 것.
OOP
- 객체지향프로그래밍, 인간 중심적 프로그래밍 패러다임이다.
- 현실 세계를 프로그래밍으로 옮겨와 프로그래밍을 하는 것을 말한다.
- 현실 세계의 사물을 객체로 표현하고 그것을 통해 개발하고자 하는 애플리케이션에 필요한 특징을 추출하여 프로그래밍하는 것을 말한다.
- 대표적인 특징인 ‘추상화’, ‘상속’, ‘캡슐화’, '다형성’이 있다.
- 예를 들어 자동차를 만든다면, 자동차는 하나의 객체이며 ‘배기량’, ‘차종’, ‘색상’ 등등 특징이 있고 ‘전진’, ‘후진’, ‘경적’ 등의 기능도 포함된다.
객체 지향적 설계 원칙의 종류
- 단일 책임 원칙: 단 하나의 책임을 가져야 하며 클래스를 변경하는 이유는 단 하나의 이유이어야 한다.
- 객체 간의 관계를 명확히 하여 확장성과 재사용성을 높인다.
- 개방-폐쇄 원칙: 확장이 가능(개방)해야 하며 변경에는 불가능(폐쇄)해야 한다.
- 새로운 기능을 추가할 때 기존 코드는 수정하지 않고 다형성을 이용하여 확장할 수 있도록 한다.
- 리스코프 치환 원칙: 상위 타입의 객체를 하위 타입의 객체로 치환해도 상위 타입을 사용하는 프로그램은 정상적으로 동작해야 한다.
- 인터페이스 분리 원칙: 인터페이스를 사용하는 클라이언트를 기준으로 분리해야 한다.
- 사용자에게 꼭 필요한 메서드로만 구성하고 불필요한 의존성을 제거한다.
- 의존 역전 원칙: 고수준의 모듈은 저수준의 모듈에 의존하면 안된다.
JVM(Java Virtual Machine)
- Method Area(메소드 영역): 클래스 로딩 시 클래스 바이트코드 정보, static 변수, final 상수, 메서드 코드, 클래스 메타데이터 저장
- Heap(힙 영역): new 생성자 객체 인스턴스, 배열 등 동적 생성 데이터 저장, GC 대상
- Stack(스택 영역): 스레드별 개별 존재, 메서드 호출 시 생성되는 프레임 저장, 지역 변수, 매개 변수, 리턴 값, 연산 결과 포함.
- etc(참고)
직렬화(Serialization)
- 자바에서는 입출력 시 스트림(stream)이라는 통로를 이용하여 데이터가 이동한다.
- 그러나 객체는 스트림을 통해 파일에 저장되거나 네트워크로 전송될 수 없다.
- 객체를 스트림을 통해 입출력하려면 치환 작업이 필요하고 이를 '직렬화’라고 한다.
- 반대로 스트림을 통해 직렬화된 객체를 되돌리는 작업을 '역직렬화’라고 한다.
접근제어자
- public, 언제 어디서나 접근이 가능하도록
- protected, 패키지 내에서 혹은 상속받은 클래스(자식)에서 접근이 가능하도록
- default, 패키지 내에서 접근이 가능하도록
- private, 해당 클래스에서만 접근이 가능하도록
인터페이스와 추상
- 인터페이스, 다중 상속이 가능하며 생성자와 일반 변수를 가질 수 없음. 팀원 간 협업 시 결과를 예측하고 작업이 가능해짐.(구현 객체의 동일성을 보장하기 때문에)
- 추상클래스, 다중 상속이 불가능하고 추상 메서드 1개 이상 필수로 존재해야 하며 일반 변수와 일반 메서드를 사용할 수 있음. 메서드의 부분 구현이 가능함.
1 | abstract class Animal { |
try-with-resources
- 자동으로 자원을 해제해주는 기능(JDK 7 after)
- AutoCloseable 구현하였다면 try 구문이 종료될 때 close() 메서드를 자동으로 호출한다.
Synchronized
- 함수, 블록을 만들어 사용함.
Collection Framework
- 다수의 데이터를 쉽고 효과적으로 처리할 수 있는 표준화된 방법을 제공하는 클래스의 집합이다.
- 데이터를 저장하는 자료구조에 따라 주요 인터페이스를 정의하고 있음.