Java equals() == contains(Java의 `equals()`, `==`, 그리고 `contains()` 메서드는 객체와 데이터를 비교하거나 특정 데이터를 포함하고 있는지 확인하는 데 사용됩니다. 각 메서드는 특정한 목적과 사용 방식을 가지고 있으며, 이를 정확히 이해하고 사용하는 것이 중요합니다. 다음은 각각의 메서드에 대한 설명과 예시, 그리고 그 차이점을 상세하게 설명한 내용입니다.
### 1. `==` 연산자
`==` 연산자는 두 변수가 같은 객체를 참조하는지 비교합니다. 이는 두 객체의 메모리 주소를 비교하는 연산자입니다. 기본 데이터 타입(primitive type)과 객체 참조(reference type) 모두에 사용할 수 있지만, 사용되는 방식이 다릅니다.
#### 기본 데이터 타입(Primitive Type)에서의 `==`
기본 데이터 타입에는 `int`, `char`, `boolean`, `float`, `double` 등이 있습니다. 이 타입의 변수에 `==` 연산자를 사용하면 값 자체를 비교합니다.
```java
int a = 10;
int b = 10;
System.out.println(a == b); // true
```
위의 예제에서는 `a`와 `b`가 같은 값을 가지고 있으므로 `==` 연산자는 `true`를 반환합니다.
#### 객체 참조(Reference Type)에서의 `==`
객체 참조 타입에는 `String`, `Integer`, `CustomObject` 등이 있습니다. 이 타입의 변수에 `==` 연산자를 사용하면 두 변수가 동일한 객체를 참조하는지 비교합니다.
```java
String str1 = new String("Hello");
String str2 = new String("Hello");
System.out.println(str1 == str2); // false
```
위의 예제에서는 `str1`과 `str2`가 같은 문자열 값을 가지고 있지만, 서로 다른 객체를 참조하고 있으므로 `==` 연산자는 `false`를 반환합니다.
#### 예시 코드
```java
String str1 = "Hello";
String str2 = "Hello";
String str3 = new String("Hello");
System.out.println(str1 == str2); // true, 같은 리터럴을 참조
System.out.println(str1 == str3); // false, str3는 새로운 객체
```
여기서 `str1`과 `str2`는 자바의 문자열 풀(string pool)에 의해 동일한 리터럴을 참조하기 때문에 `true`를 반환합니다. 반면 `str3`는 새로운 객체이므로 `false`를 반환합니다.
### 2. `equals()` 메서드
`equals()` 메서드는 두 객체의 내용이 동일한지 비교합니다. 기본적으로 `Object` 클래스에 정의되어 있으며, 이를 각 클래스에서 오버라이드하여 자신만의 비교 방식을 정의할 수 있습니다.
#### 기본 `equals()` 메서드
`Object` 클래스의 기본 `equals()` 메서드는 `==` 연산자와 동일하게 동작합니다.
```java
public boolean equals(Object obj) {
return (this == obj);
}
```
#### 오버라이드된 `equals()` 메서드
많은 클래스에서는 `equals()` 메서드를 오버라이드하여 객체의 내용을 비교합니다. 예를 들어, `String` 클래스에서는 문자열의 내용을 비교하도록 오버라이드되어 있습니다.
```java
String str1 = new String("Hello");
String str2 = new String("Hello");
System.out.println(str1.equals(str2)); // true
```
위의 예제에서는 `str1`과 `str2`가 같은 문자열 내용을 가지고 있으므로 `equals()` 메서드는 `true`를 반환합니다.
#### 예시 코드
```java
class Person {
String name;
int age;
Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
Person person = (Person) obj;
return age == person.age && Objects.equals(name, person.name);
}
}
Person p1 = new Person("John", 25);
Person p2 = new Person("John", 25);
System.out.println(p1.equals(p2)); // true
```
여기서 `Person` 클래스의 `equals()` 메서드를 오버라이드하여 이름과 나이가 같은지를 비교합니다. `p1`과 `p2`는 같은 내용이므로 `equals()`는 `true`를 반환합니다.
### 3. `contains()` 메서드
`contains()` 메서드는 특정 컬렉션(Collection)이나 문자열에 특정 요소나 문자열이 포함되어 있는지 확인하는 데 사용됩니다.
#### 문자열에서의 `contains()`
`String` 클래스에서 `contains()` 메서드는 주어진 문자열이 부분 문자열로 포함되어 있는지 확인합니다.
```java
String sentence = "The quick brown fox jumps over the lazy dog";
System.out.println(sentence.contains("quick")); // true
System.out.println(sentence.contains("slow")); // false
```
위의 예제에서는 `sentence` 문자열에 "quick"이 포함되어 있으므로 `true`를 반환하고, "slow"는 포함되어 있지 않으므로 `false`를 반환합니다.
#### 컬렉션에서의 `contains()`
`List`, `Set`과 같은 컬렉션에서 `contains()` 메서드는 주어진 객체가 컬렉션에 포함되어 있는지 확인합니다.
```java
List<String> list = new ArrayList<>();
list.add("apple");
list.add("banana");
list.add("cherry");
System.out.println(list.contains("banana")); // true
System.out.println(list.contains("grape")); // false
```
위의 예제에서는 `list`에 "banana"가 포함되어 있으므로 `true`를 반환하고, "grape"는 포함되어 있지 않으므로 `false`를 반환합니다.
#### 예시 코드
```java
Set<Integer> set = new HashSet<>();
set.add(1);
set.add(2);
set.add(3);
System.out.println(set.contains(2)); // true
System.out.println(set.contains(5)); // false
```
여기서 `set`에 2가 포함되어 있으므로 `true`를 반환하고, 5는 포함되어 있지 않으므로 `false`를 반환합니다.
### 차이점 요약
- `==` 연산자는 두 변수가 동일한 객체를 참조하는지(메모리 주소가 같은지)를 비교합니다. 주로 객체 참조 비교에 사용됩니다.
- `equals()` 메서드는 두 객체의 내용이 같은지 비교합니다. 객체의 동등성(equality)을 정의하는 메서드로, 클래스에 따라 오버라이드하여 사용됩니다.
- `contains()` 메서드는 컬렉션이나 문자열 내에 특정 요소나 문자열이 포함되어 있는지 확인합니다. 이는 주로 `Collection` 인터페이스나 `String` 클래스에서 사용됩니다.
이처럼 각 메서드는 사용하는 상황과 목적이 다르므로 올바르게 사용해야 합니다. `==` 연산자는 객체 참조 비교에, `equals()` 메서드는 객체 내용 비교에, 그리고 `contains()` 메서드는 포함 여부 확인에 사용됩니다. 이러한 차이점을 이해하고 적절히 사용하는 것이 자바 프로그래밍에서 중요한 부분입니다.) 예시 및 차이점
'게으른 개발자의 끄적거림' 카테고리의 다른 글
배치 프로그램이란?(batch) (0) | 2024.05.23 |
---|---|
CSS 깨짐 현상 해결 방법 (0) | 2024.05.22 |
Java int 정수형 숫자 원으로 환산 방법(3자리마다 , 표기) (0) | 2024.05.20 |
Java 환율 계산(int형을 달러, 원으로 환산) (0) | 2024.05.20 |
jpg, png, jpeg 파일 차이점 (0) | 2024.05.16 |