분류 전체보기(84)
-
[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); ..
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..
2025.10.22 -
[Java] getter/setter 왜 사용 지양해야할까?
자바 입문하면서 가장 처음 맞이한 난관이다. 이번 과제를 수행해가며 과제 수행 여부에만 집중했다. 구현하라니까 구현하고 이런식으로 그 기준에만 맞추려고 했다. 팀원간에 setter의 적용에 대한 이슈가 나오며 setter를 사용하지 않으셨다는 의견을 들었다. 덧붙여 주신 의견으로 setter를 지양해야한다는 글들을 접하셨다고 하셨다. 나도 그이야기를 들은 후 찾아보니 진짜 지양해야한다는 글이 상당히 많았다. 하지만 찾아봐도 왜 지양해야할까에 대한 궁금증이 해소되지않았다. 왜 지양해야할까? 값에대한 private 필드를 그럼 어떻게 간접적으로 접근하고 저장할까??getter/setter객체의 필드(데이터)에 접근하기 위한 간접 통로private 필드에 직접 접근하지 않고, 메서드를 통해 접근하게 만드는 구..
2025.10.21 -
[Java] OCP(Open/Closed Principle)
확장에는 열려있고 수정에는 닫혀 있어야 한다객체지향 설계 5대 원칙(SOLID)중 하나로 기존 코드를 수정하지 않고도 새 기능이나 요구사항을 추가할 수 있어야 한다는 개념이다.계산기 예제로 살펴보면좋지못한 설계class Calculator { public double calculate(double x, double y, String operator) { if (operator.equals("+")) return x + y; else if (operator.equals("-")) return x - y; else if (operator.equals("*")) return x * y; else if (operator.equals("/")) return ..
2025.10.20 -
[Java] 덧칠하기
문제 설명어느 학교에 페인트가 칠해진 길이가 n미터인 벽이 있습니다. 벽에 동아리 · 학회 홍보나 회사 채용 공고 포스터 등을 게시하기 위해 테이프로 붙였다가 철거할 때 떼는 일이 많고 그 과정에서 페인트가 벗겨지곤 합니다. 페인트가 벗겨진 벽이 보기 흉해져 학교는 벽에 페인트를 덧칠하기로 했습니다.넓은 벽 전체에 페인트를 새로 칠하는 대신, 구역을 나누어 일부만 페인트를 새로 칠 함으로써 예산을 아끼려 합니다. 이를 위해 벽을 1미터 길이의 구역 n개로 나누고, 각 구역에 왼쪽부터 순서대로 1번부터 n번까지 번호를 붙였습니다. 그리고 페인트를 다시 칠해야 할 구역들을 정했습니다.벽에 페인트를 칠하는 롤러의 길이는 m미터이고, 롤러로 벽에 페인트를 한 번 칠하는 규칙은 다음과 같습니다.롤러가 벽에서 벗어..
2025.10.19 -
[Git] git cherry-pick 특정 커밋 가져오기
전체 브랜치를 합치지 않고 특정 커밋만 가져오고 싶을때 사용한다사용법사용전 내가 가져올 커밋의 ID를 가져와야 한다.#내가 원하는 다른 브랜치 커밋ID 확인git log --oneline --graph --all단일 커밋# 원하는 브랜치로 이동git checkout main# 특정 커밋을 cherry-pickgit cherry-pick 여러개의 커밋//여러개git cherry-pick //연속된 커밋 범위git cherry-pick ^..^.. - ID1부터 ID2까지 모든 커밋이 차례대로 적용 (ID1,ID2 모두 포함)커밋 메세지 수정하며 가져오기git cherry-pick -e -e 옵션: 메시지 편집 창 열기혹시 cherry-pick 끝났는데 커밋메세지를 수정하고 싶다면 git commit -..
2025.10.18 -
[Java] Stack(스택) 자료구조
StackLIFO(Lasn In, First Out) 자료구조즉 마지막에 넣은 데이터가 가장 먼저 나오는 자료구조이다. 웹 브라우저 뒤로가기 히스토리 동작을 생각해보면 알 수 있다.Java의 Stackimport java.util.Stack;Stack stack = new Stack();메서드메서드설명push(E item)스택의 맨 뒤에 데이터 추가pop()스택의 맨 뒤 데이터 제거 후 반환peek()스택의 맨 뒤 데이터 확인 (제거X)Stack 클래스의 문제불필요하게 느림 (Thread-safe)모든 연산이 안전하게 스레드용으로 처리한 번에 한 스레드만 접근 가능하도록 락(lock)을 걸어서 동작하지만 대부분의 코드에서는 하나의 스레드만 사용하기 때문에 불필요예전 방식의 오래된 클래스다른 컬렉션들(Li..
2025.10.17 -
[Error] 계산기 만들기 트러블 슈팅
기능 구상Level1. 클래스 없이 만드는 계산기양의 정수 2가지 , 사칙연산기호 한가지 입력양의정수는 각각 하나씩 입력, 정규식 검사 후 int 타입으로 변수에 저장사칙연산 기호는 char 타입으로 변수 저장연산 진행switch문을 사용해 각 연산자에 맞게 진행나눗셈 연산에서 두번째정수에 0이 입력될 경우 오류 출력exit 문자열 입력 전까지 계산 진행각각의 인풋값 입력단계에서도 exit 입력시 연산 끝낼 수 있도록 로직 작성각각의 계산이 종료될때도 exit 입력할 수 있도록 작성대소문자 관계없이 비교하는 String.equlsIgnoreCase를 발견해서 적용Level2. 객체 지향 계산기기능으로 클래스 분리 Calculator 클래스사칙연산 수행인풋값 입력시 검증 메소드결과값 반환, 연산 결과 리..
2025.10.17 -
[Java] 캡슐화
캡슐화객체의 상태(필드)를 숨기고(보호) 공개된 메서드로만 접근하게 해서 내부 구현을 바꾸더라도 외부에 영향이 없게 만드는 설계 원칙캡슐화의 목적 데이터 보호: 필드를 private으로 숨겨 잘못된 접근(무결성 훼손)을 막음인터페이스와 구현 분리: 외부는 무엇을 할 수 있는지(메서드)만 알고, 내부 구현은 바꿀 수 있음유지보수성 향상: 내부를 바꿔도 외부 코드는 그대로 작동응집도 증가 / 결합도 감소: 책임이 분명해지고 모듈화가 쉬워짐검증/비즈니스 로직 중앙화: 값 유효성 검사, 상태 변화 규칙을 한곳(setter/메서드)에 모을 수 있음적용 예제1. 필드를 private으로 선언내부 속성은 private으로 숨기고, 외부는 public 메서드를 통해 접근하게 함private int result;priv..
2025.10.16 -
[Java] 인터페이스와 다형성
인터페이스인터페이스란 "이 클래스는 이러한 기능들을 반드시 가지고 있어야 해" 라는 규칙을 정해놓은 설명서 같은 개념이다. 클래스가 반드시 구현해야하는 메서드의 목록만 담겨있다.public interface RemoteControl { void turnOn(); void turnOff();}public class TV implements RemoteControl { public void turnOn() { System.out.println("TV를 켭니다"); } public void turnOff() { System.out.println("TV를 끕니다"); }}리모콘의 경우로 예시를 살펴보면 켜기/끄기 기능은 꼭 있어야 한다는 약속을 정한 것이..
2025.10.15