# TIL - 2026.08.18

ssls·2026년 8월 18일

📌 오늘 학습한 주제

  • Java 열거형(enum)의 정의 및 Switch 표현식과 동등 비교(==) 활용 (EnumApp.java)
  • 추상 클래스(abstract class)와 인터페이스(interface)의 다중 구현 구조 (Animal.java, Flyer.java, SuperMan.java)
  • 함수형 인터페이스(@FunctionalInterface) 개념 및 표준 함수형 인터페이스 분류 (InspireFunction.java)

💡 오늘 배운 것 — 나만의 언어로

① 오늘의 목표

  • 열거형(Enum)을 통한 안전한 상수 관리 기법을 익히고, 추상 클래스와 인터페이스를 결합한 객체지향 설계 및 람다식을 위한 함수형 인터페이스의 기본 개념 정립하기

② 학습할 내용

  • 열거형(Enum) 활용 (EnumApp.java): 고유 상수를 정의하는 Flag Enum을 활용해 switch-case 분기 및 == 연산자로 타입 안정성 높은 조건 처리를 구현했다.
  • 추상화 및 인터페이스 다중 구현 (Animal.java, Flyer.java, SuperMan.java): 일반 메소드를 가질 수 있는 추상 클래스 Animal을 상속(extends)받고, 비행 동작을 규격화한 Flyer 인터페이스를 구현(implements)하는 다중 구조를 실습했다.
  • 함수형 인터페이스 (InspireFunction.java): 람다식 작성을 위해 단 하나의 추상 메소드만 갖는 @FunctionalInterface의 정의와 표준 함수형 인터페이스(Supplier, Consumer, Function, Predicate)의 분류 및 특징을 파악했다.

💻 오늘 핵심 코드

1. Enum 활용 및 조건 분기 (EnumApp.java)

import features.oop.util.Flag;

public class EnumApp {
    public static void main(String[] args) {
        Flag flag = Flag.STUDENT;
        System.out.println(flag); 
        System.out.println(flag.getFlag()); 
        
        // switch 람다식 분기
        switch (flag) {
            case STUDENT -> System.out.println("학생");
            case TEACHER -> System.out.println("강사");
            case MANAGER -> System.out.println("매니저");
        }

        // Enum 동등 비교 (==)
        if (flag == Flag.STUDENT) {
            System.out.println("학생");
        } 
    }
}

2. 추상 클래스 상속과 인터페이스 구현 (SuperMan.java)

package features.oop.abstraction;

// Animal 클래스를 상속받고 Flyer 인터페이스를 구현
public class SuperMan extends Animal implements Flyer {

    @Override
    public void fly() {
        System.out.println("하늘을 날아갑니다.");
    }

    @Override
    public void takeOff() {
        System.out.println("이륙합니다.");
    }

    @Override
    public void landing() {
        System.out.println("착륙합니다.");
    }
}

3. 함수형 인터페이스 정의 (InspireFunction.java)

package features.lambda;

/*
함수형 인터페이스
- 단 하나의 추상 메소드만 선언된 인터페이스 (람다식 타겟)
- Supplier  : 매개변수 X, 반환타입 O
- Consumer  : 매개변수 O, 반환타입 X
- Function  : 매개변수 O, 반환타입 O
- Predicate : 매개변수 O, 반환타입 Boolean
*/
@FunctionalInterface
public interface InspireFunction {
    public int max(int x, int y);
}

🛠️ 실습 / 결과물 & 참고 자료

③ 실습 / 결과물

  • 강의 실습코드: EnumApp.java, Animal.java, Flyer.java, SuperMan.java, InspireFunction.java 연동을 통해 Enum 조건 처리, 인터페이스 표준 규격 구현, 함수형 인터페이스 설계를 완료함.

④ 참고 자료

  • Oracle Java Documentation: Java Enums & Abstract Classes vs Interfaces
  • Java Functional Interfaces: Java SE FunctionalInterface Specification

🔍 문제와 해결

  • 막힌 부분: 여러 인터페이스와 상속 관계가 얽힐 때 단일 상속(extends)의 한계와 인터페이스 다중 구현(implements)의 역할 분담 기준 점검.
  • 해결 방법: 공통 속성/기본 구현은 추상 클래스(Animal)로 정의하고, 특정 행위(날기 등)에 대한 표준 규격은 인터페이스(Flyer)로 분리하여 유연한 클래스 구조를 설계함.

🎯 다음에 할 일

  • InspireFunction 및 Java 표준 함수형 인터페이스를 활용한 람다 표현식(Lambda Expression) 작성해보기
  • Java Stream API와 람다식을 결합하여 Collection 데이터 필터링/매핑 실습하기
profile
성장중

0개의 댓글