Notice
Recent Posts
Recent Comments
Link
«   2025/08   »
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
Tags
more
Archives
Today
Total
관리 메뉴

노승현

다형성과 타입 변화 본문

JAVA/Mentor JAVA

다형성과 타입 변화

nsh95 2024. 1. 6. 23:32

 

 

다형성(polymorphism)은 프로그래밍에서 여러 가지 형태를 가질 수 있는 능력을 가리킵니다. 객체 지향 프로그래밍에서 다형성은 한 가지 인터페이스나 추상 클래스를 여러 개의 클래스가 구현하거나 상속받을 수 있는 능력을 의미합니다. 이는 코드의 재사용성을 높이고 유연성을 확보하는 데 도움이 됩니다.

타입 변환(type conversion)은 데이터의 타입을 변환하는 과정을 의미합니다. 여기에는 암시적인 변환과 명시적인 변환이 있습니다.

  1. 다형성(Polymorphism):
    • 정적 다형성(Static Polymorphism): 컴파일 시간에 결정되는 다형성입니다. 메소드 오버로딩이 이에 해당하며, 같은 이름의 메소드가 매개변수의 개수나 타입에 따라 다르게 동작하는 것을 말합니다

 

class Calculator {
    int add(int a, int b) {
        return a + b;
    }

    double add(double a, double b) {
        return a + b;
    }
}

 

 

         * 동적 다형성(Dynamic Polymorphism): 실행 시간에 결정되는 다형성입니다. 메소드 오버라이딩과 인터페이스 구현을 통해 이             루어집니다.

 

// 동적 다형성의 예시
class Animal {
    void makeSound() {
        System.out.println("Some generic sound");
    }
}

class Dog extends Animal {
    void makeSound() {
        System.out.println("Bark");
    }
}

class Cat extends Animal {
    void makeSound() {
        System.out.println("Meow");
    }
}

// 실행 시간에 어떤 객체가 메소드를 호출할지 결정됨
Animal myDog = new Dog();
myDog.makeSound(); // "Bark" 출력

 

 

타입 변환(Type Conversion):

  • 암시적 변환(Implicit Conversion): 컴파일러가 자동으로 타입을 변환하는 것을 말합니다. 작은 데이터 타입에서 큰 데이터
    타입으로의 변환 등이 여기에 해당합니다.
int x = 10;
double y = x; // 암시적 변환 발생

 

 

    * 명시적 변환(Explicit Conversion): 프로그래머가 명시적으로 타입을 변환하는 것을 의미합니다. 이를 캐스팅(casting)이라고도 

      부릅니다.

 

double y = 10.5;
int x = (int) y; // 명시적 변환 발생

 

 

 

타입 변환은 데이터의 손실이 발생할 수 있으므로 주의가 필요합니다. 다형성과 타입 변환은 프로그래밍에서 중요한 개념으로, 객체 지향 언어에서 자주 활용됩니다.

 

 

 

2. instanceof 연산자

 

instanceof 연산자는 객체가 특정 클래스의 인스턴스인지를 확인하는 데 사용됩니다. 이 연산자는 주로 조건문에서 객체의 타입을 체크하거나, 다형성을 활용한 코드에서 특정 타입의 객체인지 확인할 때 유용하게 사용됩니다.

 

class Animal {}

class Dog extends Animal {}

class Cat extends Animal {}

public class Main {
    public static void main(String[] args) {
        Animal myDog = new Dog();
        
        if (myDog instanceof Dog) {
            System.out.println("myDog is an instance of Dog");
        } else if (myDog instanceof Cat) {
            System.out.println("myDog is an instance of Cat");
        } else {
            System.out.println("myDog is an instance of Animal");
        }
    }
}
 
 

이 코드에서 myDog instanceof Dogtrue를 반환하므로, "myDog is an instance of Dog"이라는 메시지가 출력됩니다. instanceof는 다형성을 활용하여 실행 시간에 객체의 타입을 확인하는 데 도움을 줍니다.

 

 

3. 오버라이딩과 오버로딩

 

오버로딩과 오버라이딩

-오버로딩과 오버라이딩은 자바의 탄생부터 지금까지 다음과 같은 특징들 때문에 프로그래밍 입문자들이 혼동하기 쉬운 용어이다.

▷메서드 이름이 같다

▷용어 생김새가 비슷하다

-오버로딩 : 자바는 매개변수의 자료형/개수/순서를 기반으로 메서드를 구별하므로 하나의 클래스 안에서 같은 이름의 메서드를 여러 개 구현하고

필요에 따라 메서드를 선택해 사용할 수 있다.

-오버라이딩 : 부모 클래스에게 상속받은 메서드를 재정의하여 자식 클래스용 메서드를 구현하고 자식 객체를 통해 메서드를 호출하면

오버라이딩된 메서드가 호출된다.

-간단히 정리하면 오버로딩은 새로운 메서드를 정의하는 것이며, 오버라이딩은 상속받은 기존의 메서드를 재정의하는 것을 말한다.

 

'JAVA > Mentor JAVA' 카테고리의 다른 글

예외처리  (0) 2024.01.19
내부 클래스  (0) 2024.01.09
상속이란?  (0) 2024.01.02
생성자란?  (1) 2024.01.01
메서드란?  (0) 2023.12.28