분류 전체보기(84)
-
[Java] 프로그래머스 둘만의 암호
문제 설명두 문자열 s와 skip, 그리고 자연수 index가 주어질 때, 다음 규칙에 따라 문자열을 만들려 합니다. 암호의 규칙은 다음과 같습니다.문자열 s의 각 알파벳을 index만큼 뒤의 알파벳으로 바꿔줍니다.index만큼의 뒤의 알파벳이 z를 넘어갈 경우 다시 a로 돌아갑니다.skip에 있는 알파벳은 제외하고 건너뜁니다.예를 들어 s = "aukks", skip = "wbqd", index = 5일 때, a에서 5만큼 뒤에 있는 알파벳은 f지만 [b, c, d, e, f]에서 'b'와 'd'는 skip에 포함되므로 세지 않습니다. 따라서 'b', 'd'를 제외하고 'a'에서 5만큼 뒤에 있는 알파벳은 [c, e, f, g, h] 순서에 의해 'h'가 됩니다. 나머지 "ukks" 또한 위 규칙대로 ..
2025.11.02 -
[Java] 프로그래머스 숫자 짝꿍
문제 설명두 정수 X, Y의 임의의 자리에서 공통으로 나타나는 정수 k(0 ≤ k ≤ 9)들을 이용하여 만들 수 있는 가장 큰 정수를 두 수의 짝꿍이라 합니다(단, 공통으로 나타나는 정수 중 서로 짝지을 수 있는 숫자만 사용합니다). X, Y의 짝꿍이 존재하지 않으면, 짝꿍은 -1입니다. X, Y의 짝꿍이 0으로만 구성되어 있다면, 짝꿍은 0입니다.예를 들어, X = 3403이고 Y = 13203이라면, X와 Y의 짝꿍은 X와 Y에서 공통으로 나타나는 3, 0, 3으로 만들 수 있는 가장 큰 정수인 330입니다. 다른 예시로 X = 5525이고 Y = 1255이면 X와 Y의 짝꿍은 X와 Y에서 공통으로 나타나는 2, 5, 5로 만들 수 있는 가장 큰 정수인 552입니다(X에는 5가 3개, Y에는 5가 2..
2025.11.01 -
[내배캠] 한달 회고
벌써 다시 개발을 시작한지 한달이 흘렀다. 이 소중한 시간을 어떻게 보냈는지 되돌아보려고 한다.들어가기이번 달은 본격적으로 Java 개발자를 목표로 공부를 시작한 첫 달이었다. ‘객체지향’이라는 말이 어렵게만 느껴졌지만, 직접 코드를 써보면서 조금씩 감이 오기 시작했다. 자바 기간 주요 목표는 기본 문법과 컬렉션 등, 그리고 객체 설계 감각을 익히는 것이었다.한달 동안의 학습은 커리큘럼 강의와 자바 문법은 프로그래머스 문제들로 익혀갔다.어려웠던 점 & 해결과정건강상의 이유로 개발을 그만둔지 너무 오래된 상태였어서 다시 기본으로 돌아가는 것 자체가 힘들고 어려웠다. 그전에 이만큼 했으니까 더 잘해야 할텐데 라던지 더많이해야할텐데 같은 내 현실을 직시하고 기본기를 다지는 그 시작부터 어려웠다.그래서 한달..
2025.10.31 -
[Git] README 파일에 이미지 올리기
README.md에 클래스 다이어그램을 올리려고 했는데 도저히 마크다운으로는..할게많다. 그래서 이미지 업로드 방법을 찾아보게되었다.issues 클릭 후 New issue를 눌러 이슈생성한 후 원하는 이미지를 넣는다.깃허브는 이슈나 PR에 이미지를 드래그 해서 업로드 하면 다음과 같이 HTML태그 형태로 변환한다. README 파일에 넣기 위해서는 마크다운 형태가 필요한데 다음과 같은 형태로 수정하면 된다.[ ] : 이미지의 대체 텍스트(alt text)( ) : src의 주소이후 README 파일에 해당 코드를 복사해 넣으면..
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..
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() →..
2025.10.29 -
[Error] 키오스크 트러블 슈팅 3 - 장바구니 구조 설계
[Error] 키오스크 트러블 슈팅 1 - 상태 패턴enum 상수과 switch문으로 관리하던 상태에서 상태 패턴 적용 해보는 것도 괜찮을 것 같다고 하셔서 검색 후 내 코드에 적용해 보았다. 기존에 키오스크 실질적인 기능을 담당하는 start() 메소드가devz0.tistory.com [Error] 키오스크 트러블 슈팅 2 -책임 분리이전 글에서 이어지는 내용 [Error] 키오스크 트러블 슈팅 1enum 상수과 switch문으로 관리하던 상태에서 상태 패턴 적용 해보는 것도 괜찮을 것 같다고 하셔서 검색 후 내 코드에 적용해 보았다. 기devz0.tistory.com오래되긴 했지만 API 만들어본 경험이 있어서 과제 로직 구현 자체는 어렵지 않았다. 객체 지향 적인 코드 흐름 문제 제외하고 가장 생..
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..
2025.10.27 -
[Error] 키오스크 트러블 슈팅 1 - 상태 패턴
enum 상수과 switch문으로 관리하던 상태에서 상태 패턴 적용 해보는 것도 괜찮을 것 같다고 하셔서 검색 후 내 코드에 적용해 보았다. 기존에 키오스크 실질적인 기능을 담당하는 start() 메소드가 굉장히 길었는데 그 부분은 간략하게 생략되었지만 고려해봐야할 몇가지 문제가 생겼다. 그 과정을 정리해보려고 한다.목표기존 enum + switch 구조에서 상태 패턴(State Pattern)을 적용하여 Kiosk 클래스의 start 메소드 단순화 및 코드 재사용성 향상을 시도상태 패턴 적용 후 장점 start() 메소드가 간단해지고, 상태 전환 로직이 상태 객체로 분리됨.상태별 클래스(StartState, MainMenuState, ...)를 독립적으로 관리 가능 → 재사용성, 확장성 향상.새로운 ..
2025.10.25 -
[Java] 상태 패턴 (State Pattern)
상태 패턴이란객체가 상태에 따라 다른 행동을 해야 할 때 사용하는 디자인 패턴상태를 객체로 캡슐화해서 상태 전환과 행동을 독립적으로 관리조건문 (if / switch)을 최소화할 수 있음객체가 여러 상태를 갖고있고 상태별로 행동이 다를때나, 상태가 자주바뀌고 상태별 로직이 길어서 조건문이 지저분할 때도 사용가능구성 요소구성 요소역할Context상태를 가진 객체State Interface상태 인터페이스/추상 클래스ConcreteState각 상태 구현장점조건문 최소화 → 코드가 깔끔상태별 행동 캡슐화 → 유지보수 용이새로운 상태 추가 용이단점상태 클래스가 많아질 수 있음 → 관리 필요상태 전환 로직이 복잡하면 Context가 상태를 지나치게 알게 됨적용간단한 기능이라 기본적인 상태패턴 규칙처럼 클래스로 나누..
2025.10.24