본문 바로가기

Java36

JAVA 1. 기초 문법과 흐름 제어Java 언어 개요JDK, JRE, JVM, 바이트코드 이해변수와 자료형기본형 vs 참조형, Wrapper 클래스연산자산술, 논리, 비교, 비트, instanceof 등조건문 & 반복문if, switch, for, while, do-while배열과 문자열배열 선언과 조작, String, StringBuilder, StringBuffer메서드매개변수, 반환값, 오버로딩1. Java 언어 개요Java는 Sun Microsystems(현재는 Oracle)에 의해 1995년에 개발된 객체 지향 프로그래밍 언어이다."Write Once, Run Anywhere"라는 철학을 바탕으로, 한 번 작성한 코드를 다양한 운영체제에서 실행할 수 있도록 설계되었다.주요 특징플랫폼 독립성 (JVM 덕.. 2025. 4. 7.
Java sealed class sealed class란?sealed class는 자식 클래스가 누군지만 명시적으로 "봉인(seal)"할 수 있는 클래스.즉, "이 클래스는 상속할 수 있는데 지정된 몇몇 클래스만 상속 가능하게 한다"는 뜻!기본 문법public sealed class Shape permits Circle, Rectangle { // ...}public final class Circle extends Shape { // ...}public final class Rectangle extends Shape { // ...}주요 키워드sealed상속은 가능하지만, 허용된 클래스만 상속 가능permits허용된 자식 클래스 목록 명시final더 이상 상속 불가non-sealed이 클래스는 다시 누구나 상속 가.. 2025. 4. 4.
java Record .record "불변 객체 + 자동 코드 생성"Java/Spring에서 record와 유사한 것들   Lombok @Data / @Value 클래스getter/setter/toString 등 자동 생성불변은 @Value, 가변은 @Data, 별도 의존성 필요Java Bean (POJO)수동으로 getter/setter 생성코드 양 많고, 불변 객체 아님DTO 클래스 (전통 방식)controller ↔ service 사이 데이터 전달용가변 객체, 코드 반복 많음Value Object 패턴equals/hashCode 기반 값 비교용 클래스record가 VO 구현에 딱 적합함Sealed Class (Java 17+)상속을 제한한 클래스 계층record는 값 자체 표현, sealed는 계층 구조 record v.. 2025. 4. 4.
Swagger와 API 명세 1. Swagger / OpenAPI (가장 많이 사용됨)Swagger란?API 명세를 자동 생성해주는 도구OpenAPI 스펙을 바탕으로 UI를 통해 확인하고 테스트 가능Spring Boot 연동 방법implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.1.0'// http://localhost:8080/swagger-ui/index.html 에서 확인 가능장점자동 문서화컨트롤러, DTO에 붙인 @Operation, @Parameter 등으로 자동 생성UI 제공Swagger UI에서 API 직접 테스트 가능OpenAPI 3.0 스펙 지원다른 툴과 연동 쉬움 (Postman, Notion 등)예시@Operation(summary = "회원.. 2025. 3. 31.
Spring Boot Test 관련 (JUnit, Mockito, AssertJ,Spring Boot Test, Testcontainers ) 1. JUnit (Java Unit Test의 표준)버전JUnit 4, 5(Jupiter) 두 가지가 존재 (요즘은 5 주력)용도단위 테스트, 통합 테스트 등 Java 테스트 전반대표 어노테이션@Test, @BeforeEach, @AfterEach, @Nested, @DisplayName 등예시 (JUnit 5)@DisplayName("간단한 더하기 테스트")@Testvoid addTest() { int sum = calculator.add(2, 3); assertEquals(5, sum);}✅ 2. Mockito (Mock 객체 생성)가짜 객체(Mock) 만들어서 서비스, 컨트롤러 단위 테스트할 때 사용DB, 외부 API 없이도 테스트 가능@Mock, @InjectMocks, when().t.. 2025. 3. 31.
Optional<T> 1. Optional이란?null을 직접 다루지 않고,"값이 있을 수도, 없을 수도 있는 객체"를 감싸는 컨테이너 클래스Optional은 null-safe한 값을 표현하는 도구리턴 타입에 사용하되, 파라미터/필드에는 되도록 쓰지 말기orElseThrow, map, filter, ifPresent 잘 쓰면 코드 깔끔해짐Optional name = Optional.of("Mars");Optional empty = Optional.empty();2. 왜 쓰는가?NullPointerException 방지"null 체크"를 명시적으로 강제리턴값이 "있을 수도/없을 수도" 있는 경우 문서화 효과예전 방식User user = repository.findByEmail(email);if (user != null) { ... 2025. 3. 31.
JPQL과 QueryDSL 1. QueryDSL이란?JPA의 JPQL을 타입 안전하게 사용할 수 있게 도와주는 라이브러리IDE 자동완성, 리팩토링 용이, 동적 쿼리에 매우 강력함실무에선 JPQL보다 거의 대부분 QueryDSL을 사용2. 설치 방법 (Gradle 기준)1) 의존성 추가// build.gradle.kts (Kotlin DSL 예시)dependencies { implementation("com.querydsl:querydsl-jpa") annotationProcessor("com.querydsl:querydsl-apt:5.0.0:jpa") annotationProcessor("jakarta.annotation:jakarta.annotation-api") annotationProcessor("jak.. 2025. 3. 31.
JPA 1. @Entity, @Table → CREATE TABLE@Entity@Table(name = "users")public class User { ...}CREATE TABLE users ( ...);@Entity가 붙으면 해당 클래스는 DB 테이블로 변환@Table(name = "...") 없으면 → 클래스명이 소문자로 변환됨 (User → user)2. @Id, @GeneratedValue → PRIMARY KEY, AUTO_INCREMENT@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;id BIGINT PRIMARY KEY AUTO_INCREMENT IDENTITYAUTO_INCREMENT (MySQL), SERI.. 2025. 3. 31.
OAuth 구현 목표프론트에서 "구글 로그인"을 누르면Spring 서버가 로그인 처리 → 사용자 정보 저장 → JWT 발급 → 클라이언트 전달이 전체 흐름을 이해하는 게 목표야!1. 전체 OAuth 로그인 흐름[프론트]사용자가 구글 로그인 버튼 클릭 ↓GET /oauth2/authorization/google(Spring이 자동 제공하는 URL)[Spring 서버]→ Google 로그인 페이지로 리다이렉트 ↓→ 사용자가 로그인 후 동의 ↓Google → Spring으로 "code" 전송 (리디렉션 URL로)[Spring 서버]→ code를 access_token으로 교환→ access_token으로 사용자 정보(email, name 등) 조회→ OAuth2User 객체로 변환됨2. 이후 흐름 (커스텀 처리)[.. 2025. 3. 28.