본문 바로가기

Language

(12)
[Python] 파이썬의 파일 실행 구조 이해하기 아래의 구조를 당신은 설명할 수 있나요?if __name__ == '__main__': print_hi('PyCharm') 1. 한 줄 요약이 파일이 다른 파일에 의해서 불러와진(import)것이 아니라, 사용자가 터미널이나 IDE에서 '직접 실행한 주인공 파일'일 때만 print_hi('PyCharm') 함수를 호출하라는 뜻입니다. 2. 구성 요소별 상세 설명코드를 두 부분으로 나누어 세부적으로 해석하면 다음과 같다.if __name__ == '__main__': (조건문)__name__ : 파이썬이 내부적으로 관리하는 숨겨진 내장 변수이다. 이 파일이 어떤 경로로 실행되었는지 알려주는 명찰 역할을 한다.__main__: 사용자가 스크립트 파일을 직접 실행했을 때 파이썬이 이 __name__ 명찰에 ..
[JAVA] 스프링의 @RestController를 실제 웹 서비스 개발에서 어떻게 활용할까 스프링의 @RestController를 실제 웹 서비스 개발에서 어떻게 활용하는지, 주요 기능별 예시와 함께 핵심을 정리해본다.1. HTTP 메서드별 예시 (CRUD 구현)클라이언트의 요청 목적에 따라 @GetMapping(조회), @PostMapping(생성), @PutMapping(수정), @DeleteMapping(삭제)을 사용합니다.import org.springframework.web.bind.annotation.*;import java.util.*;@RestController@RequestMapping("/api/products") // 모든 메서드의 기본 경로 설정public class ProductController { // 1. GET: 전체 조회 (JSON 리스트 반환) @G..
[Kotlin] Coroutine 기초 과제 1. 빈칸 채우기 문제 1. 코루틴은 Kotlin에서 제공하는 경량 ________ 모델이다.2. 코루틴의 핵심 3요소는 suspend fun, CoroutineScope, 그리고 ________ 이다.3. suspend는 함수가 “항상 비동기”라는 뜻이 아니라, ________/재개 가능하다는 뜻이다.4. 결과가 없는 비동기 작업을 시작할 때 주로 사용하는 빌더는 ________ 이다.5. 결과가 있는 비동기 작업을 시작하고 await()로 받는 빌더는 ________ 이다.6. 블로킹 I/O 작업은 보통 withContext(________)로 분리한다.7. 자식 코루틴이 모두 끝날 때까지 기다리는 안전한 범위를 만드는 함수는 ________ 이다.8. 자식 하나가 실패해도 다른 자식을 계속 수행하게..
[Kotlin] Sealed Class와 Result 패턴 복습과제 Sealed Class · Result 패턴 — 개념 빈칸 문제안내: ( )에 알맞은 말을 적으세요. 영어 키워드도 OK입니다.정답은 맨 아래에 있습니다. 1. Sealed Class1-1. sealed class는 가능한 ( )의 개수가 타입 정의에 고정되어 있다. 1-2. sealed class는 보통 ( )처럼 직접 인스턴스를 만들 수 없다. 1-3. 추가 데이터가 없는 상태 하나만 표현할 때는 data ( )를 쓴다. 1-4. 필드가 있는 상태는 data ( )로 만든다. 1-5. sealed의 하위 타입은 보통 ( ) 파일에 선언하며, 바깥에서 임의로 상속할 수 없다. 1-6. when에서 is OrderStatus.Paid처럼 분기하면, 해당 블록 안에서 ( ) cast로 status.paid..
[JAVA] 2. Java 기초 유튜브 동빈나 '자바 기초 프로그래밍 강좌'를 하되, 기본적으로 빠르게 넘어가야 할 부분은 개념만 정리해두었다.추가로 golang 개발자로서 golang과의 비교 관점을 넣어두려고 한다. 1. 변수와 상수 개념1-1. 변수와 상수변수(Variable): 프로그램 실행 중 값이 언제든지 변경될 수 있는 메모리 공간상수(Constant): 한 번 정해지면 값이 절대 변하지 않는 데이터1-2. 주요 개념다양한 자료형을 사용하여 변수를 만들고 출력하는 방법1) 변수의 선언과 초기화//int: 정수형 int = 100;//double: 실수형double = 173.5;//String: 문자열String = "이지연"; 2) 상수의 정의final 키워드를 사용하여 상수를 정의한다. static은 클래스에서 공유되는..
[JAVA] 1. Java 환경 세팅 1. JDK 설치https://www.oracle.com/java/technologies/downloads/#java17 Download the Latest Java LTS FreeSubscribe to Java SE and get the most comprehensive Java support available, with 24/7 global access to the experts.www.oracle.com최근 버전 26까지 나왔다.백엔드 프레임워크인 Spring Boot 3버전부터는 최소 Java 17이상이 필수이고, 보통 17을 유지하고 있기에 17로 설치하기로 함21/25는 더 강력한 가상스레드 기능이 있다는데 그건 차후에 시간이 되면 할일이다. 2. IntelliJ 다운로드https://www...
[복습] 1~3강까지 미션 [목표]Scope 5개를 상황만 보면 골라 쓸 수 있다 (let / apply / also 중심)패턴 A·B·C를 직접 타이핑할 수 있다data class, nullable, ?., ?:, takeIf를 결제 도메인 예제에 섞어 쓸 수 있다https://play.kotlinlang.org/에서 작성하면됨 문제를 풀기 위한 가상 결제 DTOdata class PaymentRequest( val orderId: String, val amount: Long, val idempotencyKey: String?, // 멱등키 — 없을 수 있음 val couponCode: String?)data class PaymentEntity( var orderId: String = "", v..
[Kotlin] Coroutine 기초 1.Coroutine 기초 개념2.꼭 알아야 하는 기초 API3.Go(goroutine)와 비교 포인트4.결제/도메인 시스템에서 코루틴 활용5.Go로 짜던 감각을 Kotlin으로 옮길 때 팁6.실무에서 자주 하는 실수 1.Coroutine 기초 개념코루틴은 Kotlin에서 제공하는 경량 동시성 모델이다.결제/주문 같은 백엔드 시스템은 DB 조회, 외부 PG 호출, 메시지 발생처럼 I/O 대기가 많기 때문에 coroutine을 이해하면 실무에 바로 연결 할 수 있다. 1) 코루틴의 핵심 3요소핵심은 3가지이다.suspend 함수(suspend fun) : 중단/재개 가능한 함수CoroutineScope: 코루틴 생명주기 관리 범위Dispatcher: coroutine이 실행될 스레드 풀 (IO, Defa..
[Kotlin] Collection API & 함수형 프로그래밍 - 람다/고차함수/스코프 함수 복습- Collection API- Sequence- 함수형 프로그래밍 핵심 개념 1. 람다/고차함수/스코프 함수 복습먼저, 오늘 학습 목표를 시작하기 전에 위 3가지를 확실히 복습하면 Collection API를 이해하기 쉬울 것같아서 정리한다. 람다 (Lambda)고차함수 (Higher-Order Function)스코프 함수 (Scope Function)1) 람다 (Lambda)이름 없는 함수를 값처럼 넘기거나 저장하는 문법이다.// 일반 함수fun add(a: Int, b: Int): Int { return a + b}// 람다 (같은 의미)val addLambda: (Int, Int) -> Int = { a, b -> a + b }println(add(1, 2..
[Kotlin] Scope Function 완전 정리 코틀린 Scope Function은 5개이다.- let- run- with- apply- also 처음엔 비슷해 보여서 헷갈리는데, 핵심은 딱 2가지이다.1. 객체를 블록 안에서 어떻게 참조하나? (this / it)2. 블록의 결과로 무엇을 반환하나? (람다 결과 / 객체 자신) 1. 함수 1. letnull이 아닐 때만 블록을 실행하고, it으로 값을 받아 변환한 결과를 돌려준다.val merchantId: String? = request.merchantIdval normalizedMerchantId = merchantId ?.trim() ?.takeIf { it.isNotEmpty() } ?.let { // 결제 시스템에서는 식별자 정규화가 중요 it.upp..