일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
31 |
- 문서번호
- 클론코딩
- 서버리스 #
- TypeScript
- 1px border
- Strict
- 10px
- literal
- 데이터베이스 #try #이중
- Props
- 0.75px border
- 0.25px border
- ZOOM
- github
- 컴포넌튼
- 전역변수
- font-size
- 으
- 당근마켓
- 타입스크립트
- jwt
- ES5
- entity
- 0.5px border
- es6
- npm
- TS
- &연산
- Websocket
- angular
- Today
- Total
목록BE (45)
복잡한뇌구조마냥
1. @Testorg.junit.jupiter.api.Test메서드를 테스트 메서드로 지정반환 타입은 void, public 필요 없음@Testvoid addTest() { int sum = 2 + 3; assertEquals(5, sum);}2. @DisplayNameorg.junit.jupiter.api.DisplayName테스트 이름을 한글/문장으로 지정 (출력 시 가독성↑) @Test@DisplayName("2 + 3은 5가 되어야 한다")void addTest() { assertEquals(5, 2 + 3);}3. @BeforeEach / @AfterEach각각 테스트 메서드 실행 전/후 실행되는 메서드 @BeforeEachvoid setup() { System.out.p..
1. ordinal() 메서드란?자바의 enum은 선언된 순서(0부터 시작) 를 기준으로 내부적으로 정수값을 가짐.ordinal() 메서드는 해당 상수가 몇 번째 위치인지 반환한다.public enum Ensemble { SOLO, DUET, TRIO, QUARTET;}System.out.println(Ensemble.SOLO.ordinal()); // 0System.out.println(Ensemble.DUET.ordinal()); // 12. 왜 ordinal()을 쓰고 싶어질까?SOLO는 1명, DUET은 2명, TRIO는 3명 … 처럼상수와 자연스럽게 정수값이 대응되는 경우가 많다.그래서 ordinal() 값을 그대로 비즈니스 로직에서 쓰고 싶다는 유혹이 생김. int size = Ensem..
1. 배경: 일반적인 제네릭 컨테이너의 한계제네릭 컬렉션(List, Map)은 타입 매개변수의 개수가 고정됨.하지만 여러 타입을 한 컨테이너에 안전하게 담고 싶을 때가 있음.예: DB Row, 설정값 저장소, 어노테이션 API 등단순히 Map를 쓰면 타입 캐스팅 필요 + 타입 안전성 상실. Map favorites = new HashMap();favorites.put("String", "hello");favorites.put("Integer", 123);// 잘못된 타입도 들어감 → 런타임 오류 가능favorites.put("Integer", "oops");2. 타입 안전 이종 컨테이너 패턴의 아이디어컨테이너가 아니라 키에 타입 매개변수를 부여하자.즉, Map, Object>를 이용해서 키 자체가 타입 ..
1. JPA란?JPA(Java Persistence API): 자바 진영의 ORM(Object Relational Mapping) 표준 인터페이스객체와 테이블 매핑을 도와주는 스펙 (구현체: Hibernate, EclipseLink 등)SQL 직접 작성 대신 객체 중심으로 데이터베이스 다룸👉 즉, “자바 객체를 DB 테이블과 자동으로 매핑해주는 기술”2. JPA를 쓰는 이유SQL 작성 줄임 → CRUD 대부분 자동 처리객체 모델과 테이블 모델의 불일치(패러다임 불일치) 해결유지보수성, 확장성 향상📌 전통적인 방식 String sql = "INSERT INTO member (id, name) VALUES (?, ?)";PreparedStatement pstmt = conn.prepareStatement..
1. 리플렉션이란?런타임에 클래스, 메서드, 필드, 생성자 등에 접근할 수 있는 자바 API즉, 코드가 실행되는 도중에 객체의 타입을 확인하고 동적으로 동작을 바꿀 수 있음java.lang.reflect 패키지에 포함👉 컴파일 시점에 알 수 없는 클래스/메서드를 런타임에 다룰 수 있다2. 왜 필요한가?프레임워크/라이브러리(예: Spring, JPA) 내부 동작객체 자동 주입, 어노테이션 기반 설정런타임 로딩설정 파일(XML/Properties)에 적힌 클래스명을 읽어 객체 생성테스트/디버깅private 필드 접근, 동적 프록시 생성 등3. 기본 사용법클래스 정보 가져오기 // 3가지 방법Class clazz1 = Class.forName("com.example.Member");Class clazz2 =..
1. 로 타입(Raw Type)이란?제네릭(Generic) 문법에서 타입 매개변수를 지정하지 않은 타입.예:List list = new ArrayList(); // 로 타입List처럼 구체적인 매개변수화 타입을 쓰지 않은 상태.2. 로 타입이 문제인 이유타입 안전성(Type Safety) 손실컴파일러가 타입 검증을 못 하므로 잘못된 타입이 들어가도 컴파일 단계에서 안 잡힘.List list = new ArrayList();list.add("문자열");list.add(123); // 컴파일 OK, 런타임에서만 문제 발생 가능표현력 감소코드에서 어떤 타입을 의도했는지 알 수 없어 가독성↓, 유지보수성↓에러 검출 시점 지연문제를 런타임에서야 발견 → 디버깅 난이도 상승.컴파일러 최적화·도움 불가타입 추론이 안..
요약 “태그 달린 클래스(tagged class)”는 한 클래스 안에 kind 같은 태그값으로 여러 형태를 구분하는 방식.이 방식은 필드/메서드가 뒤섞여 지저분해지고, 생성자·검증·equals/hashCode 같은 공통 로직이 복잡해지며, 실수가 생기기 쉽다.추상 클래스/인터페이스 기반 계층구조로 바꾸면 타입별 필드만 갖게 되고, 컴파일러가 누락/오류를 잡아주며, 가독성과 유지보수성이 크게 좋아진다.현대 자바(17+)라면 sealed 클래스/인터페이스로 더 안전하게 닫힌 계층을 만들 수 있다.1) 태그 달린 클래스가 뭔가요?public class Shape { public enum Kind { CIRCLE, RECTANGLE } private final Kind kind; // CIRCL..

1. SOLID란?SOLID는 로버트 C. 마틴(Robert C. Martin, Uncle Bob)이 정리한 객체 지향 설계 5대 원칙의 앞글자를 딴 용어입니다.목표: 유지보수성, 확장성, 재사용성이 높은 코드 설계 약어원칙이름의미SSRP: 단일 책임 원칙한 클래스는 하나의 책임만 가져야 한다OOCP: 개방-폐쇄 원칙확장에는 열려 있고, 변경에는 닫혀 있어야 한다LLSP: 리스코프 치환 원칙하위 타입은 상위 타입을 대체할 수 있어야 한다IISP: 인터페이스 분리 원칙사용하지 않는 메서드는 만들지 않는다DDIP: 의존 역전 원칙추상화에 의존하고, 구체화에 의존하지 않는다 2. SRP – 단일 책임 원칙 (Single Responsibility Principle)정의한 클래스는 오직 하나의 변경 이유만 가..