일반적으로 정렬 알고리즘 (Arrays.sort() , Collections.sort() ) 은 'compareTo' 메서드의 반환값을 기준으로 정렬을 수행한다. 객체들간의 비교를 진행 하기 위해서는 Comparable 인터페이스를 구현하여 'compareTo' 메서드를 항상 오버라이딩(Override)하여 재정의 하여 사용한다. 구현되어 있지 않으면, 정렬 알고리즘을 사용 할 수가 없다. compareTo 메서드 반환값 음수 compareTo메서드 반환값이 음수일 경우에는 현재 객체가 실제로 크던 작던 상관하지 않고, 비교 대상 객체보다 작은것으로 판단하여 현재 객체를 정렬시 앞쪽(=유지)에 위치하게 된다. 만약 현재 객체가 비교대상보다 작은 값이고 'compareTo' 메서드의 반환 값이 음수라면 현..
LONG / INT 변수 LONG타입과 INT타입의 변수에 대한 각 자리수에 대한 값을 정렬된 값으로 변경해 새로 저장할 필요가 있다. 이를 위해 각 자리수에 대한 값을 가지고 있는 배열 객체를 생성한다. int n = 546545348; or long n = 546545348; String[] array = String.valueOf(n).split(""); //배열 생성 오름차순 정렬 Arrays.sort 메서드를 이용해 오름차순 정렬을 수행한다. Arrays.sort(array); //오름차순 정렬 내림차순 정렬 Arrays.sort메서드와 Collections.reverseOrder 메서드를 이용해 내림차순 정렬을 수행한다. Arrays.sort(array,Collections.reverseOrd..
String vs StringBuilder vs StringBuffer 위의 세 클래스는 모두 문자열을 관리하고 저장하는 클래스입니다. 다만, 약간의 차이와 성능적인 면에서 다른 점을 보입니다. String String 클래스는 불변(immutable)객체라는 큰 특징이 존재합니다. String 클래스는 문자열을 저장하기 위해서 내부적으로 'char' 배열을 사용하여 저장하는데, 저장하는 char [] 를 보면 final 로 선언되어 있는 점을 확인 할 수 있습니다. 즉, String 객체는 불변객체이므로 문자열 연산이 수행될때마다 새로운 'String' 객체가 생성되며 객체의 해시코드 값이 계산됩니다. 이러한 해시코드 값은 최초 한번만 계산되어 캐싱 되어 메모리에 저장하고 있습니다. 단, 새로운 Str..
이펙티브 자바 3편의 2장 아이템 1 생성자 대신 정적 팩터리 메서드를 고려하라를 정리한 글이다. 정적 팩터리 메소드란? new를 통한 객체 생성 방법 대신 클래스에 static 정적 메소드(=클래스 메소드) 를 정의하여, 객체 생성이 가능하도록 하는 기법으로 객체 생성을 캡슐화 한 디자인 패턴이다. // public 생성자를 이용한 객체 생성 Car car = new Car("dog"); // 정적 팩토리 메서드를 이용한 객체 생성 // Integer Wrapper 객체를 반환 Integer i = Integer.valueOf(10); // 생성할 클래스가 아닌 다른 클래스에 정의된 정적 팩토리 메소드 BufferReader br = Files.newBufferedReader(path) 위의 코드를 보..
1. Public Static 생성자 란? Public Static 생성자는 클래스가 로드 될때 자동으로 실행되며, 클래스에 대한 초기 작업을 수행하는데 사용합니다. 이는 static 멤버 변수를 초기화하거나, 다른 static 메소드를 호출하여 클래스의 기능을 준비하는 작업을 수행합니다. 따라서, Public Static 생성자는 인스턴스 생성과는 무관하며, new 연산자를 통해 인스턴스를 생성하지 않습니다. 대신에 인스턴스를 생성하지 않고도 호출 할 수 있는 static 멤버 변수 또는 static 메소드를 사용 생성합니다. 2. Public Static 생성자 문제점 하지만 일반적으로 아래의 이유로 Public Static 생성자를 사용하지 않고 있습니다. ① 인스턴스를 생성 할 수 없음 Publi..
Stream에 많이 사용되는 Collectors에 대해 알아보는 시간을 가져보도록 하겠습니다. 1. Collectors 인터페이스란? Collector 클래스는자바스트림 API에서 제공하는 기능 중 하나로, Stream에서 수행한 연산 결과를 수집하여 다양한 형태의 컬렉션을 반환할 수 있는 정적 메소드를 제공하는 클래스이다. Collectors를 사용하면 요소들을 적절하게 그룹화,분할,집계,변환 할 수 있지만, 이를 위해서는 추가적인 객체 생성이 필요하다. 따라서 스트림의 크기가 작은경우나, 간단한 작업을 처리할때는 Collectors 를 사용하지 않고 직접 구현하는것이 더 효율적이다. 하지만, 스트림의 크기가 크고 복잡한 작업을 수행할 때는 Collectors를 사용하면 코드의 가독성과 유지보수성이 향..
Java에서 주로 사용되는 enum에 대해 정리해보는 시간을 가져보도록 하겠습니다 1. ENUM이란? 자바 1.5버전부터 새롭게 추가된 열거형 상수로, 서로 연관된 상수들의 집합으로 상수 값을 정의하고, 그 외의 값은 허용하지 않는다. enum이 존재하기 전에는 아래와 같이 static final 을 이용하여 모두 상수로 선언해서 사용했었다. public static final String MON = "Monday"; public static final String TUE = "Tuesday"; public static final String WED = "Wednesday"; 추가로 같은 의미를 가지는 상수들끼리 묶어서 class or interface로 구현체를 만들어서 사용했으나, 해당 방법은 서로 ..
상속 클래스 관련해서 간단하게 정리하고자 포스팅을 남깁니다. 자바에서는 extends를 통해 클래스를 상속받을 수 있다. 자바에서 클래스를 상속받을때, 하위 클래스는 상위클래스의 모든 멤버(필드,메서드 등)을 상속받는다. 하지만 부모 클래스의 생성자는 상속되지 않고 있으므로 부모클래스의 생성자를 하위 클래스에서 super 키워드를 통해 명시적 호출 후 초기화를 진행해줘야 한다. 부모클래스에 기본생성자가 존재할 경우에 super 키워드를 사용하지 않아도 자동으로 적용된다. Q. 부모 클래스에 생성자가 없을 경우 ? 부모클래스에 생성자가 존재하지 않을 경우에 컴파일러가 자동으로 기본 생성자 (매개변수가 없는 생성자) 를 생성해 런타임 오류가 발생하지 않도록 조치를 해준다. 대신 컴파일러가 무조건 기본 생성자..
JAVA 8 Date API 에서 출시된 LocalDate는 이전에 사용되었던 Calendar 클래스 대체 용도로 많이 사용되고 있습니다. LocalDate는 인스턴스 객체를 생성해주는 new 연산자를 사용하지 않고, of(), now(),parse() 와 같은 Public 정적 패토리 메소드를 이용해 선언되고 있습니다. new연산자를 사용 할 수 없는 이유는 생성자가 아래와 같이 Public이 아닌 Private로 구성되어있기때문입니다. 여기서 하나의 궁금증이 생기지 않나요? 왜 Public으로 생성자를 만들지 않고 Private으로 선언 해 놓았을까???? 이유는 아래와 같습니다. 첫번째, 불필요한 객체 생성을 제한하기 위해서 설정해놓는다. localDate에서 제공하는 함수들중 일부분은 정적메소드(..
스택(Stack) 은 영어사전 단어 의미로 쌓다라는 의미를 뜻합니다. 쌓아서 최 상단에 있는 부분을 먼저 빼는 형식으로 선출후입(LIFO) 이라고 표현합니다. 자바의 Stack클래스는 기본적으로 아래에 보이는 5가지의 함수를 제공해주고 있습니다. 자바에서 제공해주는 Stack 클래스를 사용해 살펴보도록 하겠습니다. public Element push(Element item); //stack 최 상단에 데이터 insert public Element pop(); //stack 최 상단 데이터를 제거 public Element peek(); //stack 최 상단 데이터를 출력 public boolean empty(); //tack이 비어있으면 true, 비어있지 않으면 false 로 반환 public int..