1. 확장 함수란?코틀린의 확장 함수(extension function)는 기존 클래스에 멤버 함수를 추가하는 것처럼 사용할 수 있도록 해주는 기능입니다. 확장 함수를 사용하면 클래스를 수정하거나 상속받을 필요 없이 새로운 메서드를 정의하여, 해당 클래스의 인스턴스에서 바로 호출할 수 있습니다. 1-1 확장 함수의 정의 방법확장함수를 정의하기 위해선 함수 이름 앞에 수신 객체 타입을 붙입니다. 수신 객체 타입은 확장 대상이 되는 클래스로 기본적인 형태는 아래와 같습니다.fun, 수신타입.확장함수() { ...} 1-2 기존 클래스를 확장해 기능을 추가하기예를 들어 문자열에 ''붙여 반환해주는 새로운 기능을 추가한다고 생각해봅시다.fun main() { val result = "안녕".singleQ..
전체 글
1. 객체코틀린은 하이브리드 객체-함수형 언어로 객체 지향과 함수형 프로그래밍의 프러다임을 모두 지원합니다. 객체는 데이터를 저장하는 val, var를 포함하며(프로퍼티), 클래스 내부에 정의된 함수를 통해 연산을 수행하는데 클래스 내부에 정의된 함수를 멤버 함수라고 합니다. 클래스는 프로퍼티와 멤버 함수를 정의하기 위한 요소입니다. 클래스에 속하는 val이나 var을 만든 것을 객체 생성, 인스턴스 생성이라고 합니다. 2. 클래스를 만드는 방법클래스의 정의는 class키워드, 클래스 이름, 본문(프로퍼티 정의나 함수정의)이 들어가며 기본적으로 public 접근 제한자를 갖습니다.class Animal { val name = "동물" fun move(): String { retur..
1. forfor 키워드는 주어진 컬렉션이나 범위에 속한 요소를 하나씩 순회하며 지정된 코드 블록을 실행합니다.for문의 기본 형태는 아래와 같습니다.for(변수 in 컬렉션 또는 범위) { //실행할 코드}fun main() { var sum : Int = 0 for(i in 1..3) { sum += i } println(sum) // 6출력}1..3은 1부터 3의 범위를 의미하며 각 값을 i에 대입해 반복해서 실행하게 됩니다. 2. 범위를 나타내는 두가지 방법코틀린에서는 범위를 생성할 때 ..과 until 두가지 방법을 제공합니다. 1. .. 연산자 양 끝 값을 포함한 범위를 만듭니다.val range = 1..5 // 1, 2, 3, 4 ,5 2. unti..
1. 함수함수는 일련의 동작을 묶어 프로그램을 체계적으로 구성하고 코드 재사용성을 높이는 기본적인 도구입니다.함수는 입력값(파라미터)을 받아 계산을 수행하고 결과를 반환하거나, 단순한 작업을 수행할 수 있습니다.그렇다면 코틀린에서는 함수를 어떻게 사용할 수 있을까요? 코틀린에서 함수를 표현하는 방법은 아래와 같습니다.fun 함수이름(p1: 타입, p2: 타입): 반환타입 { //~~~~~~~ return 결과}두 값을 더하는 함수를 작성한다면 아래와 같이 작성할 수 있습니다.fun sum(a : Int, b : Int): Int { return a + b}fun main() { val sumValue = sum(1, 2) println(sumValue)} 의미 있는 결과를 제공하지 ..

1. 식별자란? 식별자는 프로그램을 이루는 요소를 가리키 위해 사용한다. 데이터를 가리키는 식별자를 사용 할 때 기본적으로 선택하는 두 가지 사항이 존재합니다.식별자가 가리키는 내용이 프로그램 실행 동안 변할 수 있는가?단 한번만 어떤 값을 지정하면 그 이후 변하지 않는가?코틀린에서는 이런 변경 가능성을 두 가지의 키워드를 통해서 제어합니다. 2. var과 val코틀린에서는 식별자의 변경 가능성을 다음 두 키워드로 구분합니다.var : 가변(mutable) 변수, 값을 변경할 수 있다.val : 불변(immutable) 변수, 값을 단 한번만 초기화할 수 있다. (초기화 이후 내용 변경 불가) 가장 먼저 var에 대해 알아보자면 변할 수 있는 수로 값을 여러 번 재할당하거나 연산을 통해 수정할 수 있습..

1. 개요최근 기존 모놀리식(monolithic) 아키텍처 기반의 티켓 예매 프로젝트를 MSA(Microservices Architecture)로 전환해보았습니다. 이번 포스팅에서는 전환 과정에 대해 다루기에 앞서, 먼저 모놀리식 아키텍처와 MSA란 무엇인지 간단히 살펴보고, 두 가지 아키텍처의 차이점을 비교해보려 합니다. 2. 모놀리식(monolithic) 아키텍처란?모놀리식 아키텍쳐란 모든 로직이 하나의 애플리케이션 형태로 패키지 되어 서비스되고, 애플리케이션에서 사용하는 데이터 또한 한 곳에 모인 데이터를 참조해 서비스되는 형태를 의미합니다. 위와 사진과 같이 애플리케이션이 하나의 패키지로 서비스 되기 때문에 배포가 단일 프로세스가 이루어져 간단하고, 한 곳에서 모든 로직을 관리할 수 있어 직관..

1. 개요프로젝트를 진행하며 티켓조회 성능 개선을 위해 캐싱 기능을 도입하기로 했습니다.티켓 데이터는 일단 생성되면 잘 수정되지는 않지만 사용자 요청이 집중될 때 자주 조회되는 특성이 있습니다. 이러한 특성을 고려해 티켓(공연) 정보를 조회 성능을 높이기 위해 캐싱을 도입하기로 결정했습니다. 2. 캐싱이란?캐싱은 데이터나 연산 결과를 미리 저장해두고 필요할 때 빠르게 접근할 수 있는 기술입니다. 일반적으로 반복적으로 조회되는 데이터나 연산속도가 느린 데이터를 저장하는 역할을 하며 캐시에 저장된 데이터는 원본 데이터에 비해 훨신 빠르게 접근할 수 있다는 장점이 있습니다. 이로 인해 시스템 응답속도를 개선하고, 서버의 부하를 줄일 수 있습니다.응답 속도 개선 : 캐시는 메모리같은 저장소를 활용하기 때문에 빠..

1. nGrinder란?nGrinder는 Naver에서 제공하는 오픈 소스 성능 테스트 도구로, 웹 애플리케이션, API, 서버의 성능을 측정하고 부하를 시뮬레이션하는 데 매우 유용한 도구입니다. 특히, 자바 기반의 스크립트 언어(Jython, Groovy)를 지원하여 코드 작성이 용이하며, 분산 환경에서 대규모 성능 테스트를 간편하게 수행할 수 있도록 설계되었습니다. 지금부터는 Ngrinder를 설치하고 스크립트 작성하는 방법을 알아보겠습니다. 2. docker-compose.yml 파일 작성version: '3.8'services: controller: image: ngrinder/controller restart: always ports: - "9000:80" ..
문제https://softeer.ai/app/assessment/index.html?xid=167653&xsrfToken=Fr2KSShvvWT04sT2rolEp88x7sgzXUpO&testType=practice Candidate | Softeer Assessment UI softeer.ai 문제풀이문제 조건은 무엇인가?3초동안 각 친구들이 수확한 과일의 최대 수확량을 구해야 한다 이 때 친구들의 경로는 겹치면 안된다. 접근 방법은?DFS를 통해서 전체 경우의 수를 구해준다-> 한 친구의 3초동안의 수확이 끝나면 다음 친구의 수확량을 구해준다.(workerList에 각 친구의 시작위치를 저장해 놓고 idx를 파라미터로 넘겨서 다음 친구의 수확을 시작) 코드import java.io.*;import jav..
·SQL
문제https://school.programmers.co.kr/learn/courses/30/lessons/293261 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 문제풀이1. FISH_NAME_INFO의 FISH_NAME 필드와 나머지 FISH_INFO의 필드가 필요!!FISH_TYPE을 이용해 두 테이블을 JOIN해준다 2. 서브쿼리를 통해 타입별 가장 큰 물고기 길이 값들을 구해준다. 쿼리SELECT I.ID, N.FISH_NAME, I.LENGTH FROM FISH_INFO I JOIN FISH_NAME_INFO N ON I.FISH_TYPE = ..