TIL 16 [ 키오스크 과제 5단계 , Java (Enum, 동일성 vs 동등성) ]

2025. 3. 11. 19:12·[내일배움캠프-Sparta]/Spring 6기
반응형

1. 학습내용
14:00 ~ 15:00 자바 문법세션 특강( Enum, 동일성 vs 동등성 , 박성원 튜터님 )

★ 키오스크 과제 5단계 ★

Lv 5. 캡슐화 적용해보기
package com.example.kiosk;

public class Main {
    public static void main(String[] args) {
        // Lv 5. 캡슐화 적용하기
        // Menu 객체 생성하면서 카테고리 이름 설정
        // Menu 클래스 내 있는 List<MenuItem> 에 MenuItem 객체 생성하면서 삽입
        Menu burgers = new Menu("Burgers");
        // 해당 카테고리 내에 있는 목록 추가.
        . . . .  ( 생략 ) . . . .

Main 클래스

package com.example.kiosk;

. . . . ( 생략 ) . . . .

public class Kiosk {
    // 속성 필드 캡슐화 적용
    private List<Menu> menus;
    // 생성자
    . . . . ( 생략 ) . . . .
    // 기능
    . . . . ( 생략 ) . . . .

Kiosk 클래스

package com.example.kiosk;

. . . . ( 생략 ) . . . .

public class Menu {
    // 필드 캡슐화 적용
    private String category;
    private List<MenuItem> menuItems;

    . . . . ( 생략 ) . . . .
    
    // set,get 함수 추가
    public String getCategory() { return category; }

    public List<MenuItem> getMenuItems() { return menuItems; }

    public void setMenuItems(List<MenuItem> menuItems) { this.menuItems = menuItems; }

    public void setCategory(String category) { this.category = category; }
}

Menu 클래스

package com.example.kiosk;

public class MenuItem {

    // 필드 캡슐화 적용
    private String name;
    private int price;
    private String explain;

    . . . . ( 생략 ) . . . . 

    // set,get 함수 추가
    public String getName() { return name; }

    public int getPrice() { return price; }

    public String getExplain() { return explain; }

    public void setName(String name) { this.name = name; }

    public void setPrice(int price) { this.price = price; }

    public void setExplain(String explain) { this.explain = explain; }
}

MenuItem 클래스

4단계에서 하지못한 캡슐화를 이번 단계에 전체적으로 적용하였다.

[트러블 슈팅]

  • 아무런 문제가 없었고, 캡슐화가 주 목적이기 때문에 클래스마다 필드를 private로 선언하게 수정해서 직접 접근하지 못하게 변경하였고, Setter / getter 메소드를 구현해서 데이터를 관리하게 하여 프로그램이 부담없이 잘 작동하였다.

{ 자바 문법 특강 }

Enum ? 서로 연관된 상수들의 집합을 정의하는 특별한 데이터 타입. 기존은 final static 상수를 사용하는 것보다 더 안전하고 가독성이 좋은 방법이다.

  • Enum은 상수들의 집합
  • 내부적으로 final class 처럼 동작.
  • 객체처럼 필드와 메서드를 가질수 있음.
  • switch-case 에서 강력하게 활용 될수 있음.

※ Enum 도 객체 이다.

실제로 Enum은 내부적으로 class로 변환되며, Enum 값들은 싱글톤(Singleton) 객체로 관리된다.

  • 각 Enum 값은 인스턴스임.
  • Enum 값 마다 필드,생성자, 메서드를 가짐 ( class와 동일 )
  • Enum은 new 키워드를 생성할 수 없으며, 내부적으로 자동으로 생성되는 객체임! ★★★★
enum ClothesSize {
    S(70), M(85), L(100), XL(110), XXL(120);

    private int size;

    ClothesSize(int size) { // 생성자
        this.size = size;
    }

    public int getSize() { // 메서드
        return size;
    }
}

public class Main {
    public static void main(String[] args) {
        ClothesSize size = ClothesSize.L;
        System.out.println(size.getSize()); // 100
        ClothesSize size2 = ClothesSize.M;
        System.out.println(size2.getSize()); // 85
    }
}

Enum은 객체처럼 동작하는 클래스 이기 때문에 메서드도 가질수 있다.

enum Direction {
    NORTH {
        @Override
        public void describe() {
            System.out.println("위쪽 방향입니다.");
        }
    },
    SOUTH {
        @Override
        public void describe() {
            System.out.println("아래쪽 방향입니다.");
        }
    };

    public abstract void describe();
}

📌 핵심 개념

  • Enum 값마다 서로 다른 동작을 정의할 수 있다.
  • abstract 메서드를 선언해 각 Enum 값이 구현하도록 만들 수 있다.

Enum은 인터페이스도 구현할 수 있다.

interface Printable {
    void print();
}

enum Level implements Printable {
    LOW {
        public void print() { System.out.println("낮은 레벨"); }
    },
    HIGH {
        public void print() { System.out.println("높은 레벨"); }
    }
}

인터페이스는 직접 implements 키워드를 받는 클래스에 반드시 인터페이스의 메소드를 구현해주어야 한다.

 

※ 동등성 vs 동일성

동등성 (Equality) -  "내용" 이 같은 것

String a = new String("hello");
String b = new String("hello");
// a의 값과 b의 값이 같음.
System.out.println(a.equals(b)); // true

동일성 (Identity) -  "메모리주소" 가 같은 것 

String a = new String("hello");
String b = new String("hello");
// a,b 각각 참조하고 있는 Heap 메모리 주소가 서로 다름.
System.out.println(a == b); // false


2. 내일 학습 할 것: 키오스크 과제 도전1~2단계 , 알고리즘, 계산기과제 피드백보기

반응형

'[내일배움캠프-Sparta] > Spring 6기' 카테고리의 다른 글

TIL 18 [ 키오스크 과제 (도전🔥 2단계) + Java ( 컬렉션, 스트림 ) ]  (0) 2025.03.13
TIL 17 [ 키오스크 과제 (도전🔥 1단계) + Intellij 깃 사용법 ]  (0) 2025.03.12
TIL 15 [ 키오스크 과제(3~4단계) ]  (0) 2025.03.10
TIL 14 [ 키오스크 과제(1~2단계) ]  (0) 2025.03.07
TIL 13 [ Java(동일성 문제, 클래스와 객체, charAt함수) ]  (0) 2025.03.06
'[내일배움캠프-Sparta]/Spring 6기' 카테고리의 다른 글
  • TIL 18 [ 키오스크 과제 (도전🔥 2단계) + Java ( 컬렉션, 스트림 ) ]
  • TIL 17 [ 키오스크 과제 (도전🔥 1단계) + Intellij 깃 사용법 ]
  • TIL 15 [ 키오스크 과제(3~4단계) ]
  • TIL 14 [ 키오스크 과제(1~2단계) ]
dimenshun
dimenshun
한 소년의 개발 일기
    반응형
  • dimenshun
    Dev Life Notes
    dimenshun
  • 전체
    오늘
    어제
    • 분류 전체보기 (268)
      • CS (23)
        • 자료구조 (0)
        • 알고리즘 (0)
        • 컴퓨터 구조 (8)
        • 네트워크 (6)
        • 운영체제 (3)
        • DB ( + SQLD ) (5)
        • SW공학 (1)
      • 프로그래밍 (3)
        • Java (0)
        • Spring (0)
        • HTML,CSS (3)
        • JavaScript (0)
      • 개발 툴 (7)
        • Git(버전관리) (1)
        • Docker (3)
        • AWS (2)
        • JSP (1)
      • 코딩테스트(Algorithm) (125)
        • 백준 (6)
        • 프로그래머스 (119)
      • [내일배움캠프-Sparta] (110)
        • Spring 6기 (106)
        • KPT 회고 (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    SQL
    코딩테스트
    메모리
    백엔드
    배포
    cs
    spring
    컴퓨터구조
    내일배움캠프
    docker
    web
    KPT
    네트워크
    network
    알고리즘
    Testcode
    개발자
    세션
    SQLD
    운영체제
    AWS
    트랜잭션
    It
    db
    웹
    Java
    Python
    CPU
    OS
    Til
  • hELLO· Designed By정상우.v4.10.3
dimenshun
TIL 16 [ 키오스크 과제 5단계 , Java (Enum, 동일성 vs 동등성) ]
상단으로

티스토리툴바