일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- JavaScript
- 개발자
- 형변환
- 프로그래머스 sql 고득점 kit
- github
- MySQL
- 자바
- 스프링
- order by
- 메서드
- Git
- 프로그래머스 SQL
- 프론트엔드
- Java
- DML
- 클래스
- where
- SQL
- 알고리즘
- 정보처리기사
- 프로그래밍
- 웹개발
- mybatis
- select문
- BufferedReader
- 정보처리기사필기요약
- 예외처리
- String클래스
- sql문
- html
- 데이터 조회
- 리눅스
- 백준
- select
- Linux
- 자바스크립트
- StringBuilder
- 입출력
- scanner
- 백엔드
- Today
- Total
ToBe끝판왕
[ JAVA ] Object 클래스 본문
■ java.lang 패키지 에 관하여 알아보자 !
• 자바 언어를 이루는 가장 기본이 되는 클래스들을 보관하는 패키지
• java.lang 패키지의 대표적인 클래스
- Object : 모든 자바 객체의 부모 클래스
- String : 문자열
- Integer, Long, Double : 래퍼타입 , 기본형 데이터 타입을 객체로 만든 것
Object 클래스
• 자바에서 모든 클래스의 최상위 부모 클래스는 항상 Object 클래스이다.
• 객체의 정보를 제공한다던가, 같은지 비교한다던가 라는 모든 객체에게 필요한 기본 기능 제공
• Object 클래스는 모든 객체에게 필요한 공통 기능을 제공하므로, 다른 개발자가 코딩을 한다 해도 프로그래밍을 단순화하고
일관성을 가지게 한다.
• Object는 모든 객체를 대상으로 다형적 참조가 가능하다.
• Object를 통해 전달받은 객체를 호출하기 위해서는 각각의 객체에 맞는 다운캐스팅 과정이 필요하다.
( Object 클래스에 속하지 않은 메서드와 같은 객체의 기능을 호출하기 위해서 )
※ 다운 캐스팅 이란 ?
• 객체의 타입을 상위클래스에서 하위클래스로 변환하는 것
• 상위클래스 참조 변수를 통해 하위 클래스의 특정 메서드 or 필드에 접근이 가능해진다
• 다운캐스팅 전에 instanceOf 연산자를 사용하여 객체의 실체 타입을 확인하는것이 좋다
class Animal {
public void move() {
System.out.println("움직입니다.");
}
}
class Dog extends Animal {
public void bark() {
System.out.println("멍멍");
}
}
public class DowncastingExample {
public static void main(String[] args) {
Animal animal = new Dog(); // 업캐스팅
Dog dog = (Dog) animal; // 다운캐스팅
dog.bark(); // 다운캐스팅 후 하위 클래스의 메소드 호출
}
}
Object 클래스의 주요 메서드
1) equals( )
• 객체의 동등성을 비교한다.
• equals( ) 와 hashCode( ) 는 보통 함께 사용된다.
• 실무에서는 IDE 가 자동으로 만들어주는 equals( ) 를 사용한다.
※ 자바에서 두 객체가 같다는 두가지로 제공
• 동일성( Identity ) : == 연산자를 사용하여 두 객체의 참조가 동일한 객체를 가리키고 있는지 확인 ( 참조값 확인 )
• 동등성( Equality ) : equals( ) 메서드를 사용하여 두 객체가 논리적으로 동등한지 확인
package lang.object.equals;
public class UserV1 {
private String id1;
public UserV1(String id1) {
this.id1 = id1;
}
}
package lang.object.equals;
public class EqualsMainV1 {
public static void main(String[] args) {
UserV1 user1 = new UserV1("id-100");
UserV1 user2 = new UserV1("id-100");
System.out.println("identity = " + (user1 == user2));
System.out.println("equality = " + (user1.equals(user2)));
}
}
// 실행 결과
// eqaulity( 동등성 ) 이 false 가 나온것은 equals() 메서드가 기본적으로 == 동일성 비교 제공
identity = false
equality = false
• Java 에서 Object 클래스에서 정의되어 있는 equals() 메서드
- 기본적으로 == 동일성 비교를 기본으로 제공
- 동등성 비교를 사용하기 위해서는, equals() 메서드를 재정의 해야한다.
public boolean equals(Object obj) {
return (this == obj);
}
• 재정의(오버라이딩) 을 사용하여 equals() 메서드 사용
- user1, user2 서로 다른 객체지만 둘다 같은 id를 가지고 있다 따라서, 동등하다
- 실무에서는 IDE가 자동으로 만들어주는 equals() 사용
package lang.object.equals;
import java.util.Objects;
public class UserV2 {
private String id;
public UserV2(String id) {
this.id = id;
}
// @Override
// public boolean equals(Object obj) {
//
// UserV2 user = (UserV2) obj;
//
// return id.equals(user.id);
//
// }
// 단축키를 사용하여 equals() 재정의 코드 자동 구현
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
UserV2 userV2 = (UserV2) o;
return id.equals(userV2.id);
}
}
package lang.object.equals;
public class EqualsMainV2 {
public static void main(String[] args) {
UserV2 user1 = new UserV2("id-100");
UserV2 user2 = new UserV2("id-100");
System.out.println("identity = " + (user1 == user2));
System.out.println("equality = " + (user1.equals(user2)));
}
}
// 실행 결과
identity = false
equality = true
2) toString( )
• 객체의 정보를 문자열 형태로 제공한다.
• 디버깅과 로깅에 유용하게 사용된다.
• 모든 클래스에서 상속받아 사용이 가능하다.
• System.out.println() 메서드도 Object 매개변수를 사용하고 내부에서 toString()을 호출
따라서, System.out.println()을 사용하면 세상의 모든 객체의 정보를 편리하게 출력 가능
• Object가 제공하는 toString( ) 메서드는 패키지를 포함한 객체의 이름과 객체의 참조값를 16진수로 제공
package lang.object.tostring;
public class ToStringMain1 {
public static void main(String[] args) {
Object object = new Object();
String string = object.toString();
//toString()의 반환값 출력
System.out.println(string);
//object 직접 출력
System.out.println(object);
}
}
// 실행 결과
java.lang.Object@b4c966a
java.lang.Object@b4c966a
• toString( ) 메서드를 재정의( 오버라이딩 )하여 유용한 정보를 제공하는것이 일반적이다.
• 아래 예시의 경우
- print( ) 메서드의 매개변수로 Obj obj 인데 인수로 dog(Dog)가 전달된다.
- 메서드 내에서 obj.toString( ) 을 호출
- Object에 있는 toString( )을 찾는데 이 때, 자식에 재정의(오버라이딩) 된 메서드가 있는지 찾아본다.
- Dog 클래스에 재정의된 메서드가 있기때문에 Dog.toString( ) 을 실행한다.
// Car 클래스
// Car 클래스는 toString( ) 을 재정의하지 않는다.
package lang.object.tostring;
public class Car {
private String carName;
public Car(String carName) {
this.carName = carName;
}
}
// Dog 클래스
// toString( ) 메서드를 재정의 하였다.
package lang.object.tostring;
public class Dog {
private String dogName;
private int age;
public Dog(String dogName, int age) {
this.dogName = dogName;
this.age = age;
}
@Override
public String toString() {
return "Dog{" +
"dogName='" + dogName + '\'' +
", age=" + age +
'}';
}
}
// Object 타입을 매개변수로 사용하여, 다형적 참조를 사용
// ( 세상의 모든 객체 인스턴스를 인수로 받을수 있다.)
// Object 클래스는 모든 클래스의 부모이기에, toString() 메서드를 오버라이딩 가능하다
package lang.object.tostring;
public class ObjectPrinter {
public static void print(Object object) {
String string = "객체 정보 출력: " + object.toString();
System.out.println(string);
}
}
package lang.object.tostring;
public class ToStringMain2 {
public static void main(String[] args) {
Car car = new Car("ModelY");
Dog dog1 = new Dog("멍멍이1", 2);
Dog dog2 = new Dog("멍멍이2", 5);
System.out.println("1.단순 toString 호출");
System.out.println(car.toString());
System.out.println(dog1.toString());
System.out.println(dog2.toString());
System.out.println("2.println 내부에서 toString 호출");
System.out.println(car);
System.out.println(dog1);
System.out.println(dog2);
System.out.println("3.Object 다형성 활용");
ObjectPrinter.print(car);
ObjectPrinter.print(dog1);
ObjectPrinter.print(dog2);
}
}
// 출력 결과
1.단순 toString 호출
lang.object.tostring.Car@4e50df2e
Dog{dogName='멍멍이1', age=2}
Dog{dogName='멍멍이2', age=5}
2.println 내부에서 toString 호출
lang.object.tostring.Car@4e50df2e
Dog{dogName='멍멍이1', age=2}
Dog{dogName='멍멍이2', age=5}
3.Object 다형성 활용
객체 정보 출력: lang.object.tostring.Car@4e50df2e
객체 정보 출력: Dog{dogName='멍멍이1', age=2}
객체 정보 출력: Dog{dogName='멍멍이2', age=5}
※ 해당 내용은 인프런 김영한 강사님의 "실전 자바 중급1" 인강의 참고자료와 예시들을 참고하였습니다
'■ 프로그래밍 SKILLS > JAVA' 카테고리의 다른 글
[ JAVA ] String 클래스 (1) (0) | 2024.08.13 |
---|---|
[ JAVA ] 불변 객체 ( 기본형과 참조형 ) (0) | 2024.08.12 |
[ JAVA ] 예외처리를 위한 try-catch-finally 문 (0) | 2024.05.29 |
[ JAVA ] 문자열 한 글자씩 분리하기 (1) | 2024.05.15 |
[ JAVA ] 예외처리( 다중 catch / 예외 강제발생 / 예외 떠넘기기 / 사용자정의 예외 ) , 열거타입 (0) | 2022.06.01 |