본문 바로가기

728x90

자바

[JAVA] 자바 8, 11, 17, 21 그리고 22 업데이트 최근 (3/19/2024) JDK22가 등장했다. 먼저 자바 8, 11, 17, 21부터 정리를 하고 22에 어떤 기능이 바뀌고 추가 되었는지 설명하겠다. /* 자바 8 - 2014년 출시 */ 람다 표현식 & Functional Interface 스트림 API 날짜와 시간 API (LocalDate, LocalDateTime, ...) Optional 인터페이스의 디폴트 메소드 /* 자바 11 - 2018년 출시 */ Predicate String에 새로운 메소드 추가 isBlank() : 문자열 비어있거나 공백만 포함했으면 true repeat(int n) : n개만큼 문자열 반복해서 붙여서 반환 strip() : 문자열 앞, 뒤 공백 제거 stripLeading() : 문자열 앞 공백 제거 str.. 더보기
[JAVA] Arrays.sort Collections.sort 알고리즘 차이 /* Arrays.sort, Collections.sort */ Arrays.sort() 는 Array를 정렬해준다. Collections.sort()는 ArrayList, LinkedList 같은 List 인터페이스를 정렬해준다. /* Arrays.sort */ primitive 타입인 경우 Arrays.sort() 를 살펴보니 듀얼피봇 퀵정렬(Dual-Pivot Quicksort)을 사용한다고 되어 있다. Dual-Pivot Quicksort는 Quicksort와는 다르게 Pivot을 2개를 두고 3개의 구간으로 만들어 Quicksort를 진행한다고 한다. 이 때 Pivot을 설정할 때는 Median을 이용한다고 알고 있다. 시간복잡도는 O(n log(n))으로 나와있다. reference(참조) 타.. 더보기
[JAVA] 깊은 복사(Deep Copy)와 얕은 복사(Shallow Copy) /*깊은 복사와 얕은 복사*/ 얕은 복사 (Shallow Copy)는 주소 값을 스택 영역에 복사한다. 깊은 복사 (Deep Copy)는 실제 값을 힙 영역에 복사한다. /* 얕은 복사 */ Person person = new Person("Person1",20); Person newPerson = person; newPerson.setName("NewPerson"); newPerson.setAge(1); System.out.println(person); // NewPerson, 1 System.out.println(newPerson); // NewPerson, 1 newPerson의 객체는 스택에 쌓인다. 하지만 newPerson은 person과 같은 메모리 주소 값을 참조한다. 따라서 newPerso.. 더보기
[Java] equals 와 hashCode - 객체 일 경우 /* equals와 hashCode*/ Java의 모든 객체는 equals와 hashCode 함수를 상속받고 있다. /* equals*/ equals는 두 객체가 동등한지 비교한다. String s1 = "Hello"; String s2 = "Hello"; System.out.println(s1 == s2); //false 메모리 주소 비교 System.out.println(s1.equals(s2)); //true 값 비교 /*equals - 객체일 경우*/ Person person1 = new Person("Person1",20); //Person(String name,int age) Person person2 = new Person("Person1",20); System.out.println(pers.. 더보기
[JAVA] 불변 객체 & 불변 클래스 커스텀 불변 클래스를 어떻게 만드나요? 자바에서 불변 클래스의 예는 무엇인가요? /* 불변 객체란? */ 불변 객체란 객체 생성 이후 내부의 상태가 변하지 않는 객체이다. Java의 대표적인 불변 객체로는 String이 있다. String a = "aa" 에서 a = "bb" 로 한다면, 여기서는 a의 String 객체 자체는 불변이지만 참조하는 객체의 변수를 변경할 수는 있다. 변수에 'final'을 적용하면 그 변수는 한 번 초기화되면 그 값을 변경할 수 없다. 따라서 객체가 생성되고 초기화되면 그 객체는 불변 객체가 된다. 그 외 불변객체로는 LocalDateTime, Integer, Long 드잉 있다. /* 불변 객체 및 final */ 1. 멀티 쓰레드 환경에서는 동기화를 고려하지 않아도 된다.. 더보기
[JAVA] 컬렉션 - LinkedList /* LinkedList란?*/ ArrayList는 내부 배열에 객체를 저장하지만, LinkedList는 인접 객체를 체인처럼 연결해서 관리한다. LinkedList의 경우 삭제/삽입의 시간복잡도가 O(1)이다. /* 메소드 */ package Collections; import java.util.*; import java.io.*; public class LearnLinkedList { public static void main(String[] args){ List list = new LinkedList(); list.add(1); list.add(2); list.add(2,3); // index 2에 3을 추가 System.out.println(list.toString()); // [1, 2, 3] .. 더보기
[JAVA] 벡터 Vector /* Vector란? */ Vector는 ArrayList와 동일한 내부 구조를 가지고 있다. 차이점은 Vector는 동기화된 (synchronized) 메소드로 구성되어 있기 때문에 멀티 스레드가 동시에 Vector()메소드를 실행할 수 없다. 그렇기 때문에 멀티 스레드 환경에서는 안전하게 객체를 추가 또는 삭제할 수 있다. -> 이 말인 즉슨, Vector()메소드들이 여러 스레드에 의해 동시에 호출되더라도, 한 시점에 하나의 스레드만이 메소드를 실행할 수 있도록 제한. /* 테스트 */ package Collections; import java.util.Vector; public class LearnVector { public static void main(String[] args){ Vector .. 더보기
[JAVA] 컬렉션 - ArrayList /* ArrayList란? */ List 인터페이스를 상속받은 클래스 중 하나이다. ArrayList는 추가, 삭제에 대응하여 부족한 공간을 자동으로 조정해준다. 빈번한 객체 추가 삭제가 일어나는 곳에는 ArrayList보다는 LinkedList를 사용하는 것이 좋다. /* ArrayList 메서드 */ package Collections; import java.util.ArrayList; public class LearnArrayList { public static void main(String[] args){ ArrayList list = new ArrayList(); list.add(1); list.add(2); list.add(2,3); // index 2에 3을 추가 System.out.prin.. 더보기

728x90