반응형

최신 글

more

[Java] 레코드 클래스 살펴보기 (Record Class)

Record Class자바의 레코드 클래스는 Java 14부터 프리뷰 상태로 도입되어 Java 16에서 정식으로 지원하게 된 새로운 클래스다. 레코드는 데이터를 담기 위한 클래스를 더욱 간결하고 안전하게 작성하기 위한 기능을 제공한다. 레코드 클래스를 사용하면 기존 POJO 클래스를 작성할 때 필요한 보일러플레이트 코드를 줄이는 효과를 얻을 수 있다. 레코드의 특징final 클래스로 상속이 불가능하다.인터페이스 구현이 가능하다.모든 필드는 불변(private final)으로 값을 변경할 수 없다.getter 메서드를 기본으로 제공한다.모든 필드를 포함한 생성자를 기본으로 제공한다.toString(), equals(), hashCode() 메서드를 기본으로 제공한다. 클래스와 레코드 비교아래 두 예제는 동..

Java 2024.07.12 0

[Algorithm] 배열의 구간 합 알고리즘 (Prefix Sum) - Java

구간 합구간 합(Prefix Sum)은 주어진 배열의 특정 구간, 즉 배열의 연속된 요소들의 합을 의미하다. 예를 들어, 배열이 [1, 2, 3, 4, 5]라 할 때 2번째 요소부터 4번째 요수까지의 구간 합은 2 + 3 + 4로 9가 된다. 자바에서 구간 합을 구하기 위해 일반적으로 다음과 같이 반복문을 사용한다.int[] arr = {1, 2, 3, 4, 5};int sum = 0;for (int i = 1; i  다음과 같이 2차원 배열의 경우에는 2중 반복문을 통해 구한다.1 2 34 5 67 8 9 int[][] matrix = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};int sum = 0;for (int i = 0; i   구간 합 알고리즘구간 합 알고리즘은 주어진 배열의 ..

[Spring] 스프링 부트 3.2 RestClient 살펴보기

RestClientRestClient는 Spring framework 6.1(Spring boot 3.2)에 새로 추가된 동기식 HTTP Client로 Spring 애플리케이션에서 REST API 호출을 위한 HTTP 요청을 보낼 수 있다.RestClient의 등장으로 같은 동기식 HTTP Client인 RestTemplate을 대체하여 사용할 수 있으며, fluent API를 제공하여 현대적인 방식으로 코드를 작성할 수 있게 되었다. RestClient의 등장 이유기존의 RestTemplate는 2009년 Spring 3.0에 추가된 상당히 오래된 동기식 HTTP Client이다. 그로 인해 몇 가지 단점들이 존재한다.RestTemplate는 수많은 메서드가 오버로딩되어 제공하기 때문에 기능을 사용하는..

Spring 2024.05.30 0

[Algorithm] 10진수를 n진수로, n진수를 10진수로 변환하기 (진법 변환) - Java

자바의 진법 변환진법 변환은 알고리즘 문제에서 자주 활용된다. 자바에서는 이를 쉽게 활용할 수 있도록 함수를 제공하고 있다.자바에서 제공하는 함수를 통해 진법을 변환하는 방법과 직접 구현하여 변환하는 방법을 알아보고자 한다. 10진수를 N진수로 변환하기자바 내장 함수 사용10진수의 숫자를 N진수로 변환하기 위해 java.lang 패키지에서 Integer와 Long 클래스의 toString() 메서드를 제공한다.첫 번째 인자에는 변환할 수, 두 번째 인자에는 변환할 진법을 넣어 쉽게 변환할 수 있다.이 외에도 java.math 패키지의 BigInteger 클래스의 toString() 메서드를 통해 진법 변환을 할 수도 있다.public class Main { public static void main..

[Algorithm] 파스칼의 삼각형 알고리즘 구현하기 (Pascal's triangle) - Java

파스칼 삼각형파스칼의 삼각형은 블레즈 파스칼에 의해 제안된 삼각형으로 구성된 배열이다.파스칼의 삼각형은 다음과 같은 규칙이 있다.각 행의 첫 번째와 마지막의 숫자는 1이다.각 행의 중간에 위치한 숫자는 이전 행의 왼쪽 위치에 있는 숫자와 바로 위에 있는 숫자의 합이다. 구현위 두 규칙을 통해 파스칼의 삼각형을 2차원 배열로 구현해 보자.public class Main { public static void main(String[] args) { int n = 7; // 파스칼의 삼각형 만들기 int[][] pascal = new int[n][]; for (int i = 0; i // 출력1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10..

[Java] 병합 정렬 (Merge Sort) - 정렬 알고리즘 (Sorting Algorithm)

병합 정렬 (Merge Sort) 병합 정렬(Merge Sort)은 효율적이고 안정적인 정렬 알고리즘 중 하나로, 분할 정복(Divide and Conquer) 알고리즘을 따른다. 병합 정렬의 기본 개념은 다음과 같다. 분할(Divide) : 입력받은 배열을 절반으로 분할하고, 길이가 1이 될 때까지 분할을 반복한다. 정복(Conquer) : 각 분할된 배열에 대해 재귀적으로 정렬을 수행한다. 병합(Merge) : 분할한 배열을 병합하면서 정렬한다. 두 개의 정렬된 배열을 하나의 정렬된 배열로 합치는 과정으로 병합 과정에서 실제 정렬이 이루어진다. 병합 정렬의 시간 복잡도는 O(n log n)으로 길이가 긴 배열을 안정적으로 정렬할 때 적합한 알고리즘이다. 병합 정렬의 장단점 장점 O(n log n)의 ..

[Java] 싱글톤 패턴(Singleton Pattern) - 개념 및 예제

싱글톤 패턴(Singleton Pattern) 싱글톤 패턴은 객체 지향 프로그래밍에서 특정 클래스가 단 하나만의 인스턴스를 생성하여 사용하기 위한 패턴이다. 생성자를 여러 번 호출하더라도 인스턴스가 하나만 존재하도록 보장하여 애플리케이션에서 동일한 객체 인스턴스에 접근할 수 있도록 한다. 싱글톤 패턴을 사용하는 이유 커넥션 풀, 스레드 풀, 디바이스 설정 객체 등과 같은 경우 인스턴스를 여러 개 만들게 되면 불필요한 자원을 사용하게 되고, 프로그램이 예상치 못한 결과를 낳을 수 있다. 따라서 객체를 필요할 때마다 생성하는 것이 아닌 단 한 번만 생성하여 전역에서 이를 공유하고 사용할 수 있게 하기 위해 싱글톤 패턴을 사용한다. 싱글톤 패턴의 장단점 장점 유일한 인스턴스 : 싱글톤 패턴이 적용된 클래스의 ..

Java 2023.12.03 1

[Kopring] JPA Auditing - 생성/수정 시각 설정 및 테스트

JPA Auditing 프로젝트 작성 시 트래킹을 목적으로 엔티티의 생성 시간과 수정 시간 등을 테이블에 저장하여 관리해야 한다. 이를 쉽게 구현하기 위해 Spring Data JPA는 Auditing이라는 엔티티의 변경 내역을 추적하고 기록하는 기능을 제공한다. 이를 통해 엔티티의 생성일자, 수정일자 등을 쉽게 관리할 수 있다. 다음은 JPA Auditing 기능을 사용하지 않고 수동으로 관리하는 경우의 User 엔티티다. @Entity class User( ... ) { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) val id: Long? = null ... @Column(nullable = false, updatable = false) var ..

[Kotlin] 코틀린 문자열 템플릿(String Templates) 이해하기

코틀린에는 문자열 템플릿이 있다. 문자열 내에 변수나 표현식을 사용하여 값을 문자열에 포함시킬 수 있도록 한다. 주로 문자열을 동적으로 구성할 때 사용하며, 코드를 간결하게 작성하는 데 도움이 된다. 변수 이름 앞에 $를 붙이면, 문자열 템플릿이 변수의 값을 문자열에 담아준다. fun main() { val number = 42 println("number = $number") } // 출력 number = 42 $ 다음에 오는 대상이 숫자인 경우에는 이를 인식하지 않으며 그대로 출력한다. 또한, $ 다음에 문자가 오는 경우 $ 앞에 역슬래시(\)를 붙여 그대로 출력할 수 있다. fun main() { val number = 123 println("$number") println("$123") print..

Kotlin 2023.11.20 2

[Clean Code] 15. Junit 들여다보기 - 클린 코드 정독하기

JUnit 프레임워크 JUnit은 자바 프레임워크 중에서 가장 유명하다. 개념은 단순하며 정의는 정밀하고 구현은 우아하다. JUnit은 저자가 많지만 시작은 켄트 벡과 에릭 감마, 두 사람이 비행기를 타고 가다 JUnit을 만들었다. 지금부터 살펴볼 예제는 문자열 비교 오류를 파악할 때 유용한 모듈이다. ComparisonCompactor는 두 문자열을 받아 차이를 반환한다. 예를 들어, ABCDE와 ABXDE를 받으면 를 반환한다. 다음은 ComparisonCompactor 모듈의 테스트 코드다. [15-1] ComparisonCompactorTest.java import junit.framework.ComparisonCompactor; import junit.framework.TestCase; pub..

인기 글

[Git / Github] 깃허브 클론 (clone) 하는 방법 (깃허브 리포지토리 로컬로 복사)

Clone Clone은 깃허브 Repository에 있는 파일을 내 로컬 컴퓨터로 복사해오는 작업이다. 리포지토리를 복사해 오기 위해서는 리포지토리의 주소를 알아야 한다. Clone 할 리포지토리를 깃허브에서 접속하면, 중앙에 Code 버튼을 클릭하여 깃허브 리포지토리 주소를 복사할 수 있다. 다음은 git bash에서 git clone 명령어를 통해 복제하는 데, git bash CLI가 작업하는 위치에 복사되기 때문에 저장할 장소 정한 뒤 clone을 하도록 하자. 저장할 폴더 위치에서 마우스 우클릭을 하여 Git Bash Here을 클릭하면 해당 위치에서 쉽게 Clone을 할 수 있다. Git Bash에서 저장할 공간을 정하고자 한다면, pwd 명령어를 통해 현재 위치를 확인하고, cd 명령어를 통..

Git & Github 2022.08.27 2

[Git / Github] 포크 (Fork) 하는 방법 (오픈 소스 프로젝트 복제하기)

Fork란? 오픈 소스 프로젝트를 공부하거나 Contributors가 되고 싶을 때, 해당 원격 저장소(Remote Repository)를 자신의 원격 저장소로 복사할 수 있다. 이를 Fork라 한다. 깃허브의 경우 공개된 모든 자료가 오픈 소스로 다른 사람의 자료를 Fork 할 수 있다. 즉, fork는 다른 계정의 원격 저장소를 내 계정으로 가지고 올 때 사용한다. Fork 하는 방법을 알기 위해 웹 개발 프레임워크로 유명한 Spring boot의 오픈 소스 코드를 fork 해보겠다. 오픈 소스 프로젝트 Fork 하기 https://github.com/spring-projects/spring-boot GitHub - spring-projects/spring-boot: Spring Boot Spring..

Git & Github 2022.08.27 0

[OOP] 디자인 패턴(Design Pattern)이란? - 장점 및 종류

디자인 패턴(Design Pattern)이란? 디자인 패턴은 개발하면서 발생하는 반복적인 문제들을 어떻게 해결할 것인지에 대한 해결 방안으로 실제 현업에서 비즈니스 요구 사항을 프로그래밍으로 처리하면서 만들어진 다양한 해결책 중에서 많은 사람들이 인정한 모범 사례(Best Practice)다. 이러한 디자인 패턴은 객체 지향 4대 특성(캡슐화, 상속, 추상화, 다형성)과 설계 원칙(SOLID)을 기반으로 구현되어 있다. 디자인 패턴의 장점 재사용성 : 반복적인 문제에 대한 일반적인 해결책을 제공하므로, 이를 재사용하여 유사한 상황에서 코드를 더 쉽게 작성할 수 있다. 가독성 : 일정한 구조로 정리하고 명확하게 작성하여 개발자가 코드를 이해하고 유지보수하기 쉽게 만든다. 유지보수성 : 코드를 쉽게 모듈화 ..

Java 2023.10.05 43

[Redis] 윈도우10 환경에서 레디스 설치하기

Redis 설치 프로그램 다운로드 아래 링크에 접속하여 msi 확장자의 Redis 설치 프로그램을 다운로드한다. https://github.com/microsoftarchive/redis/releases Releases · microsoftarchive/redis Redis is an in-memory database that persists on disk. The data model is key-value, but many different kind of values are supported: Strings, Lists, Sets, Sorted Sets, Hashes - microsoftarchive/redis github.com 설치 프로그램 실행 설치할 경로 지정 포트 설정(Redis의 기본 포트는..

Redis 2023.02.11 0

[Java] 자바 스택(Stack) 클래스 메서드 정리 및 활용

스택이란? 스택은 ‘쌓다.’, ‘쌓이다.’와 같은 뜻을 가진 용어로, 접시를 높이 쌓아 놓은 형태와 비슷한 자료구조이다. 즉, 데이터를 순서대로 쌓는 자료구조이다. 실생활에서 흔히 접할 수 있는 스택은 프링글스와 같은 원통에 들어가 있는 과자를 떠올리면 이해하기 쉽다. 가장 위에 있는(가장 나중에 들어간) 과자를 먼저 꺼내어 먹는 구조이기 때문이다. 스택은 가장 나중에 들어온 데이터가 가장 먼저 빠져나가는 후입선출(LIFO : Last In First Out) 구조로 되어 있어, 프로그래밍에서 데이터가 입력된 순서대로 처리되는 것이 아닌, 가장 나중에 들어온 데이터를 먼저 처리할 때 사용한다. 스택의 특징 후입선출 (LIFO : Last In First Out) 구조 : 먼저 들어온 데이터가 나중에 빠져..

Java 2022.10.10 0

[C언어] 출력 함수 printf() 정리 및 예시(Output functions in C language)

출력은 컴퓨터 내부의 내용을 사람이 인식할 수 있는 형태로 모니터, 프린터, 스피커 등에 표시해 주는 과정을 뜻합니다. C언어에서 출력을 수행할 수 있도록 라이브러리 함수(printf, putchar, puts 등)를 제공하고 있습니다. printf() 함수 printf() 함수는 변환명세(%c, %d, %lf, %u 등)를 사용하여 형식에 맞춰 출력해주는 함수입니다. 단순 문자열을 출력, 이스케이프 문자를 통한 출력, 변환명세를 포함하여 출력 등 다양한 형식으로 사용할 수 있습니다. printf()의 함수 사용 양식은 다음과 같습니다. printf("문자열 %d %lf %c \n", 정수형 인수, 실수형 인수, 문자형 인수); 일반 문자열 출력 예시 1 2 3 4 5 6 7 8 9 10 #include..

C 2021.09.25 1

[Linux] 리눅스의 사용자 권한과 chmod 명령어

리눅스의 사용자 권한 확인하기 리눅스의 파일과 디렉토리는 사용권한이 존재한다. 사용 권한에 대해 알아보기 위해 다음 명령어로 디렉토리와 파일을 생성한다. mkdir hello nano hello.java 파일과 디렉토리를 생성한 뒤, ls -l 명령어를 통해 목록을 살펴보면 다음과 같은 정보를 얻을 수 있다. hello 디렉토리는 drwxrwxr-x hello.java 파일은 -rw-rw-r-- 이를 해석하면, 첫 글자 d와 -에서 d : 디렉토리(directory)를 뜻한다. : 디렉토리가 아닌(not directory) 것을 뜻한다. 이어지는 r, w, x는 읽기 권한(read permission), 쓰기 권한(wirte permission), 실행 권한(execute permission)을 나타낸다..

Linux 2022.08.25 0

[Network] 포트(Port) 개념 정리 및 종류

포트(Port) 포트는 “논리적인 접속장소”를 뜻하며, 인터넷 프로토콜인 TCP/IP를 사용할 때 클라이언트 프로그램이 네트워크 상의 특정 서버 프로그램을 지정하는 방법으로 사용한다. 네트워크 상에서 통신을 할 때 IP 주소를 바탕으로 해당 서버가 있는 컴퓨터에 접근하게 된다. 하나의 IP에서 여러 애플리케이션을 실행할 경우, 컴퓨터에는 여러 개의 서버가 실행하게 된다. 이때 포트번호를 통해 대상 IP 기기의 특정 애플리케이션의 서버에 접속할 수 있도록 알려주어야 한다. 위 그림은 한 서버 인스턴스에서 웹 서버와 메일 서버 두 개를 동시에 실행 중인 상황을 뜻한다. 이 경우 IP 주소만으로는 어느 서버로 요청을 보내는지 알 수 없다. 따라서 포트 번호를 통해 receiver를 특정하여 어느 서버로 보내는..

네트워크(Network) 2022.10.03 0

[Java] 싱글톤 패턴(Singleton Pattern) - 개념 및 예제

싱글톤 패턴(Singleton Pattern) 싱글톤 패턴은 객체 지향 프로그래밍에서 특정 클래스가 단 하나만의 인스턴스를 생성하여 사용하기 위한 패턴이다. 생성자를 여러 번 호출하더라도 인스턴스가 하나만 존재하도록 보장하여 애플리케이션에서 동일한 객체 인스턴스에 접근할 수 있도록 한다. 싱글톤 패턴을 사용하는 이유 커넥션 풀, 스레드 풀, 디바이스 설정 객체 등과 같은 경우 인스턴스를 여러 개 만들게 되면 불필요한 자원을 사용하게 되고, 프로그램이 예상치 못한 결과를 낳을 수 있다. 따라서 객체를 필요할 때마다 생성하는 것이 아닌 단 한 번만 생성하여 전역에서 이를 공유하고 사용할 수 있게 하기 위해 싱글톤 패턴을 사용한다. 싱글톤 패턴의 장단점 장점 유일한 인스턴스 : 싱글톤 패턴이 적용된 클래스의 ..

Java 2023.12.03 1

[Java] 자바의 메서드 개념 정리 (메서드의 정의와 호출, main 메서드)

메서드 (Method) 메서드는 클래스(Class)의 내부에 존재하는 영역으로, 특정 기능을 하는 코드를 묶어서 나타내는 것이다. 즉, 특정 기능을 수행하기 위한 코드들의 집합체이다. 특정 기능을 수행한다는 것은 데이터를 입력받아 해당 데이터를 일련의 처리 과정을 통해 만들어진 결괏값을 반환하는 것을 의미한다. // 클래스(Class) public class Main { // 메서드(Method) public static void main(String[] args){ // 특정 기능을 구현하는 곳 } } 함수와 메서드 메서드는 다른 언어(C, C++)의 함수 개념과 매우 비슷하다. 이 둘의 차이점은 함수는 특정 기능을 수행하는 코드들을 묶은 것이고, 메서드는 클래스 내에 포함되어 있는 함수라고 이해할 수..

Java 2022.08.31 0
반응형