티스토리 뷰

반응형

다형성

 

객체 지향 언어에서 다형성이란 하나의 클래스나 메서드가 다양한 방식으로 동작이 가능 한 것을 의미합니다. 이러하 다형성에는 오버로딩과 오버라이딩이 존재합니다.

 

 

오버라이딩

 

오버라이딩이란 상위 클래스를 상속받는 하위 클래스가 상위 클래스의 메서드를 사용하지 않고 하위 클래스에서 재정의하여 사용하는 것을 의미합니다. 보통 재사용의 의미로 하위 클래스에서 상위 클래스의 내용을 사용하는 게 일반적이지만 필요에 따라서 하위 클래스에서 상위 클래스의 메서드 내용을 재정의 하여 사용하는 것을 의미합니다.

 

아래는 간단한 오버라이딩의 예를 보여줍니다.

 

1
2
3
4
5
6
7
8
9
public class B {
    
    public void show()
    {
        System.out.println("저는 B 클래스입니다.");
    }
 
}
 

먼저 상위 클래스에 해당하는 B 클래스입니다. show() 메서드가 정의 되어 있습니다.

 

1
2
3
4
5
6
7
8
public class A extends B {
    
    public void show()
    {
        System.out.println("저는 A 클래스입니다.");
    }
 
}

다음은 A클래스로 B클래스를 상속 받습니다. 여기서 주목해야 할 점은 show() 메서드를 재정의, 즉 오버라이딩을 하고 있습니다.

 

1
2
3
4
5
6
7
8
9
public class Main {
    
    public static void main(String argsp[])
    {
        A a = new A();
        a.show();
    }
 
}

A클래스의 인스턴스를 생성 한 후 show() 메서드를 호출 하고 있습니다. 오버라이딩이 이루어지지 않았다면 A클래스의 상위 클래스인 B클래스의 show() 메서드가 호출이 되어야 합니다. 하지만 A 클래스의 show() 메서드를 재정의 하였으므로 B 클래스의 내용은 감춰지고 A클래스의 show() 메서드가 호출이 됩니다.

 

 

오버로딩

 

오버로딩은 같은 메서드 이름으로 다양한 입력에 대해서 처리 할 수 있도록 합니다. 같은 메서드 이름을 사용하면서 다른 인자 정보를 넘겨주면 인자 정보에 맞는 메서드가 호출이 되는 것입니다. 아래 예제를 살펴 보겠습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package study;
 
public class C {
    
    public void show()
    {
        System.out.println("인자가 없는 메서드 호출");
    }
    
    public void show(int a)
    {
        System.out.println(a+"인자를 받아서 호출된 메서드");
    }
    public void show(int a,int b)
    {
        System.out.println(a+"와"+b+"인자를 받아서 호출된 메서드");
    }
 
}
 

클래스 C에는 3개의 메서드가 구현 되어 있습니다. 살펴보면 3개의 메서드의 이름이 모두 동일 합니다. 다만 넘겨 받는 인자 정보의 형태가 모두가 다릅니다. 하나는 인자가 없는 show(), int형 데이터 하나를 인자로 받는 show(), int형 데이터 두개를 인자로 받는 show()메서드가 각각 구현 되어 있습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
public class Main {
    
    public static void main(String argsp[])
    {
        C c = new C();
        c.show();
        c.show(1);
        c.show(1,2);
    }
 
}
 

실제 메인에서 C클래스의 인스턴스를 생성 한 후 show() 메서드를 호출합니다.

 

 

캡슐화

 

캡슐화는 안전과 보안에 대한 내용입니다. 접근지정자를 통해서 보여지는 부분과 숨겨지는 부분을 구분 할 수 있도록 합니다. 즉 객체가 어떤 작업을 수행하는지는 보여 줄 수 있지만 그 안에 세부 방식에 대해서는 숨겨 놓을 수 있습니다.

 

자바에서는 다음과 같은 접근지정자를 제공합니다.

 

public

 

공개 정도가 가장 높고 어느 위치에서도 접근이 가능

 

protected

 

다른 패키지에 존재하는 외부 클래스에서는 접근이 불가능

 

default

 

같은 패키지 내에서만 접근이 가능. 접근지정를 지정해주지 않으면 default로 지정

 

private

 

동일한 클래스에서만 접근이 가능

 

 

 

 

 

 

 

 

 

 

반응형