프로그래밍에서 두 객체를 비교할 때 어떤 기준으로 비교할지 명확해야 한다. "같다"라는 것이 무엇을 의미하는지 정의해야 하는데, 이때 동일성과 동등성은 객체를 비교할 때 중요한 개념이다.자바에서는 이 두 개념을 `equals()`와 `==`연산자를 통해 구분할 수 있다. 이 개념을 설명하기 전에 `==`연산자는기본 타입을 비교할 때는 값 자체를, 참조 타입을 비교할 때는 객체의 메모리 주소를 비교한다는 사실을 알고 가자. 동일성이란?동일성은 두 객체가 메모리 상에서 동일한 주소를 참조하고 있는지를 비교하는 개념이다. 자바에서는 `==`연산자를 사용하여 객체의 동일성을 비교한다. 두 객체를 `==`연산자로 비교하면, 힙 메모리에서 같은 객체인지를 확인한다. Object obj1 = new Object(..
equals()`equals()` 메서드는 어떤 다른 객체가 이 객체와 동등한지를 나타낸다. `null`이 아닌 참조 값 `x`와 `y`에 대해 이 메서드는 `x`와 `y`가 같은 객체를 참조하는 경우(`x == y`가 `true`인 경우)에만 `true`를 반환한다. 이 메서드를 오버라이딩할 때는 일반적으로 `hashCode()` 메서드도 함께 오버라이딩해야 한다. 이는 `hashCode()` 메서드의 일반적인 계약을 유지하기 위함인데, 이 계약은 동등한 객체들은 동등한 해시 코드를 가져야 한다고 명시한다. 다음은 java8 references의 `equals()` 메서드 부분의 일부를 최대한 원문으로 번역해보았다. 기본 타입이 아닌 참조 타입의 객체를 비교할 때, `equals()` 메서드를 사용한..
알고리즘 구현 문제를 풀다보면, 나는 값만 파라미터로 넘겼는데 배열의 원본 값이 바뀌는 경우가 있다. 이런 문제를 해결해 내 것으로 만들기 위해 얕은 복사와 깊은 복사를 알아보자.얕은 복사얕은 복사는 객체의 주소값을 복사하는 방식이다. 즉, 해당 객체는 원본 객체를 참조하게 된다. 기본 타입은 값이 복사되지만, 참조 타입은 주소값이 복사된다. ➡️ 자바에서 타입을 나눈 이유int[] arr1 = new int[4];arr1[0] = 1;arr1[1] = 2;arr1[2] = 3;arr1[3] = 4;int[] arr2 = arr1;arr2[0] = 4;System.out.println(Arrays.toString(arr1));System.out.println(Arrays.toString(arr2));우리..
일급 컬렉션이란?일급 컬렉션은 컬렉션을 멤버 변수로 갖는 클래스를 만드는 규칙이다. `마틴 파울러`가 제한한 `컬렉션 캡슐화` 원칙에서 시작되었고 이후 컬렉션을 다루는 방식에 SOLID의 단일 책임 원칙(SRP)을 도입했다. 일급 컬렉션은 아래 3가지 조건을 만족하는 클래스다. 컬렉션을 멤버 변수로 갖는 클래스해당 클래스는 컬렉션을 private 필드로 가짐컬렉션에 관련된 로직만 수행하는 메서드를 가짐public class Student { private String id; private String name; public Student(String id, String name) { this.id = id; this.name = name; }}`St..
자바의 예외 계층 구조는 다음과 같다.오늘은 여기서 Checked Exception과 Unchecked Exception에 대해 알아보자.Checked ExceptionChecked Exception은 컴파일 시점에 확인되며, 반드시 처리해야 하는 예외이다. `Exception` 클래스를 상속하지만 `RuntimeException`을 상속하지 않은 모든 예외이다. 반드시 처리해야 하므로 try-catch문으로 예외를 처리하거나 throws를 선언해 호출자에게 예외를 위임한다. Unchecked ExceptionUnchecked Exception은 런타임 시점에 발생하며, 컴파일러가 처리 여부를 강제하지 않는다. `RuntimeException`을 상속하는 모든 예외이다. `Error`와 그 하위 클래스도..
순열순열: 서로 다른 n개 중에서 r개를 선택해 일렬로 배열하는 경우 {1, 2, 3, 4}에서 3개를 선택해 일렬로 배열하는 경우에서 1이 맨 앞에 오는 경우를 생각해보자. 1 - 2 - 31 - 2 - 41 - 3 - 21 - 3 - 41 - 4 - 21 - 4 - 3 위 순열을 구하기 위한 방법을 구체화해보자.2번째 칸에 순열에 넣지 않은 숫자를 넣는다. 넣은 숫자를 방문했다고 체크한다. 3번째 칸에 순열에 넣지 않은 숫자를 넣는다.넣은 숫자를 방문했다고 체크한다. 아직 방문하지 않은 숫자가 있으므로, 다시 2번째 칸으로 돌아가 1번을 반복한다. 이 패턴을 일반화하면,선택한 원소를 순열의 index위치에 넣는다. 이때, 해당 원소를 방문한 것으로 체크한다. 방문하지 않은 원소들 중 하나를 선택한다...