반응형
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 |