ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Object 클래스
    JAVA 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에 포함된 표준 라이브러리는 아니지만 코드 생산성을 위해 개발자들이 자주 사용한다.

     


    설치 과정

    1. 다운로드 사이트(https://projectlombok.org/download) 접속하여 lombok.jar 파일 다운로드
    2. 명령 프롬프트(관리자 권한으로 실행)에서 다운로드 받은 lombok.jar 파일 위치로 이동하여 다음 코드 입력
      Java -jar lombok.jar
    3. lombok 지원받을 이클립스 선택하여 설치(이클립스 재시작 필요)
    4. 사용할 프로젝트 하위에 lib 폴더 생성하고 다운로드 받은 lombok.jar 파일을 복사
    5. 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;
    }

     

    롬복으로 생성한 Member DTO의 멤버

     


    'JAVA' 카테고리의 다른 글

    문자열 관련 클래스  (0) 2023.03.14
    System 클래스  (0) 2023.03.13
    중첩 클래스(Nested Class)와 중첩 인터페이스(Nested Interface)  (0) 2023.03.10
    제네릭(Generic)  (0) 2023.03.02
    컬렉션 자료구조(Collection Data Structure)  (0) 2023.03.02
Designed by Tistory.