본문 바로가기

전체 글

(41)
[Spring] Filter, Interceptor 그리고 AOP 개요프로그램을 개발할 때 공통적인 기능(예: 로깅, 인증, 트랜잭션 관리)을 분리하여 코드의 유지보수성을 높이는 개념이관심사 분리(Separation of Concerns, SoC)입니다. 예를 들어, 로그를 출력하기 위해 객체의 메소드 내부에 직접 로깅 코드를 추가할 수 있지만,이 방식은 모든 객체에서 중복된 로직을 반복적으로 작성해야 하는 문제가 있습니다. 또한, 세션 관리, 트랜잭션 처리, 인증/인가(Authorization) 체크 등 다양한 공통 기능도 동일한 문제를 가지며,이러한 코드가 객체 내부에 쌓이면 핵심 비즈니스 로직보다 보일러 플레이트 코드가 많아지는 문제가 발생합니다. 이를 해결하기 위해 Spring에서는 Filter, Interceptor, AOP를 통해 관심사를 분리할 수 있도록 ..
[Spring] DTO와 VO 개요 프로그래밍을 하다 보면 데이터를 전달하고 표현해야 한다는 사실에 의문을 가지는 사람을 없을 것입니다.그렇다면 어떻게(how)라는 방법이 중요한 문제라 생각합니다. 본 페이지에서는 Spring Boot를 공부하면서 DTO와 VO를 활용해 데이터를 전달하고 표현하는 방식에 대해 설명합니다.내용1. DTO (Data Transfer Object)DTO는 Controller, Service, View 간 데이터를 주고받는 용도로 사용합니다.오로지 데이터를 저장하고 전달하는 역할에 집중하기 위해 로직을 포함하지 않습니다. (getter와 setter만을 가집니다.)일반적으로 식별자나 특정 속성에 의해 두 객체가 동일하다 판단합니다. 예시// data class로 선언함으로써 getter와 setter 자동 ..
[Kotlin] reduce()와 fold() 개요Collection에서 제공하는 메소드에서 reduce()와 fold()의 차이를 알아봅니다.내용reduce()와 fold() 모두 accumulation(누산) 작업이 요구될 때 사용하는 Collection 메소드입니다.두 메소드 모두 Collection의 요소들을 차례로 누적하여 하나의 값으로 만드는데 사용됩니다. 하지만 초기값 지정 여부에 따라 중요한 차이가 있습니다.reduce() : 초기값 지정 불가 (첫 번째 요소를 초기값으로 사용)fold() : 초기값 지정 가능 (명시적으로 지정된 초기값 사용)이로 인해 반환되는 결과가 다릅니다. 1. 기본 동작val numbers = listOf(1, 2, 3)val sumByReduce = numbers.reduce { acc, num -> acc ..
[Kotlin] Kotlin 기본 문법 by "Code with Joyce" 2편 - (2) Code with Joyce님과 함께하는 '코틀린 3강으로 끝내기 - 2편 기본 문법'이다. 1. Companion Object 가장 이해하기 난해했던 내용으로 사실상 '암기'하기로 결정 내린 부분이다. Joyce님이 Companion Object를 설명할 때 클래스의 static 멤버(member)로 소개했으며 효과 또한 static 멤버와 동일해 보였기 때문에 'Companion Object는 static 멤버이다'라고 이해했다. 그러나 다른 사람들의 의견과 Kotlin 공식문서를 통해서 Companion Object는 static 멤버와 유사할 뿐이지 실제 객체의 인스턴스 멤버라고 암기했다. 각설하고, 클래스의 인스턴스(instance)와 독립적으로 사용될 클래스 멤버를 정의하기 위해 Compani..
[OOP] OOP의 5원칙 1. OOP(Object-Oriented Programming)란 프로그램 설계방법론이자 개념의 일종으로, 프로그램을 단순히 데이터와 처리 방법으로 나누는 것이 아니라 프로그램을 수많은 객체(object)라는 기본 단위로 나눠서 이들의 상호작용으로 프로그래밍하는 방식이다. 이러한 OOP에서 꼭 지켜야 할 5개의 원칙을 객체지향 5원칙이라 한다. 2. 객체지향 5원칙 SPR(단일 책임 원칙, Single Responsibility Principle) : 객체는 오직 하나의 책임을 가져야 하며, 클래스를 변경하는 이유는 단 하나의 이유여야 한다. OCP(개방-폐쇄 원칙, Open-Closed Principle) : 객체는 확장에 대해서는 개방적이고 수정에 대해서는 폐쇄적이어야 한다는 원칙이다. 즉, 객체 기..
[Kotlin] Kotlin 기본 문법 by "Code with Joyce" 2편 - (1) Code with Joyce님과 함께하는 '코틀린 3강으로 끝내기 - 2편 기본 문법'이다. 1. 람다(Lambda) 람다식은 간단히 람다라고도 불리는 익명 함수(이름 없는 함수)이며 우리가 마치 value처럼 다룰 수 있다. 람다는 메서드의 파라미터로 넘겨줄 수 있고 return 값으로도 활용할 수 있다. 람다를 선언하는 방법은 다양하다. // 기본형 val lambdaName : Type = { argumentList -> codeBody } // 람다를 생성하여 greeting에 할당 val greeting: () -> Unit = { println("Hello") } // number의 자료형이 추론되므로 지정할 필요가 없음 val square1 : (Int) -> (Int) = { number ..
[Kotlin] Kotlin 기본 문법 by "Code with Joyce" 1편 - (2) 1. 클래스(Class) 클래스의 기본형은 다음과 같다. // class 클래스명 constructor(변수명 : 자료형) class Human constructor(name: String) { val name = name fun eatingCake() { println("This is so YUMMYYYY") } } fun main() { // 인스턴스를 생성할 때 new 연산자를 사용하지 않음 val human = Human() human.eatingCake() } 클래스명 옆에 오는 생성자를 기본 생성자(primary constructor)라고 하며, 기본 생성자에 주석 혹은 visibility modifiers(public, private 등의 접근 제한자)가 없을 경우 constructor 연산..
[Kotlin] Kotlin 기본 문법 by "Code with Joyce" 1편 - (1) kotlin을 공부하게 된 계기는 바로 '취업'이다. 불과 2년 전까진 kotlin의 인기를 몰랐고, Java로 충분히 취업할 수 있다고 생각하고 있었다.(사실 외면하고 있던 걸지도) 학교를 졸업하고 취준생이 된 지금은 kotlin의 강세를 온몸으로 느끼고 있다. 엄청난 위기감을 체감하고 있기 때문에 kotlin도 공부하게 되었다. 그래도 '컴퓨터공학 전공자'라는 명찰을 달고 있기도 하고 kotlin이 Java 문법과 유사해서 금방 익힐 수 있었다. 유튜버 "Code with Joyce"님의 '코틀린 3강으로 끝내기 - 1편 기본 문법'으로 kotlin 문법을 공부했다. 간략하게 핵심만 짚어서 알려주셔서 기본 문법을 살펴보기 좋다고 느꼈고, 공부한 내용을 정리하려고 한다. kotlin은 안드로이드 앱 개..