일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 삼항연산자
- 프로그래머스
- Java
- setter
- 작성순서
- 향상된for문
- .substring
- 이터레이블
- SELECT 절
- SQL
- 칼럼명에 별칭 지정
- 제어문
- 객체
- 생성자
- 오라클
- 생성자쓰는이유
- for문
- int오류
- HAVING
- .repeat
- Join
- 연산자
- sql오류
- executeUpdate
- ifelse
- getter
- 카카오인턴십
- 상속
- 자바
- 겟터
- Today
- Total
CoDream
[JAVA]Object 클래스, 다형성 본문
Object 클래스
자바의 모든 클래스의 최상위 부모 클래스입니다. 즉, 모든 클래스는 암묵적으로 Object 클래스를 상속받습니다. 따라서 Object 클래스의 멤버들은 모든 자바 클래스에서 사용할 수 있습니다.
Object 클래스는 자바의 모든 객체가 가지는 일반적인 메소드를 정의합니다. 몇 가지 주요 메소드는 다음과 같습니다:
- toString(): 객체의 문자열 표현을 반환합니다. 대개는 객체의 클래스 이름과 해시 코드를 포함하는 문자열을 반환합니다.
- equals(Object obj): 객체의 동등성을 확인하는 메소드입니다. 두 객체가 동일한지를 판단합니다.
- hashCode(): 객체의 해시 코드를 반환합니다. 해시 기반 컬렉션에서 객체의 키로 사용될 수 있습니다.
- getClass(): 객체의 클래스를 나타내는 Class 객체를 반환합니다.
- clone(): 객체의 복제본을 생성하여 반환합니다.
- finalize(): 객체가 소멸되기 전에 호출되는 메소드입니다.
- notify(), notifyAll(), wait(): 스레드 간의 통신을 위한 메소드들입니다.
Object 클래스의 메소드들은 필요에 따라 하위 클래스에서 오버라이딩할 수 있습니다. 예를 들어, toString() 메소드는 객체의 문자열 표현을 반환하기 위해 자식 클래스에서 재정의될 수 있습니다.
또한, 자바에서 많이 사용되는 데이터 구조인 배열 역시 Object 클래스를 상속받습니다. 그래서 모든 배열은 Object 클래스의 멤버들을 사용할 수 있습니다.
Object obj = new Object();
String str = obj.toString(); // toString() 메소드 사용 가능
이처럼 Object 클래스는 자바의 모든 클래스에서 기본적으로 사용되는 기능을 제공하여 객체 지향 프로그래밍의 기반을 형성합니다.
다형성(polymorphism)
객체 지향 프로그래밍에서 중요한 개념 중 하나입니다.
다형성은 여러 가지 형태를 가질 수 있는 능력을 의미합니다. 이는 자바에서 다음과 같은 세 가지 방식으로 구현됩니다.
- 메서드 다형성 (Method Polymorphism):
- 자바에서는 메서드 오버로딩(Method Overloading)과 메서드 오버라이딩(Method Overriding)을 통해 메서드 다형성을 구현합니다.
- 메서드 오버로딩은 같은 이름의 메서드가 매개변수의 개수 또는 타입에 따라 다르게 동작할 수 있도록 하는 것입니다.
- 메서드 오버라이딩은 부모 클래스의 메서드를 자식 클래스에서 재정의하여 사용하는 것을 의미합니다.
- 업캐스팅 (Upcasting):
- 업캐스팅은 상속 관계에서 부모 클래스 타입으로 자식 클래스의 객체를 참조할 수 있는 기능입니다.
- 이를 통해 한 가지 타입으로 여러 가지 구현체를 다룰 수 있습니다.
- 인터페이스 다형성 (Interface Polymorphism):
- 인터페이스는 여러 클래스가 동일한 동작을 제공할 수 있도록 해주는데, 이를 이용하여 인터페이스를 구현한 클래스들을 동일한 인터페이스 타입으로 다룰 수 있습니다.
- 이를 통해 클라이언트 코드는 구현체의 구체적인 클래스를 알 필요 없이 인터페이스를 통해 다양한 구현을 사용할 수 있습니다.
다형성은 자바의 강력한 특성 중 하나로, 코드의 유연성을 높이고 재사용성을 향상시킵니다. 객체 지향 프로그래밍에서 중요한 개념 중 하나이며, 자바에서 다형성을 활용함으로써 코드를 더 유연하게 작성할 수 있습니다.
- 메서드 다형성:
class Animal {
void sound() {
System.out.println("동물 소리");
}
}
class Dog extends Animal {
@Override
void sound() {
System.out.println("멍멍");
}
}
class Cat extends Animal {
@Override
void sound() {
System.out.println("야옹");
}
}
public class Main {
public static void main(String[] args) {
Animal dog = new Dog(); // 업캐스팅
Animal cat = new Cat(); // 업캐스팅
dog.sound(); // 다형성으로 Dog 클래스의 sound() 메서드 호출
cat.sound(); // 다형성으로 Cat 클래스의 sound() 메서드 호출
}
}
- 인터페이스 다형성:
interface Animal {
void sound();
}
class Dog implements Animal {
@Override
public void sound() {
System.out.println("멍멍");
}
}
class Cat implements Animal {
@Override
public void sound() {
System.out.println("야옹");
}
}
public class Main {
public static void main(String[] args) {
Animal dog = new Dog();
Animal cat = new Cat();
dog.sound(); // 다형성으로 Dog 클래스의 sound() 메서드 호출
cat.sound(); // 다형성으로 Cat 클래스의 sound() 메서드 호출
}
}
메서드 다형성과 인터페이스 다형성을 함께 사용하여 다양한 형태의 동물 객체를 동일한 방식으로 다룰 수 있습니다. 업캐스팅을 통해 각각의 동물 객체를 공통의 상위 클래스나 인터페이스 타입으로 다룰 수 있으며, 이를 통해 클라이언트 코드는 구체적인 구현체에 의존하지 않고도 다형성을 활용할 수 있습니다.
'JAVA > JAVA 이론' 카테고리의 다른 글
[JAVA] 향상된 for문(Enhanced for loop) / Iterator, Iterable (0) | 2024.03.05 |
---|---|
[JAVA] 추상 메소드(Abstract), 추상 클래스 상관관계 (0) | 2024.03.04 |
[JAVA] Override (메소드 재정의) (0) | 2024.03.04 |
[JAVA] 상속extend / 부모 클래스(Superclass), 자식 클래스(Subclass) (0) | 2024.03.04 |
[JAVA] 오버로딩(Overloading) (0) | 2024.02.28 |