• 컬렉션 프레임워크란?

    • 데이터를 효율적으로 저장하고, 관리하고 처리하기 위한 자료구조와 알고리즘을 표준화한 라이브러리의 모음.
    • 주요 인터페이스로는 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

+ Recent posts