전체 글

개발만 하기는 심심하니 기록 또 기록..
· Language.
스코프 함수 스코프함수란 객체의 범위를 지정하는 데 사용되는 특수한 함수로, 객체 지향 프로그래밍에서 객체의 메서드와 유사하게 작동하지만, 스코프 함수는 객체의 범위를 한정하는 것이 목적이다. 코틀린에서는 다음 5가지의 스코프 함수를 제공한다. let, apply, run, als, with 이 그림을 참고하며 보도록 하자. let let 함수는 객체를 인자로 받아 람다식을 실행하고 결과를 반환한다. 예를 들어, 아래의 코드는 nullableVariable이 null이 아닌 경우 println을 실행한다. nullableVariable?.let { value -> println(value) } let 함수는 null 값 처리에 유용하며, 예를 들어, 아래의 코드는 nullableVariable이 null..
· Language.
고차 함수 코틀린은 함수형 프로그래밍을 지원하기 위해서 고차 함수를 지원한다. 고차함수는 다른 함수를 매개변수로 받거나 함수를 반환하는 함수를 말한다. 이를 통해 코드의 재사용성과 추상화 수준을 높일 수 있다. 오늘은 고차 함수 중 map, filter, reduce, fold, forEach, any, all, groupBy, sortedBy, zip, flatmap, takeWhile, dropWhile까지 알아보겠다. map() map()은 컬렉션의 각 요소에 대해 주어진 함수를 적용하여 새로운 컬렉션을 반환한다. val numbers = listOf(1, 2, 3, 4, 5) val doubled = numbers.map { it * 2 } // [2, 4, 6, 8, 10] filter() fi..
· Language.
개요 코틀린 인 액션 책 내용중 람다 파트에서 함수를 인자로 사용했을때, 무명객체를 사용했을때 차이와 여러 중요해보이는 지식들이 많아 글을 정리해보려고 한다. 람다 Lambda 람다는 함수형 프로그래밍에서 함수를 간결하게 표현하는 방법 중 하나다. 보통 함수를 정의하고 호출하는 과정을 생략하고, 함수의 내용만을 직접 표현한다. 람다는 함수형 인터페이스를 구현하는 익명 함수다. 즉, 람다는 함수형 인터페이스를 구현하기 위한 구현체로서, 람다 식을 사용해 구현된 함수형 인터페이스는 일반적인 인터페이스를 구현한 클래스와 같이 사용될 수 있다. 무명 객체 자바에서는 과거 클릭과 같은 이벤트 처리를 위해서는 인자로 무명객체를 생성해 받아야했다. button.setOnClickListener(new View.OnC..
· Language.
개요 코틀린 인 액션을 읽으면서 sequences를 사용해 연산 성능을 향상시키는 것을 보고 백엔드 서버개발이나 알고리즘 문제를 풀 때 유용하게 사용되지 않을까하는 생각이 들어 개념을 더 잡기위해 공부를 해본다. 지연 계산 Lazy Evaluation 지연 계산은 값이 필요할 때까지 계산을 미루는 방식으로 코드에서 값이 필요한 시점에서 계산을 수행하며, 그 이전에는 계산을 수행하지 않는다. 이는 컴퓨팅 자원을 효율적으로 사용할 수 있도록 도와준다. 만약 모든 계산을 미리 수행한다면, 그 중 일부는 실제로 사용되지 않을 수 있다. 따라서 필요한 계산만 수행한다면 자원을 절약할 수 있다. 지연 계산은 대개 함수형 프로그래밍에서 사용되고, 함수형 프로그래밍에서는 값 자체보다는 값을 생성하는 함수를 중심으로 프..
개요 도메인 주도 설계 공부 3일차 오늘은 애그리거트에 대해서 알아보겠습니다. 애그리거트란? 애그리거트란 관련된 객체들을 모아 하나의 단위로 취급하는 개념으로, 객체지향 프로그래밍에서, 애그리거트는 객체 간의 관계를 정의하는 방법 중 하나로, 논리적으로 관련된 객체들을 그룹화하여 하나의 묶음으로 다룬다. 쉽게 말해 여러 개의 객체를 묶어 하나의 큰 객체로 다루는 것이다. 애그리거트는 일반적으로 Entity, Value로 구성되고, 애그리거트는 엔티티와 밸류의 관계를 나타내는 루트 root 엔티티를 포함하며 루트 엔티티는 애그리거트에 속한 다른 객체들과 관계를 정의한다. 애그리거트는 불변성을 유지하며, 내부 구현을 캡슐화한다. 애그리거트는 DDD 디자인 패턴에서 중요한 개념 중 하나로 애그리거트를 사용하여..
개요 나는 지금 DDD (도메인 주도 설계) 에 중요성을 느끼고 나서 개념들을 공부하기로 시작했고 DDD에 대해서 내가 공부한 내용들을 포스팅했다. 이번엔 바운디드 컨텍스트라는 용어를 공부해 볼 것이다. Bounded-Context 바운디드 컨텍스트는 도메인 주도 설계에서 처음 소개된 개념이다. 바운디드 컨텍스트는 큰 시스템을 여러 개의 작은 컨텍스트로 나누어 각 컨텍스트 내에서 특정한 비즈니스 규칙과 데이터 모델이 적용되는 것을 의미한다. 각 컨텍스트는 독립적으로 설계되고 구현되며, 서로 다른 컨텍스트 간에는 인터페이스를 통해 상호작용한다. 바운디드 컨텍스트는 도메인 안에서 특정한 비즈니스 문제 영역을 나타내며 그 영역 안에서 용어,개념,규칙등이 일관되게 적용된다. 바운디드 컨텍스트는 도메인 모델링을 ..
개요 도메인 주도 설계 개발자라면 코드를 짜는 것 뿐만 아닌 효율적으로 아키텍처를 구성하고 관리할 수 있는 환경을 만들어 나가야한다고 생각한다. 전체적인 틀을 잡지 않으면 효율적인 코드는 존재할 수 없다고 생각한다. 그렇기 때문에 도메인 주도 설계에 대해서 공부하려고 마음 먹었다. DDD 도메인 주도 설계란? 도메인 주도 설계는 소프트웨어 개발에서 사용되는 설계 방법론 중 하나로 이 방법론은 비즈니스 도메인을 중심으로 소프트웨어를 설계함으로써 비즈니스 문제를 해결하고, 유지보수가 가능한 소프트웨어를 만드는 것을 목적으로 한다. 도메인 주도 설계는 소프트웨어 개발 비즈니스 도메인과 관련된 용어, 개념, 규칙 등을 중심으로 이루어지도록 하고 이를 위해 도메인 모델이라는 개념을 도입해 비즈니스 도메인의 개념..
개요 교내 프로젝트중 교내 계정 통합 소셜 로그인 서비스 GAuth를 개발하는 중에 가입된 유저를 검색하는 api가 있다 학년 반 키워드를 입력받아 검색 기능을 처리했고 만약 0을 입력받으면 전부 검색한다는 요구사항이 있었다. 그리고 그걸 내가 개발한게 아니고 팀원이 개발을 해서 pull request를 보내고 코드리뷰를 하는 과정에서 궁금증이 생겼다. findAllByState (State는 CREATED, PENDING으로 CREATED를 가져오는 jpa 메서드)로 유저 리스트를 가져오고 if(grade != 0) users.filter{ it.grade == grade } 이런식으로 애플리케이션 내부로직에서 필터작업을 했다. 그런데 뭔가 아쉬운 느낌이 들었다. 과연 애플리케이션 내부 로직으로 유저 ..
개요 Kotlin Spring boot로 클린아키텍처를 적용하며 프로젝트를 만들어가고 있을때 RequestDto를 그냥 Dto로 변경해주고(toDto) 엔티티로 다시 변환할때(toEntity) copy() 메서드를 사용하여 password를 인코딩 시켰다. 이는 컨버터에서 패스워드 인코더를 의존하지 않고 서비스에서만 의존하는다는 이점이 있었다. (toDto에서 패스워드를 바로 인코딩시키면 패스워드 인코더를 컨버터가 의존하게 된다.) 여기서 copy()메서드는 새로운 객체를 만들어 다른 메모리공간에 할당한다는 점을 보아 성능상으로 차이가 많이 날까 궁금했다. 그렇게 성능 차이를 찍어본 결과 copy()를 사용하는 것이 조금 더 빨랐다. 그런데 갑자기 궁금해졌다 다른 메모리를 사용하여 공간을 할당한다해도 이..
khope
메모장 희망편