JAVA
Object 클래스
hohahihi
2023. 3. 13. 16:34
- 모든 클래스는 Object 클래스를 최상위 클래스로 상속받기 때문에 아무런 멤버를 선언하지 않았어도 Object 클래스의 필드와 메소드를 호출할 수 있다.
- java.lang 모듈에 소속된 클래스
주요 메소드
메소드 | 설명 |
boolean equals(Object ob) | 인자로 들어온 객체의 번지를 비교("==" 연산자와 동일한 기능) 같으면 true, 아니면 false를 리턴. |
final Class<?> getClass() | 클래스 이름 출력. |
int hashCode() | 객체의 해쉬 코드 출력. |
String toString() | 객체의 인스턴스 참조값 출력. 특정 클래스에서는 오버라이딩하여 문자열을 출력하기도 함(String 등). |
객체의 동등 비교
- 서로 다른 별개의 객체를 동등한 것으로 볼 것인지를 정의하는 것.
- 객체 간 동등 비교를 할 때는 equals() 메소드를 해당 객체의 동등 조건에 맞게 재정의하여 사용해야 한다.
- 좀 더 정확하게 비교하기 위해서 equals() 메소드와 hashCode() 메소드를 모두 사용하기도 한다.
객체 해시코드: 각각의 객체를 식별할 수 있도록 메모리 번지를 기반으로 생성된 고유의 정수 값. - 동일한 객체를 저장하지 않는 HashSet 자료구조 내부적으로 객체 동등 비교가 사용된다.
객체 문자 정보
- 객체를 문자열로 표현한 값
- toString() 메소드로 객체의 문자 정보 출력 가능.
Object 클래스에 정의된 기본 형식 : [클래스명]@[16진수 해시코드] - 보통 객체 별 유의미한 문자열을 출력할 수 있도록 toString() 메소드를 재정의하여 사용한다.
레코드(Record)
- DTO를 정의할 때 통상적으로 사용되는 코드를 자동으로 생성해주는 기능
- class 선언 시 class 대신 record 키워드 사용
public record Person(String name, int age) {
}
|
- 매개변수에 맞춰 private final 필드, 생성자, Getter 메소드와 재정의된 hashCode(), equals(), toString() 메소드 자동 생성
자동 생성되는 Getter 메소드는 필드와 이름이 동일하다.
public class Person {
private final String name;
private final int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String name() { return this.name; }
public String age() { return this.age; }
@Override
public int hashCode() { ... }
@Override
public boolean equals(Object obj) { ... }
@Override
public String toString() { ... }
}
|
- Java 14부터 지원
DTO(Data Transfer Object)
- 객체 간 데이터 전달을 목적으로 생성한 별도의 객체.
- VO(Value Object)라고도 함.
- 관례적으로 필드는 private 접근자로 선언하고, getter() 와 setter() 메소드로 접근한다.
롬복(Lombok)
- DTO 자동 생성 라이브러리
- JDK에 포함된 표준 라이브러리는 아니지만 코드 생산성을 위해 개발자들이 자주 사용한다.
설치 과정
- 다운로드 사이트(https://projectlombok.org/download) 접속하여 lombok.jar 파일 다운로드
- 명령 프롬프트(관리자 권한으로 실행)에서 다운로드 받은 lombok.jar 파일 위치로 이동하여 다음 코드 입력
Java -jar lombok.jar - lombok 지원받을 이클립스 선택하여 설치(이클립스 재시작 필요)
- 사용할 프로젝트 하위에 lib 폴더 생성하고 다운로드 받은 lombok.jar 파일을 복사
- lombok.jar 파일을 Build Path에 추가
레코드와 롬복 비교
레코드(record) | 롬복(lombok) | |
필드 | prviate final | private |
Getter | 필드명과 동일한 메소드 자동 생성 | get필드명 또는 is필드명(boolean)으로 메소드 자동 생성 |
Setter | 미생성. 생성자를 이용해 객체 생성 시에만 설정 | set필드명으로 메소드 생성 |
hashCode() | 자동 생성 | 자동 생성 |
equals() | 자동 생성 | 자동 생성 |
toString() | 자동 생성 | 자동 생성 |
롬복 어노테이션
어노테이션 | 설명 |
@Data | 기본 생성자, Getter, Setter, equals(), hashCode(), toString() 한번에 추가 (@RequiredArgsConstructor, @Getter, @Setter, @EqualsAndHashCode, @ToString 모두 사용한 것과 동일한 효과) |
@NoArgsConstructor | 매개변수가 없는 기본 생성자 추가 |
@AllArgsConstructor | 모든 필드를 매개변수로 가지는 생성자 추가 |
@RequiredArgsConstructor | final 또는 @NonNull이 붙은 필드를 매개변수로 가지는 생성자 추가 (없으면 기본 생성자 추가) |
@Getter | Getter 메소드 추가 |
@Setter | Setter 메소드 추가 |
@EqualsAndHashCode | equals()와 hashCode() 메소드 추가 |
@ToString | toString() 메소드 추가 |
import lombok.Data;
import lombok.NonNull;
@Data
public class Member {
private final String id;
@NonNull private String name;
private int age;
}
|