[내일배움캠프 사전캠프] TIL 5일차

맹돌이·2026년 8월 28일

사전캠프

목록 보기
9/11
  1. 오늘 배운 키워드
  • 컬렉션
  • 제네릭
  • 타입소거
  • 람다
  1. 컬렉션
  • ArrayList, HashSet, HashMap등의 인터페이스와 구현체를 제공하는 집합
  • 배열자체는 정적인 특성이 있음 ->크기가 고정되어있음
  • HashSet은 순서를 보장하진 않지만 왜 넣은대로 출력되는걸까?
  • HashMap은 키값 중복이안되니까, 중복 키값을 사용하면 값이 변동될 수 있다
  1. 제네릭
  • 제네릭은 클래스,메서드 등에 사용되는 타입 매개변수
  • 제네릭을 사용하지않고 Object 타입을 사용한다면, 타입을 다운캐스팅해줘야하는 번거로움이 존재한다 =>타입 안정성이 떨어짐!
  • Generic 클래스는 컴파일 시점에 '타입소거'가 발생한다. -> T부분이 전부 Object로 변하게된다 ->따라서 재사용성이 보장된다. 사용자가 생성자를 통해서 어떤 타입을 넣든 바뀔 수 있으니까
  • 필요한 경우 컴파일러가 자동으로 다운캐스팅시켜서 타입 안정성도 보장한다
  • 제네릭 메서드는 메서드 선언부에 타입 매개변수가 선언되어야하며, 클래스의 타입 매개변수와 메서드의 타입 매개변수는 별도로 동작한다
    • 즉, 클래스에 선언된 제네릭 매겨변수와 상관없이 타입소거후에도 다운캐스팅 코드가 들어가지않아서 다양한 데이터타입이 들어갈 수 있게된다.
    • 예시에서 보면, String 제네릭 매개변수로 생성된 strGBox는 String데이터 타입기반으로 타입소거가 발생할거임. 그럼 일반 메서드에서는 String만 사용가능하니까 int형 같은게 들어가면 다운캐스팅 과정에서 에러가 발생
    • 하지만, 제네릭 메서드의 경우, 클래스와 독립적인 매개변수를 가지니까, String 타입 정보가 제네릭 메서드에 영향을 못준다 -> 다운캐싕 코드가 삽입되지않아서 에러가 발생하지않음
  1. 람다
  • 익명 클래스?> -> 별도의 클래스 파일을 만들지 않고, 코드 내에서 일회성으로 정의해서 사용하는 클래스임
  • 람다는 익명 클래스를 더 간결하게 표현하는 문법
  • 추상 메서드를 하나만 선언해야한다 추상 메서드가 여러개면 컴파일러가 어떤 메서드를 사용해야할지 판단할 수 없다.
    => 따라서 자바에서는 함수형 인터페이스 사용을 권한다
    @FunctionalInterface -> 그럼 인터페이스 내에서 추상 메서드를 하나로 강제해버린다
  • 오버라이딩 : 상속할때 봤던것 -> 부모 클래스에서 정의된 메서드를 자식 클래스에서 재정의
  • 오버로딩 : 같은 클래스나 인터페이스 내에서 동일한 이름의 메서드를 사용하는 것, 단 매개변수의 개수나 타입 순서가 달라야함
  • 람다식을 직접 매개변수로 전달하면 코드가 깔끔해진다

0개의 댓글