본문 바로가기

🧑🏻‍💻 Dev/Java

(12)
[Java] 정적 팩토리 메소드 (Static Factory Method) Java 클래스에서 of(), from(), getInstance()와 같은 정적 팩토리 메소드를 많이 사용하는 것을 보고, 정적 팩토리 메소드를 사용하는 이유에 대해서 궁금하여 글을 정리하게 되었습니다. 1. 정적 팩토리 메소드(static factory method)는 무엇인가? 정적 팩토리 메소드는 객체 생성의 역할을 하는 클래스 메소드이다. 자바 코드를 짜봤다면 정적 팩토리 메소드를 써본 적이 있을 것입니다. public class Example { public static void main(String[] args) { // 직접 생성자를 통해서 객체를 생성 List list1 = new ArrayList(); list1.add("김씨"); list1.add("박씨"); list1.add("정씨..
[Java] 불변 객체(Immutable Object)와 Record 평소에 늘 JDK11 버전을 사용해서 모르고 있었는데, 최근 JDK16으로 버전을 바꿔보면서 새롭게 사용해 본 기능이 있어서 기록해 볼까 합니다. 추가로 평소에 궁금했었던 불변 객체에 대해서도 조금 찾아서 기록해보려고 합니다. 📖 불변 객체(Immutable Object)란? 생성 후 그 상태를 바꿀 수 없는 객체를 의미합니다. 불변객체는 읽을 수만 있는 Read-Only 메서드만을 제공합니다. Java의 대표적인 불변객체로는 String이 있습니다. # String Class Description 그럼 String은 생성된 후 값을 변경할 수 없다는건가? 그럼 아래 코드는 무엇인가? 값을 변경하는 것이 아닌가? public class Main { public static void main(String[..
[Java] TreeSet에서 커스텀 객체 정렬 궁금증이 들어서 코드를 쳐보다가 알게 된 점이 있어서 TreeSet에 대해서 기록해두고자 합니다. 기본적으로 Set은 중복을 허용하지 않는 자료구조입니다. 여기에 Tree가 붙으면서 이진 탐색 트리(binary search tree)의 형태로 Set이 구현된 자료구조가 됩니다. 즉, 데이터들이 정렬이 되어 저장된다는 것입니다. 정렬이 된다는 부분에서 Integer 타입이나 String 타입이 들어갔을 때는 아 정렬이 쉽게 되겠구나라고 생각을 했습니다. 근데 만약 Student 같은 커스텀 객체가 들어간다면 어떻게 될까라는 궁금점이 생겨서 코드를 작성해 봤습니다. # Student 객체 생성 Student 객체는 학번(studentId)과 이름(name)만을 필드로 갖는 객체입니다. public class..
[Java] 자바 정수형 배열을 리스트로 변환하기 간단한 문법의 활용이긴 하지만, 사용할 때마다 헷갈려서 기록해두려고 한다. 1. Integer[] 배열을 List로 변환 Integer[] 배열을 만들어서 List로 만드는 방법은 매우 간단하다. // 배열 Integer[] array1 = new Integer[]{1, 2, 3, 4, 5, 6, 7}; // 변환한 리스트 List list1 = Arrays.asList(array1); 이는 Integer는 오브젝트이기 때문에 별다른 중간 작업이 필요없이 Arrays.asList()로만으로 변환이 가능하다. 2. int[] 배열을 List로 변환 위에 Integer와는 다르게 int는 오브젝트가 아닌 기본형 타입이기 때문에 위와 같이 코드를 작성하면 어떻게 될까? java: incompatible typ..
[Java] 열거형 (enum) 📘 열거형 (enums) enum은 서로 관련된 상수를 편리하게 선언하기 위한 것으로 여러 상수를 정의할 때 사용하면 유용합니다. 즉 서로 관련이 있는 상수들을 모아 상수들을 대표할 수 있는 이름으로 타입을 정하는 것을 말합니다. 자바의 열거형은 열거형이 갖는 값뿐만 아니라 타입도 관리하기 때문에 논리적인 오류를 줄일 수 있습니다. 예를 들어 열거형을 모를 때 사용했었던 아래와 같은 int enum pattern이 있다고 생각해봅시다. public class EnumEx { static final int APPLE = 0; static final int BANANA = 1; static final int ORANGE = 2; static final int MONKEY = 0; static final in..
[Java] 문자열을 자르는 split()과 StringTokenizer 알고리즘 문제를 풀면서 가장 많이 사용되었던 것이 무엇이냐고 물어보면 문자열을 쪼개서 활용하는 문제들이 많았다고 말할 수 있을 거 같다. 상황에 따라서 선택할 수 있도록 String의 split()과 StringTokenizer을 사용하여 문자열을 자르는 예제를 작성해보려고 한다. 일단 split()과 StringTokenizer 둘다 문자열을 특정 구분자(delimiter)을 기준으로 쪼갤 수 있는 기능을 가지고 있다. 사실 이번 글을 정리하게된 계기도 평소에 문자열을 자를 때는 항상 split()을 사용했다. 하지만, 최근데 입력을 받을 때 사용하는 BufferedReader를 사용하며 StringTokenizer에도 관심을 갖게 되었다. 첫 번째로 살펴볼 예제는 "가,나,다,라,마,바,사"를 구분자..
[Java] 입력을 받는 BufferedReader와 Scanner 학교 수업에서 데이터를 입력받을 때, Scanner 객체를 만들어서 사용했었다. 근데 최근 알고리즘 문제를 풀다보니 많은 사람들이 BufferedReader 클래스를 사용하는 것을 발견했다. 둘의 차이점은 뭐가 있는지 알아보고자 한다. 사용하는 방법 Scanner 객체 만들기 Scanner scanner = new Scanner(System.in); 생각보다 Scanner 객체를 만드는 것은 간단하다. System.in을 생성자 파라미터로 넣어서 생성해주면 된다. 이때 Scanner를 사용하기 위해서는 java.util를 import 해줘야 합니다. BufferedReader 객체 만들기 BufferedReader bufferedReader = new BufferedReader(new InputStrea..
[디자인 패턴] 싱글톤 패턴 싱글톤 패턴은 디자인 패턴 중에서 가장 자주 사용되는 패턴이기도 하면서 가장 많은 비판을 받는 패턴이다. 이런 싱글톤 패턴은 매우 조심해서 사용해야 하거나 피해야 할 패턴이라고 말하기도 한다. 스프링 공부를 하면서 싱글톤이라는 패턴 용어를 보게 되었고, 정리해보자는 생각에 작성하게 됩니다. 싱글톤 패턴이란 무엇인가? 객체의 인스턴스가 오직 하나만 존재하도록 강제하는 패턴을 말한다. 이렇게 하나만 만들어지는 클래스의 오브젝트는 애플리케이션 내에서 전역적으로 접근이 가능하다. 단일 오브젝트만 존재해야 하고, 이를 애플리케이션의 여러 곳에서 공유하는 경우에 주로 사용하는 패턴이다. 자바 코드로 확인 자바에서는 싱글톤패턴을 구현하는 방법은 다음과 같다. 클래스 밖에서는 오브젝트를 생성하지 못하도록 생성자를 pr..