목록언어💻/자바☕ (65)
EEALL@ONCE
팩토리 패턴을 사용하고, 하나의 public 클래스와 여러 개의 패키지 수준의 클래스가 있는 예제를 만들어 드리겠습니다. 이 예제에서는 간단한 차량 객체를 생성하는 팩토리 패턴을 사용해 보겠습니다. package vehicle; // 공개된 팩토리 클래스 public class VehicleFactory { // 팩토리 메소드: 차량 타입에 따라 해당하는 차량 객체를 생성 public static Vehicle createVehicle(String type) { switch (type) { case "car": return new Car(); case "truck": return new Truck(); case "motorcycle": return new Motorcycle(); default: thro..
Java 8에서 도입된 인터페이스의 기능 강화로, `static` 메서드와 `default` 메서드는 기존의 인터페이스에 새로운 기능을 추가하는 데 사용됩니다. 1. `static` 메서드: `static` 메서드는 인터페이스 자체의 메서드로서, 인터페이스의 인스턴스 생성 없이도 호출할 수 있습니다. 주로 헬퍼 메서드나 공통 기능을 제공하는 데 사용됩니다. 예시 코드에서 `announcement` 메서드가 `static`으로 선언되어 있습니다. ```java public interface FoodSafety { static void announcement(){ System.out.println("식품안전 관련 공지"); } // 나머지 코드 생략... } ``` 호출은 다음과 같이 이루어집니다: ```j..
List안에 dto 값에 대해 특정 필드를 기준으로 같은 것 끼리 group by 해서 sum을 하고 싶을 뗴, stream을 어떻게 잘 사용할 것인가에 대한 공부를 해보겠습니다. (1) item이라는 dto가 있습니다. class Item { String category; int quantity; // constructor, getters, setters } (2) stream()을 태우고, collect를 사용하는데 그 중에 collector라는 유틸리티를 사용해서, 그룹핑을 (groupingBy를) 통해 시켜줍니다. 그리고 나서 reducing을 통해 더해준다. List items = Arrays.asList( new Item("A", 2), new Item("B", 3), new Item("A",..
Optional concatenated = stream.collect(Collectors.reducing((s1, s2) -> s1 + s2)); Collectors는 Java 스트림 API에서 제공하는 유틸리티 클래스 중 하나입니다. 이 클래스는 다양한 컬렉션을 생성하고 조작하는 데 사용됩니다. Collectors 클래스는 Collector 인터페이스의 여러 정적 메서드를 제공하여 자주 사용되는 컬렉션 연산을 수행할 수 있도록 돕습니다. Collectors 클래스의 몇 가지 유용한 메서드 중 일부를 살펴보겠습니다: toList(): 스트림의 요소를 리스트로 수집합니다. List list = stream.collect(Collectors.toList()); toSet(): 스트림의 요소를 세트로 수집합니..
1. **구현 여부:** - 추상 클래스는 일부 메서드를 구현하고 일부를 추상 메서드로 남길 수 있습니다. - 인터페이스는 모든 메서드가 추상 메서드이며, 구현을 포함할 수 없습니다. Java 8부터는 디폴트 메서드와 정적 메서드를 통해 구현을 제공할 수 있게 되었습니다. 2. **다중 상속:** - 추상 클래스는 단일 상속만 허용됩니다. 즉, 하나의 추상 클래스만 상속할 수 있습니다. - 인터페이스는 다중 상속을 지원합니다. 클래스가 여러 인터페이스를 구현할 수 있습니다. 3. **접근 지정자:** - 추상 클래스의 메서드는 public, protected, default, private 등 다양한 접근 지정자를 가질 수 있습니다. - 인터페이스의 메서드는 기본적으로 public이며, Java 9부터 ..
Functional Interface는 Java에서 주로 람다 표현식 및 Stream API와 같은 Java 8에서 소개된 기능과 함께 사용되는 핵심 개념입니다. Functional Interface는 하나의 추상 메서드만을 포함하는 인터페이스를 말하며, 람다 표현식을 통해 이를 구현하여 함수형 프로그래밍 개념을 Java에서 사용할 수 있게 해줍니다. Java에서는 `@FunctionalInterface` 주석을 사용하여 명시적으로 Functional Interface를 선언할 수 있습니다. @FunctionalInterface interface MyFunctionalInterface { void myMethod(); } 그런 다음 람다 표현식을 사용하여 Functional Interface의 추상 메서..
final 키워드는 Java에서 여러 곳에서 사용되는데, 주로 필드, 메서드, 클래스, 그리고 인스턴스에 적용됩니다. 여기서 각각의 사용법에 대해 설명하겠습니다. 1. **final 필드:** - 값 변경이 불가능합니다. - 선언 시 또는 생성자에서 초기화해야 합니다. public class Example { final int constantValue; public Example(int value) { constantValue = value; // 생성자에서 초기화 } } ``` 2. **final 메서드:** - 자식 클래스에서 오버라이드 불가능합니다. ```java public class Parent { final void finalMethod() { // final 메서드 구현 } } public ..
생성자(constructor)는 객체 지향 프로그래밍 언어에서 클래스의 인스턴스를 초기화하는 특별한 종류의 메소드입니다. 생성자는 클래스의 인스턴스가 생성될 때 자동으로 호출되며, 주로 다음의 목적으로 사용됩니다: 인스턴스 초기화: 객체가 생성될 때 필드 값을 초기화하는 데 사용됩니다. 이것은 객체의 상태를 설정하고, 필수 인스턴스 변수를 초기화하는 역할을 합니다. 매개변수 전달: 생성자는 호출될 때 매개변수를 전달받아 객체를 원하는 상태로 설정할 수 있습니다. 이를 통해 객체의 속성을 외부에서 지정할 수 있습니다. 오브젝트 초기화 로직 수행: 객체가 생성될 때 특정한 초기화 로직을 실행할 수 있습니다. 예를 들어, 파일을 열거나 네트워크 연결을 설정하는 등의 작업을 수행할 수 있습니다. Java에서 생..