[Kotlin] 8. 객체 지향 프로그래밍 (OOP)
·
Kotlin/Kotlin 입문
1. 객체 지향 프로그래밍의 필요성객체 지향 프로그래밍(OOP)은 코드의 재사용성과 유지 보수성을 향상시키기 위해 필요한 프로그래밍 패러다임입니다.OOP는 현실 세계의 개념을 클래스와 객체로 모델링하여 문제를 직관적으로 해결할 수 있도록 돕습니다.코드의 중복을 줄이고, 프로그램의 확장성을 높여주는 주요한 특징을 가지고 있습니다. 2. 객체 지향 프로그래밍의 주요 개념객체 지향 프로그래밍은 네 가지 주요한 특징으로 구성됩니다: 캡슐화, 상속, 다형성, 추상화.1. 캡슐화 (Encapsulation)캡슐화는 데이터를 보호하고, 외부에서 직접 접근할 수 없도록 은닉하는 개념입니다.클래스 내부의 필드와 메서드를 캡슐화하여, 객체의 상태를 안전하게 유지할 수 있습니다.예시)접근 제어자 private, protec..
[Kotlin] 7. 함수
·
Kotlin/Kotlin 입문
1. 함수의 필요성함수는 입력값에 따라 출력값을 만들어 반환하는 수학적 개념과 유사합니다.함수를 사용하면 반복되는 로직을 효율적으로 관리하고 재사용할 수 있습니다.예시) function이 2x + 1일 때:          input: 2 ⟶ output: 5          input: 8 ⟶ output: 17 2. 함수 사용함수는 특정 작업을 수행하는 코드의 블록입니다. 함수를 정의하고 필요할 때마다 호출함으로써 코드 중복을 줄이고 프로그램의 구조를 개선할 수 있습니다.함수 선언과 호출// 함수 선언(예시)fun 함수명(input1: 변수타입, input2: 변수타입): 반환되는변수타입 { return 반환값}// 함수 선언fun sum(a: Int, b: Int): Int { retu..
[Kotlin] 6. 배열
·
Kotlin/Kotlin 입문
1. 배열의 필요성배열은 여러 데이터를 하나의 변수에 할당하여 관리할 수 있게 해주어, 코드의 효율성을 높여줍니다.예를 들어, 여러 회원의 운동 기록을 각각 다루는 대신 배열을 사용하여 간단히 관리할 수 있습니다.fun main() { val member1 = 100 val member2 = 300 val member3 = 250 println("member1의 3대 운동은 $member1입니다") println("member2의 3대 운동은 $member2입니다") println("member3의 3대 운동은 $member3입니다")}2. 배열 사용하기배열을 생성하는 방법은 2가지가 있습니다2.1) 배열의 크기를 정하고 초기값 지정하여 생성fun main() { ..
[Kotlin] 5. 반복문
·
Kotlin/Kotlin 입문
1. 반복문의 필요성반복문은 똑같은 내용을 계속해서 출력하거나 규칙이 있는 같은 동작을 반복해야 하는 경우에 사용하여 코드를 효율적으로 작성할 수 있습니다.fun main() { println("Hello World!") println("Hello World!") println("Hello World!")}fun main() { var total = 0 total += 1 total += 2 total += 3 println("total=$total")}2. 반복문의 종류반복문은 특정 로직을 반복 실행할 때 사용합니다. 코틀린(Kotlin)에서는 for와 while을 제공합니다.for 문시작 index부터 마지막 index까지 값을 증가시키면서 블록을 실행합니다..
[Kotlin] 4. 조건문
·
Kotlin/Kotlin 입문
1. 조건문조건문이 왜 필요할까?우리는 일상 속 여러 상황들 속에서 많은 결정을 내립니다. 프로그램 또한 마찬가지입니다. 여러상황에 맞게 실행되어야하는 코드가 다를 수 있습니다. 조건문이 없는 프로그램은 여러 상황에대응할 수 없습니다.fun main() { println("AAA") println("BBB") println("CCC")}조건문특정 조건에 따라 서로 다른 동작을 실행하기 위해 사용합니다.코틀린(Kotlin)에서는 if, else if, else, 그리고 when 을 제공하고 있습니다.2. if, else if, else 구조기본 if문fun main() { val dust: Int = 30 if (dust 35) { println("집에서 논다") ..
[Kotlin] 3. 연산자
·
Kotlin/Kotlin 입문
1. 연산자주어진 식을 계산하여 결과를 얻어내는 과정을 연산이라고 합니다.연산을 수행하는 기호를 연산자라고 합니다.코틀린(Kotlin)에서 제공하는 연산자 중에 산술 연산자, 복합 대입 연산자, 증감 연산자, 비교 연산자, 논리 연산자 에 대해서 알아봅니다.2. 산술 연산자+ : 더하기- : 빼기* : 곱하기/ : 나누기% : 나누고 남은 나머지 값fun main() { val a: Int = 3 val b: Int = 2 println(a + b) // 5 println(a - b) // 1 println(a * b) // 6 println(a / b) // 1 println(a % b) // 1}3. 복합 대입 연산자연산하여 왼쪽 변수에 할당합니다.+===/=%=..
[Kotlin] 2. 변수
·
Kotlin/Kotlin 입문
1. 변수변동이 심한, 가변적인, 변할 수 있는 숫자를 말합니다.프로그래밍에서 말하고 싶은 변수의 뜻은 가변할 수 있는 값을 저장할 수 있는 저장공간입니다.프로그램을 만드는 주재료가 됩니다.2. 변수 선언 기본 형태var/val 변수명: 변수타입 = 초기화값fun main() { println("Hello, World!") // var/val 변수명: 변수 타입 = 초기화값 var name: String = "박준용" // 변동 불가능 val age: Int = 26 // 변동 가능 val alive: Boolean = true // 변동 가능}val(Immutable: 불변의) - 읽기val 로 선언된 변수는 초기에 값을 할당하면 더이상 값을 변경할 수 ..
[Spring] JWT 서명 검증의 원리
·
Spring/Spring
서론유튜브를 보다가 우연히 JWT에 대해 설명해 주는 영상을 접하게 되었습니다. 영상을 보며 JWT의 서명 검증 원리를 너무 쉽게 설명해 주어서, 이를 바탕으로 본 게시글을 작성하게 되었습니다. 이번 포스팅에서는 JWT의 기본적인 구조와 서명 생성 및 검증 과정을 쉽게 설명해 보려고 합니다.JWT 구조 JWT(JSON Web Token)는 세 가지 주요 구성 요소로 이루어져 있습니다: 헤더(header), 페이로드(payload), 서명(signature). 이 이미지는 JWT의 각 부분을 시각적으로 설명합니다. 헤더(Header): 알고리즘 유형과 토큰 유형을 지정합니다. 예시에서는 HS256 알고리즘과 JWT 타입이 사용되었습니다.페이로드(Payload): 토큰의 데이터가 포함된 부분입니다. 여기에는..
[Spring Boot] JPA @MapsId를 이용한 FK를 PK로 사용하기
·
Spring/Spring Boot
이번 프로젝트에서 JPA 엔티티를 설계하면서 외래 키를 기본 키로 사용하는 경우를 마주하게 되었습니다. 이 과정에서 활용한 기능이 바로 @MapsId입니다. 이 글에서는 @MapsId 어노테이션을 사용하여 외래 키를 기본 키로 설정하는 방법과 그 이점에 대해 설명하고자 합니다.1. 프로젝트 배경이번 프로젝트에서는 Profile 엔티티와 ProfileImage 엔티티 간의 관계를 설정해야 했습니다. Profile 엔티티는 유저의 프로필 정보를 담고 있으며, ProfileImage 엔티티는 프로필 이미지 정보를 저장합니다. 이때, ProfileImage 엔티티의 기본 키로 Profile 엔티티의 기본 키를 사용하고자 했습니다. 이를 구현하기 위해 JPA의 @MapsId 어노테이션을 활용하게 되었습니다.2. ..
[Spring Boot] @NoargsConstructor(AccessLevel.PROTECTED), @Builder
·
Spring/Spring Boot
이번 프로젝트를 진행하면서 JPA Entity 클래스의 설계를 더욱 견고하게 하기 위해 @NoArgsConstructor(access = AccessLevel.PROTECTED) 기능을 활용하게 되었습니다. 이 접근 방식을 통해 객체의 상태를 관리하고, 명확한 설계 의도를 표현하는 방법을 최적화할 수 있었습니다. 특히, JPA를 사용하는 Spring 애플리케이션에서 엔티티 클래스의 기본 생성자 접근을 제어하는 것이 얼마나 중요한지 알게 되었습니다. 1. JPA와 기본 생성자JPA는 엔티티 클래스를 인스턴스화할 때 기본 생성자를 사용합니다. 따라서, 모든 엔티티 클래스는 기본 생성자를 제공해야 합니다. 기본 생성자가 없으면 JPA는 엔티티 클래스를 인스턴스화할 수 없고, 이는 곧 런타임 예외로 이어집니다...
JoonYong
Development Note