☕️ Java

클래스의 인스턴스를 얻는(생성하는) 전통적인 수단은 public 생성자이다. 그러나 클래스는 생성자와 별도로 정적 팩터리 메서드(static factory method)를 제공할 수 있다. 정적 팩터리 메서드는 객체 생성의 역할을 담당하는 클래스의 메서드이며, 다음은 boolean의 기본 타입인 Boolean에서 발췌한 간단한 예시이다. 정적 팩터리 메서드를 사용하는 방식은 당연히도 장점과 단점이 모두 존재한다. 먼저 장점에 대해서 알아보도록 하자. 정적 팩터리 메서드의 장점 1. 이름을 가질 수 있다. 생성자에게 넘기는 매개변수와 생성자 자체만으로는 반환될 객체의 특성을 제대로 설명하지 못한다. 그에 비해 정적 팩터리 메서드는, 메서드이므로 이름을 가질 수 있으며, 이름만 잘 지은다면 반환될 객체의 특..
애너테이션이란 프로그램의 소스코드 안에 다른 프로그램을 위한 정보를 미리 약속된 형식으로 포함시킨 것이다. 마치 주석과도 같이 프로그래밍 언어에 영향을 미치지 않으면서도 다른 프로그램에게 유용한 정보를 제공할 수 있다는 장점이 있다. (스프링에서 사용되는 에너테이션은 영향을 미치지만, 우선 스프링이 아닌 기본 자바를 기준으로 설명하겠다.) 표준 애너테이션 자바에서 기본적으로 제공하는 애너테이션은 몇 개 존재하지 않는다. 게다가 그들 중 일부는 '메타 애너테이션'으로 애너테이션을 정의하는데 사용되는, 애너테이션을 위한 애너테이션이다. 자바에서 기본적으로 제공하는 표준 애너테이션의 종류는 다음과 같다. 애너테이션 설명 @Override 컴파일러에게 메서드를 오버라이딩 하는 것이라고 알린다. @Deprecat..
HashSet HashSet은 Set 인터페이스를 구현한 가장 대표적인 컬렉션이며, Set 인터페이스의 특징대로 HashSet은 중복된 요소를 저장하지 않는다. HashSet은 저장순서를 유지하지 않는다. 생성자 또는 메서드 설명 HashSet() HashSet 객체를 생성한다 HashSet(Collection c) 주어진 컬렉션을 포함하는 HashSet을 생성한다 boolean add(Object o) 객체를 저장한다 boolean addAll(Collection c) 주어진 컬렉션에 조장된 모든 객체들을 추가한다. void clear() 저장된 모든 객체를 삭제한다 boolean contains(Object o) 주어진 객체를 포함하는지 알려준다 boolean containsAll(Collection..
보호되어 있는 글입니다.
🧐 제네릭(Generic)이란? 다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일 시에 타입 체크를 해주는 기능입니다. 객체의 타입을 컴파일 시에 체크하기 때문에 객체의 타입 안정성을 높이고 형변환을 하는 번거로움이 줄어듭니다. 😠 제네릭이 없었을 때의 문제점 예를 하나 들어보겠습니다. List list = new ArrayList(); list.add(1); int a = list.iterator().next(); //컴파일 에러 제네릭을 사용하지 않고 List만을 사용하여 작성한 코드입니다. 컴파일러는 마지막 라인에 대해서 에러를 발생시킬 것입니다. 제네릭을 사용하기 이전 List는 Object를 사용하여 모든 타입의 객체를 받아들일 수 있게 설계되었습니다. 따라서 해당 값을 사용하기 위..
🧐 Volatile 자바에서 지원하는 volatile이라는 키워드는 다음과 같은 특성을 가집니다. volatile로 선언된 변수가 있는 코드는 최적화되지 않습니다. volatile 키워드는 변수를 'Main Memory에 저장하겠다'라고 명시하는 것입니다. 변수의 값을 Read할 때마다 CPU cache에 저장된 값이 아닌, Main Memory에서 읽는 것입니다. 🧐 사용하는 이유 volatile키워드의 사용 이유를 알기 위해서는 메모리 구조를 알아둘 필요가 있습니다. 🧐 메모리 구조 보통의 메모리 구조는 다음과 같습니다. CPU 내에는 성능 향상을 위해서 L1 Cache가 내장되어 있습니다. CPU 코어는 메모리에서 읽어온 값을 캐시에 저장하고, 캐시에서 값을 읽어서 작업합니다. 값을 읽어올 때 우선..
자바의 표준 함수형 인터페이스 종류 자바 8부터 표준 API로 제공되는 함수형 인터페이스 java.util.function 패키지에 포함되어 있다. 매개타입으로 사용되어 람다식을 매개값으로 대입할 수 있도록 해준다. Consumer, Supplier, Function, Operation, Predicate 계열이 있다. 계열 입력 출력 메소드 설명 Consumer O X void accept(T) 입력을 소비 Supplier X O T get() 출력을 공급 Function O O T apply(R) 입력 -> 출력 함수 매핑 Operation O O T apply(T) 입력을 연산하여 동일 타입의 출력으로 리턴 Predicate O boolean boolean test(T) 입력을 판단 매개변수가 2개..
Comparator, Comparable 두 인터페이스 모두 컬렉션을 정렬하는데 필요한 메서드를 정의하고 있다. Comparable을 구현하고 있는 클래스들은, Comparable하다. 즉 같은 타입의 인스턴스끼리 비교가 가능한 클래스 들이며 기본적으로 오름차순으로 정렬되도록 구현되어 있다. 우선 Comparable을 구현하는 방법부터 알아보겠다. Comparable Comparable에 있는 compareTo를 오버라이딩 해주면 되는데, 이때 오버라이드 하는 방법은 다음과 같다. compareTo 현재 인스턴스 리턴값이 음수 현재 인스턴스 > 비교대상인 인스턴스 => 리턴값이 양수 현재 인스턴스 == 비교대상인 인스턴스 => 리턴값이 0 이는 다음과 같이 표현할 수 있다. return 현재 인스턴스 -..
말 랑
'☕️ Java' 카테고리의 글 목록 (7 Page)