반응형

언어(Language) 109

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

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

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

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

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

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

[Kotlin] 코틀린 조건문(if, when) 활용 및 예제

조건문은 프로그램 내에서 특정 조건이 참(true) 또는 거짓(false) 일 때 서로 다른 동작을 실행하기 위해 사용하는 제어문이다. 조건문은 프로그램의 흐름을 조절하고 다양한 상황에 대응할 수 있도록 도와준다. 코틀린은 조건 제어문으로 if 문과 when 식을 제공하고 있다. if 문 if 키워드는 식을 검사해 그 값이 true나 false 중 어느 것인지 알아내고, 그 결과에 따라 작업을 수행한다. 이처럼 참이나 거짓을 표시하는 식은 불리언(Boolean)이라고 한다. 코틀린의 if 문의 간단한 사용 예시는 다음과 같다. fun main() { if (1 > 0) { println("1은 0보다 크다.") } if (10 < 11) { println("10 < 11") println("10은 11보..

[Java] 데코레이터 패턴(Decorator Pattern)이란? - 개념 및 예제

데코레이터 패턴(Decorator Pattern) 데코레이터 패턴(Decorator Pattern)은 객체 지향 디자인 패턴 중 하나로 객체에 동적으로 기능을 추가하여 확장할 수 있는 구조 패턴이다. 이 패턴은 상속을 통해 클래스를 확장하는 대신, 객체를 감싸는 방식을 사용하여 기능을 추가하거나 변경한다. 따라서 기존 코드를 수정하지 않고도 새로운 기능을 추가하거나 수정할 수 있게 된다. 데코레이터(Decorator)라는 단어의 의미인 장식자, 꾸미는 사람으로 접근하면 데코레이터 패턴의 역할을 쉽게 이해할 수 있을 것이다. 데코레이터 패턴의 장단점 장점 유연한 확장 : 새로운 기능을 추가하거나 기존 기능을 수정할 때 동적으로 기능을 추가하거나 변경할 수 있다. 코드 재사용 : 기존 코드를 수정하지 않고도..

[Kotlin] 코틀린 함수(Function) 개념 및 예제

💡 함수(function)는 이름이 있는 작은 프로그램과 같으며, 다른 함수에서 그 이름으로 실행하거나 호출(invoke)할 수 있다. 함수(Function) 함수는 일련의 동작을 묶어주며, 프로그램을 체계적으로 구성하고 코드를 재사용하는 가장 기본적인 방법이다. 함수에 정보를 전달하면, 함수는 그 정보를 이용해 계산을 수행하고 결과를 만들어낸다. 코틀린 함수의 기본적인 형태는 다음과 같다. fun 함수이름(p1: 타입1, p2: 타입2, ...): 반환타입 { 구현할 코드... return 결과 } p1과 p2는 함수에 전달할 파라미터(parameter)다. 각 파라미터는 괄호 안에 식별자와 타입으로 구성되어 있으며, 콜론(:)으로 구분한다. 파라미터 뒤에 함수가 생성할 결과의 타입을 나타내는 반환 타..

[Java] 프록시 패턴(Proxy Pattern)이란? - 개념 및 예제

프록시 패턴(Proxy Pattern) 프록시(Proxy)는 대리자, 대변인이라는 뜻을 가진 단어다. 대리자/대변인은 다른 누군가를 대신해 그 역할을 수행하는 존재를 말한다. 따라서 프록시 패턴은 특정 객체의 대리자나 대변인 역할을 하는 프록시 객체를 제공하는 디자인 패턴이다. 프록시 패턴을 사용함으로써 클라이언트는 특정 객체를 직접 참조하여 접근하는 것이 아닌 프록시 객체를 통해 상호작용한다. 프록시 객체의 장단점 장점 접근 제어 : 클라이언트가 실제 객체에 직접 접근하지 않도록 제어하여 객체의 접근을 관리하고 권한 검사 등을 수행할 수 있다. 지연 초기화 : 실제 객체의 생성 및 초기화를 지연시키는 데 사용하여 필요한 순간만에 생성 및 초기화하여 성능을 최적화할 수 있다. 캐싱 : 결과를 캐싱하여 중..

[Kotlin] 코틀린 데이터 타입 이해하기

데이터 타입 코틀린에서 소수 5.5와 정수 5를 더해보자. fun main() { println(5.5 + 5) } // 출력 10.5 10.5라는 새로운 소수가 출력된다는 것은 이미 예상했을 것이다. 코틀린에서는 5.5와 같은 소수는 Double, 5와 같은 정수를 Int 타입이다. 또한 두 수를 더한 결과는 10.5라는 Double 타입으로 출력하게 된다. 따라서 코틀린은 타입을 사용해 5.5 + 5라는 식이 올바른 식인지 검증하고, Double 타입의 새 값을 만들어 연산 결과를 저장한다. 타입(Type)은 사용자가 데이터를 어떤 식으로 사용할지를 코틀린에게 전달해 준다. 데이터에 대해 적용할 수 있는 연산, 데이터의 의미, 타입에 속한 값을 저장하는 방식을 정의한다. 그렇다면 문자열 타입인 Str..

[Kotlin] 코틀린 var과 val 이해하기

식별자(Identifier) 식별자(변수명)는 프로그램을 이루는 요소를 가리키기 위해 사용한다. 데이터를 가리키는 식별자를 사용할 때는 가장 기본적으로 선택해야 하는 사항이 있다. var : 변할 수 있는 수(variable)의 약자로, 내용을 재대입할 수 있다. val : 값(value)의 약자로, 식별자의 값을 단 한 번만 초기화할 수 있다. 값을 초기화하고 나면 내용을 변경할 수 없다. 변할 수 있는 수 var var은 다음과 같이 정의한다. var 식별자 = 초기화 몇 가지 var 정의를 살펴보자. fun main() { var number = 8 var pi = 3.14 var words = "Hello Kotlin!" println(number) println(pi) println(words)..

[Java] 어댑터 패턴(Adapter Pattern)이란? - 개념 및 예제

어댑터 패턴(Adapter Pattern) 어댑터를 번역하면 변환기(Converter)라고 할 수 있다. 변환기의 역할은 서로 다른 두 인터페이스 사이에 통신이 가능하게 하는 것이다. 주변에서 흔히 볼 수 있는 변환기로 충전기가 있다. C to C 케이블을 바로 콘센트에 연결할 수 없기 때문에 충전기가 케이블과 콘센트를 연결해 주는 변환기 역할을 수행한다. 즉, 어댑터 패턴은 애플리케이션에서 서로 호환되지 않는 인터페이스를 가진 두 개체를 함께 동작할 수 있게 만들기 위해 연결하는 디자인 패턴이다. 주로 기존의 클래스나 라이브러리를 수정하지 않고, 다른 클래스나 라이브러리와 통합하기 위해 사용된다. 어댑터 패턴 예시 어댑터 패턴이 적용되지 않은 경우 ServiceA.Java public class Ser..

반응형