728x90
반응형

2025/10 27

[내배캠] 한달 회고

벌써 다시 개발을 시작한지 한달이 흘렀다. 이 소중한 시간을 어떻게 보냈는지 되돌아보려고 한다.들어가기이번 달은 본격적으로 Java 개발자를 목표로 공부를 시작한 첫 달이었다. ‘객체지향’이라는 말이 어렵게만 느껴졌지만, 직접 코드를 써보면서 조금씩 감이 오기 시작했다. 자바 기간 주요 목표는 기본 문법과 컬렉션 등, 그리고 객체 설계 감각을 익히는 것이었다.한달 동안의 학습은 커리큘럼 강의와 자바 문법은 프로그래머스 문제들로 익혀갔다.어려웠던 점 & 해결과정건강상의 이유로 개발을 그만둔지 너무 오래된 상태였어서 다시 기본으로 돌아가는 것 자체가 힘들고 어려웠다. 그전에 이만큼 했으니까 더 잘해야 할텐데 라던지 더많이해야할텐데 같은 내 현실을 직시하고 기본기를 다지는 그 시작부터 어려웠다.그래서 한달..

Dev./Spring 2025.10.31

[Git] README 파일에 이미지 올리기

README.md에 클래스 다이어그램을 올리려고 했는데 도저히 마크다운으로는..할게많다. 그래서 이미지 업로드 방법을 찾아보게되었다.issues 클릭 후 New issue를 눌러 이슈생성한 후 원하는 이미지를 넣는다.깃허브는 이슈나 PR에 이미지를 드래그 해서 업로드 하면 다음과 같이 HTML태그 형태로 변환한다. README 파일에 넣기 위해서는 마크다운 형태가 필요한데 다음과 같은 형태로 수정하면 된다.![Kiosk UML Diagram](https://github.com/user-attachments/assets/958ae24f-e7f4-47ae-afbc-fa7735fc73c6)[ ] : 이미지의 대체 텍스트(alt text)( ) : src의 주소이후 README 파일에 해당 코드를 복사해 넣으면..

Dev./Git 2025.10.30

[Java] 제네릭 활용

제네릭(Generics) 제네릭은 클래스, 메서드, 인터페이스에서 타입을 파라미터로 사용할 수 있게 해주는 기능타입 안정성(type-safety) 제공 + 코드 재사용성을 높임문법class Box { private T value; public void set(T value) { this.value = value; } public T get() { return value; }} 는 타입 매개변수(Type Parameter)T 자리에 실제 타입이 들어감제네릭과 Map/CollectionMap 구조에서 Key와 Value를 일반화 가능K와 V를 제네릭 타입으로 선언하면 다른 타입도 재사용 가능Map map = new HashMap();직접 활용해보기Car..

Dev./Java 2025.10.30

[Error] 자바에서 객체의 동등성과 동일성 문제

상황 요약Cart 클래스에서 Map 구조로 장바구니 관리.MenuItem은 이름(name)과 가격(price)을 가진 단순한 객체.같은 메뉴 이름을 여러 번 담을 때 수량이 합쳐져야 하는데, 서로 다른 MenuItem 인스턴스로 인식되어 중복 저장되는 문제가 발생할 수 있음.MenuItem m1 = new MenuItem("Americano", 2000);MenuItem m2 = new MenuItem("Americano", 2000);cart.addCartItem(m1, 1);cart.addCartItem(m2, 1); // ❌ 중복 추가됨 원인 분석자바에서 HashMap은 Key를 비교할 때 동일성(==)이 아니라 동등성(equals)을 사용하지만 다음과 같은 두 단계가 필요하다hashCode() →..

Dev./Error. 2025.10.29

[Error] 키오스크 트러블 슈팅 3 - 장바구니 구조 설계

[Error] 키오스크 트러블 슈팅 1 - 상태 패턴enum 상수과 switch문으로 관리하던 상태에서 상태 패턴 적용 해보는 것도 괜찮을 것 같다고 하셔서 검색 후 내 코드에 적용해 보았다. 기존에 키오스크 실질적인 기능을 담당하는 start() 메소드가devz0.tistory.com [Error] 키오스크 트러블 슈팅 2 -책임 분리이전 글에서 이어지는 내용 [Error] 키오스크 트러블 슈팅 1enum 상수과 switch문으로 관리하던 상태에서 상태 패턴 적용 해보는 것도 괜찮을 것 같다고 하셔서 검색 후 내 코드에 적용해 보았다. 기devz0.tistory.com오래되긴 했지만 API 만들어본 경험이 있어서 과제 로직 구현 자체는 어렵지 않았다. 객체 지향 적인 코드 흐름 문제 제외하고 가장 생..

Dev./Error. 2025.10.28

[Error] 키오스크 트러블 슈팅 2 -책임 분리

이전 글에서 이어지는 내용 [Error] 키오스크 트러블 슈팅 1enum 상수과 switch문으로 관리하던 상태에서 상태 패턴 적용 해보는 것도 괜찮을 것 같다고 하셔서 검색 후 내 코드에 적용해 보았다. 기존에 키오스크 실질적인 기능을 담당하는 start() 메소드가devz0.tistory.com키오스크 프로그램을 작성하면서 상태패턴을 도입했다.Kiosk 클래스가 State를 관리하고, 각 상태(START, MAIN_MENU, SUB_MENU, CART, ORDER)는 사용자의 입력에 따라 다음 상태로 전이된다.초기 설계에서는 Kiosk 내부에서 상태 전이(currentState = State.MAIN_MENU)를 직접 수행했지만,점차 책임 분리의 중요성을 알게되며 로직을 수정하다 State와 Kios..

Dev./Error. 2025.10.27

[Error] 키오스크 트러블 슈팅 1 - 상태 패턴

enum 상수과 switch문으로 관리하던 상태에서 상태 패턴 적용 해보는 것도 괜찮을 것 같다고 하셔서 검색 후 내 코드에 적용해 보았다. 기존에 키오스크 실질적인 기능을 담당하는 start() 메소드가 굉장히 길었는데 그 부분은 간략하게 생략되었지만 고려해봐야할 몇가지 문제가 생겼다. 그 과정을 정리해보려고 한다.목표기존 enum + switch 구조에서 상태 패턴(State Pattern)을 적용하여 Kiosk 클래스의 start 메소드 단순화 및 코드 재사용성 향상을 시도상태 패턴 적용 후 장점 start() 메소드가 간단해지고, 상태 전환 로직이 상태 객체로 분리됨.상태별 클래스(StartState, MainMenuState, ...)를 독립적으로 관리 가능 → 재사용성, 확장성 향상.새로운 ..

Dev./Error. 2025.10.25

[Java] 상태 패턴 (State Pattern)

상태 패턴이란객체가 상태에 따라 다른 행동을 해야 할 때 사용하는 디자인 패턴상태를 객체로 캡슐화해서 상태 전환과 행동을 독립적으로 관리조건문 (if / switch)을 최소화할 수 있음객체가 여러 상태를 갖고있고 상태별로 행동이 다를때나, 상태가 자주바뀌고 상태별 로직이 길어서 조건문이 지저분할 때도 사용가능구성 요소구성 요소역할Context상태를 가진 객체State Interface상태 인터페이스/추상 클래스ConcreteState각 상태 구현장점조건문 최소화 → 코드가 깔끔상태별 행동 캡슐화 → 유지보수 용이새로운 상태 추가 용이단점상태 클래스가 많아질 수 있음 → 관리 필요상태 전환 로직이 복잡하면 Context가 상태를 지나치게 알게 됨적용간단한 기능이라 기본적인 상태패턴 규칙처럼 클래스로 나누..

Dev./Java 2025.10.24

[Java] List, 객체를 value로 활용하기 (객체 중첩)

List도 하나의 value로 취급 할 수 있다. List를 value로 사용하면 하나의 엔티티가 여러 데이터를 갖는 복합 구조를 쉽게 표현 할 수 있다.예시class Menu { private String name; private List menuItems; // List를 값으로 사용}List coffeeItems = new ArrayList();coffeeItems.add(new MenuItem("아메리카노", 4500));coffeeItems.add(new MenuItem("카페 라떼", 5500));Menu coffeeMenu = new Menu("Coffee", coffeeItems); Menu nonCoffeeMenu = new Menu("Non-Coffee", coffeeItems); ..

Dev./Java 2025.10.23

[Java] Map, 객체를 value로 활용하기 (객체 중첩)

Mapkey, value의 쌍으로 데이터를 저장하는 자료구조Map map = new HashMap();map.put("name", "철수");map.put("city", "서울");System.out.println(map.get("name")); // 철수System.out.println(map.get("city")); // 서울특징key는 중복 불가value는 중복 가능빠른 검색/조회 가능(key로 value접근)구현체HashmapKey 해시값으로 저장 → 조회 빠름LinkedHashMap입력 순서 유지TreeMapKey 기준 정렬Map Value에 객체 사용Value에 클래스 객체를 담으면 단순 값뿐 아니라 상태와 동작(메서드)까지 관리 가능예제: 도서관 대출/반납 book 클래스public clas..

Dev./Java 2025.10.22
728x90
반응형