JAVA(Object 클래스)

김민성·2023년 6월 27일

JAVA

목록 보기
10/11

Object 클래스

  • class Object는 JAVA에서 모든 클래스의 superclass이다.
    -> 모든 클래스의 최상위에 Object라는 클래스가 있음.
  • class Object의 멤버 메서드
    -> boolean equals(Object obj)
    -> int hashCode()
    -> String toString()
    -> Class<?> getClass()
  • JAVA의 모든 클래스는 만들어 주지 않아도 이미 equals와 toString 메소드를 가지고 있다.

equals()

  • Object 클래스의 equals 메소드의 매개변수는 Object 타입이다
    -> public boolean equals ( Object others) { }
  • 매개변수로 제공된 객체와 자기 자신의 동일성 검사
    -> 두 객체의 내용 동일성을 검사하려면 override 해서 써야 함.
  • 의도대로 사용하려면 override 해야 함.

hashCode()

  • 객체 메모리 주소를 이용해서 해시코드를 생성하기 때문에 객체마다 다른 정수값 리턴
  • equals()와 유사하게 두 객체가 동등한지 비교할 때 주로 사용
  • 객체 데이터를 기준으로 재정의해서 새로운 정수값을 리턴하도록 하는 것이 일반적
    -> 객체가 다르다 할지라도 내부 데이터가 동일하다면 같은 정수값을 리턴하기 위해서

자바는 두 객체의 동등함을 비교할 때 hashCode()와 equals() 메소드를 같이 사용하는 경우가 많음
1. hashCode()가 리턴하는 정수값이 같은지 확인
2. equals()가 true를 리턴하는지 확인

toString()

  • toString() 메소드를 따로 만들어주지 않으면 '클래스 이름@객체 hash code'가 반환됨.
  • 의도한 결과를 얻고 싶다면 toString 메소드를 overriding하여 새로 만들어야 함.
    -> Date클래스는 현재 날짜와 시간 / String클래스는 저장된 문자열 리턴하도록 toString()메소드 재정의하고 있음

레코드 선언

: 데이터 전달을 위한 DTO(Data Transfer Object)를 작성할 때 반복적으로 사용되는 코드를 줄이기 위해 레코드 사용.

Person 클래스

  • private final 필드 (String name, int age)
  • Getter(name, age)
  • hashCode(), equals(), toString() 메소드 재정의
public record Person(String name, int age){ }

이렇게 선언된 레코드 소스를 컴파일하면 private final 필드, 생성자, Getter, hashCode(), equals(), toString() 메소드 재정의 코드 자동 생성

System 클래스

: 자바 프로그램은 운영체제상에서 바로 실행되는 것이 아니라 자바 가상 머신(JVM)위에서 실행됨
-> 운영체제의 모든 기능을 자바 코드로 직접 접근하기 어려움
-> System 클래스는 운영체제 일부 기능 제공

문자열 클래스

String 클래스

: 문자열을 저장하고 조작할 때 사용

  • 문자열 리터럴을 자동으로 String 객체로 생성되지만, String 클래스의 다양한 생성자를 이용해서 직접 객체를 만들 수도 있음

StringBuilder 클래스

: String은 내부 문자열을 수정할 수 없기에 잦은 문자열 변경 작업을 해야 한다면 StringBuilder 사용

  • 내부 버퍼(데이터를 저장하는 메모리)에 문자열을 저장해두고 그 안에서 추가, 수정, 삭제 작업 수행
  • append(str), insert(idx, str), delete(start, end), replace(start, end, str), toString()

StringTokenizer 클래스

: 문자열이 구분자로 연결되어 있을 경우, String의 split을 이용하거나 StringTokenizer 클래스 이용

  • split은 정규 표현식으로 구분하고, StringTokenizer는 문자로 구분

Wrapper class

: 기본 타입의 데이터를 객체로 포장해주는 클래스
-> 이런 객체를 포장 객체라고 함

  • Object 타입의 배열에는 어떤 객체든 참조할 수 있음.
    -> 하지만 int, double, char 등의 primitive type 데이터는 참조할 수 없다.(객체가 아니기 때문)
  • primitive type데이터를 객체로 만들어야 하는 경우
    -> Integer, Double, Character, Boolean 등의 wrapper class 이용
  • 포장 객체는 내부 값을 비교하기 위해 ==, != 연산자 사용 불가
    -> 내부 값을 비교하는 것이 아닌 주소를 비교하는 연산자이기 때문
    -> equals로 내부 값 비교

Auto Boxing / Auto Unboxing
: primitive 데이터를 알아서 wrapping 하여 객체로 만들어 줌 / 알아서 unwrapping 하여 primitive 데이터로 변환.
-> primitive 데이터를 배열에 넣을 수 있음

Object [] array = new Object [100];
int a = 20;
array[0] = a; // auto boxing

int b = (Integer)array[0]; // auto unboxing

Math 클래스

: Math 클래스가 제공하는 메소드는 모두 static 이므로 Math 클래스로 바로 사용 가능.

Date / Calendar 클래스

Date 클래스

: Date() 생성자는 컴퓨터의 현재 날짜를 읽어 Date 객체로 만듦.

Date now = new Date();

Calendar 클래스

: static 메소드인 getInstance()메소드를 통해 컴퓨터에 설정되어 있는 시간대를 기준으로 Calendar 하위 객체를 얻을 수 있음

Calendar now = Calendar.getInstance();

날짜 시간 비교

Format 클래스

DecimalFormat

SimpleDateFormat

정규 표현식 클래스

정규 표현식 작성 방법

Pattern 클래스

: 정규표현식으로 문자열을 검증하는 matches 메소드 제공

boolean result = Pattern.matches("정규식", "검증할 문자열");

어노테이션

: @ 으로 작성되는 요소. 클래스 / 인터페이스를 컴파일하거나 실행할 때 어떻게 처리해야 할 것인지를 알려주는 설정 정보

  • 컴파일 시 사용하는 정보 전달
  • 빌드 툴이 코드를 자동으로 생성할 때 사용하는 정보 전달
  • 실행 시 특정 기능을 처리할 때 사용하는 정보 전달

0개의 댓글