본문 바로가기

728x90

자바

[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.. 더보기
[Java] Predicate 인터페이스 /* Predicate 인터페이스 */ 함수형 프로그래밍을 구현하기 위해 jdk 1.8에 나왔다. /* Predicate 의 test() */ boolean test(T t); test() 메서드는 제너릭 타입 T t로 특정 작업(함수형 프로그래밍, 람다식)을 수행한다. /* 예제1 */ Predicate predicate = (input) -> input > 100; predicate.test(10); //false predicate.test(200); //true 위의 예제를 보면 함수형 프로그래밍을 만들면 test 메서드를 따로 정의할 필요가 없다. (이미 정의가 되어있다) 따라서 다음과 같은 식도 가능하다 /* 예제2 */ public void deleteById(int id){ // Todo는.. 더보기
[JAVA] 람다식 (Lambda Expression) /* 람다식이란 */ 자바 1.8 부터 사용 가능하다. 동일한 패러미터, 동일한 패러미터 값으로 여러 동작을 하고 싶을 때가 있다. ex) 동일한 패러미터 : double x, double y, 동일한 패러미터 값 : x = 1.0 , y = 4.0, 여러 동작 x+y , x-y, x/y ... 이 경우, 함수를 여럿 만드는 것이 아니라 람다식을 이용한 함수형 프로그래밍을 한다. 데이터 처리의 다형성이라고도 볼 수 있다. 코드가 간결해진다. (가독성) 병렬처리 기능을 할 수 있어 멀티쓰레드에 용이하다 람다식의 형식은 다음과 같다. 람다식 : (매개변수, ...) -> { 처리문 } 먼저 추상 인터페이스를 활용한 람다식이 있다. /* 추상인터페이스 이용1 */ 본 코드는, @FunctionalInterfa.. 더보기

728x90