일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 으
- 클론코딩
- 컴포넌튼
- literal
- 1px border
- entity
- 당근마켓
- 문서번호
- ES5
- Props
- jwt
- github
- 10px
- es6
- Strict
- 0.75px border
- ZOOM
- 0.25px border
- 데이터베이스 #try #이중
- 전역변수
- 서버리스 #
- font-size
- 0.5px border
- TS
- Websocket
- &연산
- angular
- 타입스크립트
- TypeScript
- npm
- Today
- Total
목록BE/JAVA (42)
복잡한뇌구조마냥
1. Thymeleaf란?자바 기반 서버 사이드 템플릿 엔진HTML 안에 변수를 바인딩하거나 조건문, 반복문 등을 지원JSP와 달리 HTML을 그대로 열어도 깨지지 않는다는 장점 (순수 HTML 친화적)Spring Boot에서는 spring-boot-starter-thymeleaf 의존성으로 쉽게 연동 가능2. 의존성 추가 (Gradle)dependencies { implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'org.springframework.boot:spring-boot-starter-web'}3. 기본 사용법(1) Controller @Controllerpublic class H..
1. Spring Data JPA란?JPA를 더 쉽게 쓰도록 도와주는 Spring 프로젝트반복적인 DAO/Repository 구현을 자동화인터페이스만 정의하면 CRUD 메서드를 자동 제공👉 JPA는 EntityManager를 직접 쓰지만, Spring Data JPA는 Repository 인터페이스 기반으로 훨씬 단순화됩니다.2. 의존성 추가 (Gradle) dependencies { implementation("org.springframework.boot:spring-boot-starter-data-jpa") runtimeOnly("com.h2database:h2")}3. Entity 예제 import jakarta.persistence.*;import lombok.Getter;import..
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, 런타임에서만 문제 발생 가능표현력 감소코드에서 어떤 타입을 의도했는지 알 수 없어 가독성↓, 유지보수성↓에러 검출 시점 지연문제를 런타임에서야 발견 → 디버깅 난이도 상승.컴파일러 최적화·도움 불가타입 추론이 안..