| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 |
- ES5
- 0.25px border
- &연산
- 클론코딩
- angular
- 전역변수
- font-size
- TypeScript
- 10px
- 으
- literal
- TS
- 서버리스 #
- Strict
- Websocket
- 컴포넌튼
- es6
- ZOOM
- jwt
- github
- 당근마켓
- 타입스크립트
- Props
- 데이터베이스 #try #이중
- npm
- 문서번호
- entity
- 0.75px border
- 1px border
- 0.5px border
- Today
- Total
목록전체 글 (166)
복잡한뇌구조마냥
✅ 요약Java에서 Cloneable 인터페이스와 clone() 메서드를 사용하면 객체 복제를 간편하게 구현할 수 있을 것처럼 보입니다. 하지만 clone()은 매우 허술하고, 설계적으로 불완전한 메커니즘이며, 잘못 사용하면 예기치 못한 동작, 불변성 훼손, 깊은 복사 실패, 스택 오버플로우 등 수많은 문제가 발생할 수 있습니다.이 아이템에서는 clone()의 문제점과 안전하게 복제를 구현하는 방법, 그리고 대안으로 복사 생성자/팩터리 사용을 권장하는 이유를 설명합니다.🧨 1. Cloneable의 근본적인 문제Cloneable은 표시(marker) 인터페이스일 뿐, 아무 메서드도 정의하지 않음Object.clone()은 기본적으로 얕은 복사(shallow copy) 만 수행하며, Cloneable을 구..
✅ 요약Java는 가비지 컬렉터(GC)가 메모리를 자동으로 관리해주지만, 프로그래머의 실수로 인해 메모리 누수(Memory Leak) 가 발생할 수 있습니다. 특히, 다 쓴 객체를 참조한 채로 계속 유지하면 GC가 회수하지 못해 성능 저하와 OutOfMemoryError로 이어질 수 있습니다. 이를 방지하기 위해 다 쓴 참조는 명시적으로 해제하거나, 유효 범위를 벗어나게 하여 참조를 제거해야 합니다. 🔍 1. 왜 메모리 누수가 발생할까?Java는 명시적인 free() 호출이 없기 때문에, 객체가 더 이상 사용되지 않더라도 참조만 유지되면 GC가 회수하지 않습니다.즉, 다음과 같은 경우는 모두 메모리 누수로 이어질 수 있습니다:컬렉션(List, Map 등)에 넣은 뒤 제거하지 않음콜백이나 리스너 등록 후..
☕ 자바 스트림과 람다 표현식의 간소화 과정람다 표현식을 처음 접하면 -> 기호에 낯설 수도 있지만, 반복적인 코드를 훨씬 간결하고 읽기 쉽게 만들 수 있습니다. 이번 글에서는 반복문을 스트림과 람다로 점진적으로 간소화해보는 과정을 소개합니다. ✅ 1. 전통적인 반복문for (int i = 1; i 익숙하지만 반복 변수를 직접 관리해야 합니다.병렬 처리나 함수형 스타일로 확장하기 어렵습니다. ✅ 2. 스트림 사용 + 익명 클래스IntStream.rangeClosed(1, 5) .forEach(new IntConsumer() { @Override public void accept(int value) { System.out.println(value + "번..
✅ 개요Composition(구성) 은 객체지향 프로그래밍에서 객체 간 관계를 형성하는 중요한 설계 기법입니다.보통 자바에서 객체 간 재사용을 구현할 때 흔히 상속(inheritance)을 떠올리지만, Composition은 상속보다 더 유연하고 유지보수가 쉬운 설계 방식으로 권장되는 경우가 많습니다.🔍 1. Composition이란?Composition이란 다른 객체를 자신의 필드로 포함하여 기능을 위임(Delegate)하는 방식입니다.즉, "has-a" 관계를 나타냅니다.class Engine { public void start() { System.out.println("Engine starting..."); }}class Car { private Engine engin..
✅ 개요Java 8부터 도입된 Stream은 데이터를 선언형 방식으로 처리할 수 있는 기능입니다.기존의 for-loop 방식보다 간결하고 가독성이 높으며, 병렬 처리도 간편하게 할 수 있어 자바 개발자라면 꼭 익혀야 할 기능입니다.🔍 1. Stream이란?Stream은 데이터의 흐름(데이터 스트림)을 추상화한 개념입니다.컬렉션(List, Set 등)을 반복하거나 필터링/변환할 때, 스트림 API를 사용하면 더 선언적이고 간결한 코드를 작성할 수 있습니다.List names = List.of("Alice", "Bob", "Charlie");names.stream() .filter(name -> name.startsWith("A")) .forEach(System.out::println); /..
🧭 왜 만들었는가여행 일정 짤 때, 단순히 장소만 나열된 정보는 부족하다.방문 시간, 체류 시간, 비용 등을 기준으로 직접 여행 계획을 세울 수 있는 구체적인 여행 추천 플랫폼이 있으면 좋겠다. 이런 문제의식에서 출발하여, 팀 프로젝트로 TripHub를 기획하게 되었습니다.🧩 핵심 기능 소개✔️ 여행지장소 이름, 메모, 비용, 지역, 카테고리 등 입력대표 이미지 선택 + 이미지 최대 6장 업로드좋아요, 즐겨찾기, 리뷰, 별점, 조회수 기능✔️ 게시글(일정)여행지들을 묶어 일정 구성일정 요약 (예산 총합, 방문 지역, 활동 수)GPT 챗봇을 통한 여행지 추천 → 즉시 일정에 반영 가능일정 탭 + 본문 탭 UI 구성✔️ 탐색 기능여행지/게시글 목록 피드 형태 제공검색 / 필터 / 정렬 가능메인 페이지에서..
🔗 문제 링크프로그래머스 - 모음사전📌 문제 설명'A, E, I, O, U'로 구성된 길이 1~5의 문자열 중에서 사전 순으로 정렬된 단어 목록이 존재한다. 주어진 단어가 이 목록에서 몇 번째인지 찾아야 한다.예시"AAAAE" → 6번째"EIO" → 1189번째💡 문제 접근모든 경우의 수를 미리 생성해서 리스트에 담고, 해당 단어의 인덱스를 구하는 완전탐색 방식으로 접근한다.총 경우의 수는 5자리까지이므로5^1 + 5^2 + 5^3 + 5^4 + 5^5 = 3905완전탐색으로 충분히 커버 가능하다.✅ 핵심 아이디어: 백트래킹 (Backtracking)길이 1~5의 모든 문자열을 사전순으로 생성StringBuffer를 사용하여 문자열 조합 생성리스트에 저장하고, target이 발견되면 조기 종료🧠 ..
🔗 문제 링크프로그래머스 - 완주하지 못한 선수📌 문제 요약마라톤에 참여한 선수 목록 participant[]와 완주한 선수 목록 completion[]이 주어집니다.단, 한 명만 완주하지 못했으며, 이름은 중복될 수 있습니다.완주하지 못한 선수의 이름을 구해야 합니다.✅ 풀이 1: 정렬 + 비교💡 아이디어두 배열을 정렬한 후, 순차적으로 비교하다가 다른 값이 나오면 그 사람이 완주하지 못한 사람입니다.completion은 항상 participant보다 1명 적기 때문에, 끝까지 비교했는데 차이가 없으면 마지막 사람이 정답입니다.🧾 코드public static String solution(String[] participant, String[] completion) { Arrays.sort(p..