컬렉션 프레임워크란?
- 데이터를 효율적으로 저장하고, 관리하고 처리하기 위한 자료구조와 알고리즘을 표준화한 라이브러리의 모음.
- 주요 인터페이스로는 List, Set, Map 등이 있으며 각각의 인터페이스는 다양한 구현체 (ArrayList, HashSet, HashMap 등)를 통해 사용 가능함.
제네릭이란?
- 제네릭은 자바의 타입 안정성을 맡고 있습니다.
- 컴파일 과정에서 타입체크를 해주는 기능으로 객체의 타입을 컴파일 시에 체크하기 때문에 객체의 타입 안정성을 높이고 형변환의 번거로움을 줄여줌.
- (List
처럼 사용하면 해당 리스트에는 오직 String만 담을 수 있어 명확하고 안전한 코드 작성이 가능) - (주로 컬렉션 프레임워크에서 많이 사용되며, 재사용성과 가독성을 동시에 높일 수 있는 장점이 있음)
- 원시 타입의 타입 보장
- 제네릭은 객체 타입에서만 사용할 수 있고, int, double 같은 원시타입에는 직접 사용할 수 없음.
- 자바는 박싱 개념을 도입해 int → Integer, double → Double 처럼 참조형으로 자동 변환해서 사용하게 함.
- (성능 문제가 있을 수 있지만, 오토박싱/언박싱 기능 덕분에 신경쓰지 않아도 됨.)
- 원시 타입의 타입 보장
오토박싱 / 언박싱
Integer a = 10; // int → Integer (오토박싱) int b = a; // Integer → int (언박싱)- 오토박싱은 원시타입을 자동으로 래퍼 클래스로 변환해주는 기능
- 언박싱은 래퍼 클래스를 원시타입으로 자동 변환해주는 기능
애노테이션
- 인터페이스를 기반으로 한 문법으로 주석처럼 코드에 달아 클래스에 특별한 의미를 부여하거나 기능을 주입할 수 있음.
- built-in-annotation은 상속받아서 메서드를 오버라이드 할 때 나타나는 @Override 애노테이션이 그 대표적인 예입니다.
- 메타 에너테이션은 애노테이션을 선언할 때 사용하는 애노테이션
- @Retention(애노테이션 유지 범위 지정)
- @Inherit(애노테이션을 하위 클래스까지 전달 여부 지정)
- @Target(해당 애노테이션을 어디에 사용할건지 결정)
클래스, 객체
- 클래스는 객체를 정의하는 틀 또는 설계도와 같은 의미로 사용됨.
- 클래스 안에는 객체가 가질 속성(변수)과 동작(메서드)이 정의되어 있음.
- 객체는 클래스를 기반으로 만들어진 구체적인 실체이며, 클래스의 인스턴스라고도 부름.
- 객체는 상태(필드)와 행동(메서드)를 가지며, 실제 메모리에 올라가서 동작하는 실체임.
정적(static)?
- static은 자바에서 클래스 단위로 관리되는 멤버를 정의할 때 사용하는 키워드입니다.
- static 변수나 메서드는 클래스가 JVM에 로드될 때 Metaspace(Method Area)에 한 번만 적재되며, 모든 객체가 공유하고, 객체 생성 없이도 접근할 수 있다는 특징이 있습니다.
- 또한 Heap 영역이 아닌 GC 관리 영역 밖에 존재하므로, 프로그램이 종료될 때까지 메모리에 유지됩니다.
접근 제어자의 종류와 이에 대한 설명
- private, default, protected, public이 있습니다.
- private: 해당 클래스 내에서만 접근 가능
- default: 해당 패키지에서 접근 가능
- protected: 상속한 클래스에서 접근 가능
- public: 전체 영역에서 접근 가능
객체지향이란?
- 객체지향은 현실 세계의 사물(객체)을 소프트웨어 구조에 반영하여, 유지보수성과 확장성을 높이는 설계 방식입니다.
- 객체 간의 역할과 책임을 분리하고, 서로 간의 의존성을 최소화함으로써 독립적인 개발과 배포가 가능해집니다.
객체지향 5원칙
- SRP (단일 책임 원칙) : 클래스는 하나의 책임만 가져야 한다.
- OCP (개방-폐쇄 원칙) : 확장에는 열려 있고, 변경에는 닫혀 있어야 한다.
- LSP (리스코프 치환 원칙) : 자식 클래스는 부모 클래스를 대체할 수 있어야 한다.
- ISP (인터페이스 분리 원칙) : 클라이언트가 자신이 사용하지 않는 인터페이스에 의존하지 않아야 한다.
- DIP (의존성 역전 원칙) : 고수준 모듈이 저수준 모듈에 의존하면 안 되고, 둘 다 추상화에 의존해야 한다.
강한결합, 느슨한 결합
- 결합도는 의존성의 정도를 나타내며 한 모듈이 다른 모듈에 얼마나 많이 의존하고 있는지를 나타내는 척도입니다.
- 어떤 모듈이 다른 모듈에 너무 자세한 부분(구현 세부사항)까지 알고 있을 경우에 강한 결합도를 가진다고 합니다.
- 어떤 모듈이 다른 모듈에 대해 필요한 정보(인터페이스로 추상화된 고수준 정책)만 알고 있다면 두 모듈은 낮은 결합도를 가진다고 합니다.
- (따라서, 좋은 설계는 느슨한 결합을 지향하며, 이를 위해 추상화, 인터페이스, 의존성 주입(DI) 등을 적극적으로 활용합니다.)
결합도, 응집도
- 결합도는 한 모듈이 다른 모듈에 얼마나 의존하고 있는지를 나타내며 낮을수록 각 모듈이 독립적으로 변경되거나 재사용되기 쉬워집니다.
- 응집도는 하나의 모듈이나 클래스 내부 구성 요소들이 얼마나 밀접하게 관련된 책임을 가지는가를 의미합니다. 높을수록 해당 클래스가 하나의 책임에 집중하고 잘 정의된 역할을 수행하게 됩니다.
'CS 및 면접복기' 카테고리의 다른 글
| 20250807 - ALL (3) | 2025.08.07 |
|---|---|
| 20250806 - ALL (3) | 2025.08.06 |
| 20250805 - DB(1) (4) | 2025.08.05 |
| 20250803 - Java (1) (1) | 2025.08.03 |
| 20250802 (7) | 2025.08.02 |