언어/Java
-
자바 Annotation언어/Java 2024. 2. 19. 19:59
메타데이터의 한 형태인 Annotation은 프로그램 자체의 일부가 아닌 프로그램에 대한 데이터를 제공합니다. Annotation은 주석이 달린 코드의 작동에 직접적인 영향을 미치지 않습니다. Annotation의 용도 컴파일러에 대한 정보 — 컴파일러는 주석을 사용하여 오류를 감지하거나 경고를 억제할 수 있습니다. 컴파일 시간 및 배포 시간 처리 — 소프트웨어 도구는 주석 정보를 처리하여 코드, XML 파일 등을 생성할 수 있습니다. 런타임 처리 — 일부 주석은 런타임 시 검사할 수 있습니다. 어노테이션 형태 // 예1 (기본) @Annotation // 예2 (요소 1개 가진 경우) @Annotation("name") // 예2 (2개 이상의 요소를 가지고 있는 경우) @Annotation( name..
-
Lombok 살펴보기언어/Java 2023. 8. 16. 09:48
현재의 자바 코딩에서 롬복은 필수적으로 사용되고 있습니다. 여러가지 필드 변수들을 통해 Getter, Setter를 구성하는 JPA 특성 상 꼭 필요한 라이브러리입니다. 그렇기 때문에 롬복에 대해 먼저 살펴보도록 하겠습니다. lombok 의존성 추가 dependencies { compileOnly("org.projectlombok:lombok") annotationProcessor("org.projectlombok:lombok") } @Getter, @Setter Class User { private String name; private String email; private String phoneNumber; private LocalDateTime createdAt; } 위와 같이 외부에서 접근할 수 ..
-
자바 데코레이터 패턴, 쓰레드, 멀티 쓰레드 프로그래밍언어/Java 2023. 7. 16. 16:23
데코레이터 패턴 객체에 동적으로 새로운 기능을 제공해 줄 수 있어 상속보다 유연한 구현이 가능합니다. 전체 클래스에 새로운 기능을 추가할 필요는 없지만, 각 객체에 새로운 기능을 추가해줘야 할 경우 사용합니다. 자신이 추가하려는 인터페이스를 포함하고 있으므로, 클라이언트에게 감춰진 형태로 사용 가능합니다. 데코레이터는 다른 데코레이터나 컴포넌트를 포함해야 합니다. 자바의 입출력 스트림은 decorator pattern입니다. Component : 동적으로 추가할 가능성이 있는 객체에 대한 인터페이스입니다. Concrete Component : 추가적인 기능이 실제로 구현되어야 하는 클래스입니다. Decorator : 기능을 추가할 Component를 구성요소로 가지면서 Component 인터페이스를 구현..
-
자바 스트림, reduce, 예외 처리, logging언어/Java 2023. 7. 14. 18:17
스트림 자료의 대상과 관계없이 동일한 연산을 수행합니다. 배열과 컬렉션을 대상으로 연산을 수행합니다. 일관성 있는 연산으로 자료의 처리를 쉽고 간단하게 합니다. 한 번 생성하고 사용한 스트림은 재사용할 수 없습니다. 스트림 연산은 기존 자료를 변경하지 않습니다. 중간 연산과 최종 연산으로 구분됩니다. 중간 연산은 여러 개의 연산이 적용될 수 있지만, 최종 연산은 마지막에 한 번만 적용됩니다. 최종 연산이 호출되어야 중간 연산에 대한 수행이 이루어지고 결과가 만들어집니다. 중간 연산에 대한 결과를 연산 중에는 알 수 없습니다.(이를 지연 연산이라고 합니다.) 스트림 생성 int[] arr = {1,2,3,4,5}; int sum = Arrays.stream(arr).sum(); long count = Ar..
-
자바 내부 클래스, 람다식, 함수형 프로그래밍, 함수형 인터페이스언어/Java 2023. 7. 13. 23:46
내부 클래스(inner class) 클래스 내부에 선언한 클래스로 이 클래스를 감싸고 있는 외부 클래스와 연관된 경우이거나, 다른 외부 클래스에서는 사용하지 않을 경우 선언됩니다. 중첩 클래스라고도 합니다. 인스턴스 내부 클래스 내부적으로 사용할 클래스를 선언하여 사용합니다. (private으로 선언하는 것이 권장됩니다.) 외부 클래스가 생성된 후 생성됩니다. 정적 변수나 정적 메서드 선언이 불가합니다. (클래스가 정적 클래스가 아니므로 인스턴스 변수, 메서드만 사용 가능합니다.) class Outer { int outerMember; private Inner innerMember; public Outer(){ innerMember = new Inner(); } public useInner(){ inne..
-
자바 자료구조, 제네릭, 컬렉션언어/Java 2023. 7. 11. 10:49
자료구조 프로그램에서 사용할 많은 데이터를 메모리 상에서 관리하는 여러 구현 방법들입니다. 효율적인 자료구조가 성능 좋은 알고리즘의 기반이 됩니다. 자료의 효율적인 관리는 프로그램의 수행속도와 밀접한 연관이 있습니다. 여러 자료 구조 중에서 구현하려는 프로그램에 맞는 최적의 자료구조를 활용하기 위해 다양한 자료구조에 대한 이해가 필요합니다. 배열(Array) 동일한 데이터 타입을 순서에 따라 관리하는 자료 구조입니다. 정해진 크기가 있습니다. 요소의 추가와 제거 시 다른 요소들의 이동이 필요합니다. 배열의 i번째 요소를 찾는 인덱스 연산이 빠릅니다. jdk 클래스로는 ArrayList와 Vector가 있습니다. 연결 리스트(Linked List) 동일한 데이터 타입을 순서에 따라 관리하는 자료구조입니다...
-
자바 Object, Class언어/Java 2023. 7. 10. 20:01
java.lang 패키지 import 하지 않아도 자동으로 import 됩니다. 많이 사용하는 기본 클래스들이 포함된 패키지입니다. String, Integer, System, ... Object 클래스 java.lang.Object 모든 클래스는 Object 클래스를 상속 받습니다(모든 클래스의 최상위 클래스). Object 클래스의 메서드 중 일부를 재사용해서 사용할 수 있다. 클래스 선언 시 컴파일러가 자동으로 extends Object를 추가합니다. toString() 메서드 객체의 정보를 String으로 바꾸어서 사용할 때 쓰입니다. String, Integer 클래스에 이미 재정의 되어 있습니다. 일반 클래스에 재정의해 사용할 경우 System.out.print() 출력 시 해당 리턴 값이 출..
-
자바 추상 클래스, 인터페이스언어/Java 2023. 7. 8. 22:34
추상 클래스 구현 코드 없이 메서드의 선언만 있는 추상 메서드를 포함한 클래스입니다. 메서드의 선언은 반환타입, 메서드 이름, 매개변수로 구성되어 있습니다. abstract 예약어를 사용합니다. 추상 클래스의 경우 new를 통해 새로운 인스턴스를 만들 수 없습니다. 추상 클래스 구현 메서드에 구현 코드가 없을 경우 abstract로 선언합니다. abstract 메서드를 가진 클래스의 경우 abstract로 선언합니다. 추상 클래스의 추상 메서드는 하위 클래스에서 구현 코드를 작성합니다. 추상 클래스 내의 추상 메서드는 하위 클래스에서 구현을 해야하는 메서드입니다. 추상 클래스 내의 구현된 메서드는 하위 클래스에서도 공통으로 사용될 수 있는 메서드입니다. (필요에 따라 오버라이딩을 통해 재정의 가능) ab..