Java 33

Singleton Pattern 인스턴스가 오직 1개만 생성되야 하는 경우에 사용되는 패턴입니다. 시스템 런타임, 환경 세팅에 대한 정보 등 인스턴스가 여러개일 때 문제가 생길 수 있는 상황에서 싱글턴 패턴을 사용합니다. 인스턴스가 1개만 생성되는 특징을 가진 싱글턴 패턴을 이용하면 하나의 인스턴스를 메모리에 등록해서 여러 스레드가 동시에 해당 인스턴스를 공유하여 사용하게끔 할 수 있으므로 요청이 많은 곳에서 사용하면 효율을 높일 수 있습니다. 싱글턴을 만들때 동시성(Concurrency) 문제를 고려해서 싱글턴을 설계해야합니다. 싱글턴을 사용하는 방법과 문제점을 알아보고 해결방법을 알아보겠습니다. 1. Eager Initialization public class SingletonEagerInit { private static Sing.. Computer Science/Design Pattern 2022. 1. 15.
[Java] Exception Error와 Exception Java는 오류가 발생하거나 발생할 여지가 있는 여러 상황에 대한 예외를 만들어 두었습니다. 오류(Error) 시스템이 종료되어야 할 수준의 상황과 같이 수습할 수 없는 심각한 문제를 의미합니다. OutOfMemory나 StackOverFlow처럼 일단 발생하면 복구할 수 없는 오류입니다. 예측하여 방지할 수 없는 영역입니다. 예외(Exception) 개발자가 구현한 로직에서 발생한 실수나 사용자에 의해 발생하는 영역으로 오류와 달리 개발자기 미리 예측하여 방지할 수 있습니다. 오류와 예외 모두 Throwable을 상속 받습니다.Throwable 클래스 내부의 설명을 인용하여 설명하자면 Java 언어의 모든 오류 및 예외의 슈퍼클래스입니다. 예외 상황이 발생했음을 나타내기 .. Language/Java 2021. 11. 26.
[Java] Collection - (2) List란? List는 대표적인 선형 자료구조로 각 요소가 삽입되는 위치를 정밀하게 제어할 수 있다는 특징이 있습니다. 사용자는 목록의 위치를 기준으로 요소에 접근하고 목록에서 요소를 검색할 수 있습니다. 배열과 비슷하지만 배열은 공간이 고정적이지만 List는 요소의 갯수에 따라 동적으로 크기를 변화시켜 사용할 수 있습니다. List는 일반적으로 중복 요소를 허용합니다. 좀 더 구체적으로, List는 일반적으로 a.equals(b)와 같은 a과 b 요소의 쌍을 허용하며, 일반적으로 null조차 중복으로 여러 null 요소를 저장할 수 있도록합니다. 또, List의 요소에 대한 추가, 제거, 동등 및 해시코드 메서드를 지원합니다. List를 상속한 대표적은 클래스는 ArrayList, LinkedList, Vector.. Language/Java 2021. 11. 12.
[Java] Collection - (1) Collection Framework란? Java Collection Framework는 다수의 데이터를 쉽고 효과적으로 처리할 수 있는 표준화된 방법을 제공하는 클래스의 집합을 의미합니다. 즉, 데이터를 저장하는 자료 구조와 데이터를 처리하는 알고리즘을 구조화하여 클래스로 구현해 놓은 것입니다. 이러한 컬렉션 프레임워크는 자바의 인터페이스(interface)를 사용하여 구현됩니다. 컬렉션 프레임워크에서는 데이터를 저장하는 자료 구조에 따라 핵심이 되는 주요 인터페이스를 정의하고 있고 그 인터페이스를 상속받은 클래스들로 이루어져 있습니다. 이 중에서 List, Set, Queue, Dequeue 인터페이스는 모두 Collection 인터페이스를 상속(java.util.Collection)받지만, 구조상의 차이로 인해 Map 인터페이스는 별도로 .. Language/Java 2021. 11. 12.
[Java] 반복문 반복문은 어떤 작업이 반복적으로 수행되도록 할 때 사용됩니다. 반목문의 종류로는 크게 for문과 while문이 있고 이것에서 파생된 foreach, do-while이 있습니다. 반복문은 주어진조건을 만족하는 동안 주어진 문장을 반복적으로 수행합니다. for for(초기화; 조건식; 증감식) { //실행구문 } for문은 반복 횟수를 알고 있을 때 적합합니다. 구조가 조금 복잡하지만 직관적이라 오히려 이해하기 쉽습니다. for(int i=0; i=1; i--) { //실행할 구문 } //다양한 증감식을 사용하는 경우 for(int i=0; i Language/Java 2021. 11. 6.
[Java] 조건문 if if문은 가장 기본적인 조건문이며, 조건식과 괄호로 이루어져 있습니다. if문에 사용되는 조건식은 일반적으로 비교연산자와 논리연산자로 구성됩니다. 만약 실행할 문장이 하나뿐이라면 괄호를 사용하지 않고 바로 사용할 수 있습니다. if문은 단일로 if만 사용하거나, if-else로 참일 경우와 거짓일 경우에 사용하거나 if-elseif-else로 여러 조건을 필터링 할 수 있습니다. 하지만 여러 조건을 적용하는 경우 if를 사용하는 것 보다 switch-case가 더욱 적합할 수 있습니다. if문 if (조건문) //true일 경우 실행 if (조건문) { //true일 경우 실행 } if-else문 if(조건문) { //true인 경우에 실행 } else { //false인 경우에 실행 } if-el.. Language/Java 2021. 11. 5.
[Java] Arrays 클래스 Arrays 클래스에는 배열을 다루기 위한 다양한 메소드가 포함되어 있습니다. Arrays 클래스의 모든 메소드는 클래스 메소드(static method)이므로, 객체를 생성하지 않고도 바로 사용할 수 있습니다. 이 클래스는 java.util 패키지에 포함되므로, 반드시 import 문으로 java.util 패키지를 불러오고 나서 사용해야 합니다. 대표적인 메서드는 asList, copyOf, copyOfRange, equals, fill, sort가 있습니다. Arrays은 원시 타입과 제네릭 타입에 대한 메서드들을 제공합니다. 예제는 간편하게 정수형 배열을 기준으로 작성하겠습니다. copyOf public static int[] copyOf(int[] original, int newLength) { .. Language/Java 2021. 11. 2.
[Java] String과 String Pool String 인스턴스 생성 String은 참조 타입 자료형이지만 new 키워드 이외에 리터럴로 생성이 가능합니다. String str1 = "donghwan"; String str2 = new String("donghwan"); Heap과 String Pool 여느 참조 타입 자료구조와 같이 String도 인스턴스를 생성하게 되면 JVM Heap 영역에 메모리를 할당하고 값이 저장됩니다. 하지만 리터럴로 생성하는 경우와 new 키워드를 통해 생성할 때, 차이가 발생하게 됩니다. 리터럴로 String을 생성하게 되면 Heap 영역에 String Pool이라는 곳에 생성되고 new 키워드를 통해 생성하게 되면 Heap에 별도 메모리 영역에 생성됩니다. String a = "aaa"; String b = "a.. Language/Java 2021. 11. 1.
[Java] String의 불변성( Immutable ) Java에서 String은 불변(Immutable) 객체라고 불립니다. 불변 객체란 객체가 생성된 후 상태가 변하지 않고 계속 유지되는 객체를 말합니다. String 인스턴스는 한 번 생성되면 그 값을 읽기만 할 수 있고, 변경할 수는 없습니다. 이제 Java에서 String 왜 불변 객체인지 그리고 그로 인한 장점과 특징이 무엇이 있는지 알아보도록 하겠습니다. 1. String Pool 모든 언어에서 String은 활발하게 사용되는 자료형입니다. 이러한 자료형을 생성하고 삭제하는 것은 많은 자원을 소비하게 됩니다. Java에서는 이러한 현상을 해결하고자 Heap의 String Pool을 활용하여 해결하고 있습니다. String은 참조 타입의 자료형이지만 특이하게도 new 키워드와 리터럴로 모두 생성이 .. Language/Java 2021. 11. 1.
[Java] 동일성과 동등성 ( == vs equals ) Java에서 ==와 equals는 자신의 기준으로 양쪽을 비교하여 boolean의 형태로 결과를 나태내는 역할을 한다는 공통점이 있습니다. 하지만 ==와 equals는 분명한 차이점이 존재합니다. 일단 가장 간단하게 ==는 비교 연산자이고 equals는 메서드입니다. 하지만 가장 중요한 차이점은 동일성과 동등성이라고 볼 수 있습니다. 동일성 동일성은 지금 비교하고 있는 값들이 동일하다는 의미입니다. Java는 실제 값을 저장하는 원시 타입(Primitive Type)과 참조 값을 저장하는 참조 타입(Reference Type)이 있습니다. 이때 원시 타입의 경우는 단순히 값을 비교하여 동일성의 여부를 나타내지만 참조형의 경우 참조 값. 즉, 객체의 주소를 기준으로 동일성을 판단하게 됩니다. ( 하지만 S.. Language/Java 2021. 11. 1.