컴퓨터/Java
Java언어를 통해 프로그래밍은 객체지향형 프로그래밍입니다. 그리고 이 Java언어에서는 객체지향 개념을 보다 원활하게 사용할 수 있게 하기 위해서 다양한 기능을 제공해줍니다. 이런 방법을 다형성을 지원하는 방법이라고 하며 대표적으로 메서드를 오버 라이딩 오버 로딩하는 개념이 있습니다.
이 두 가지의 개념과 차이를 알아보고 익숙해져 보도록 합시다.
오버 로딩은 동일 레벨의 클래스에서 같은 함수의 이름을 가지고 다양한 방법으로 정의를 하는 것입니다.
생성자 또한 메서드와 동일한 개념이므로 생성자를 예를 들어보겠습니다.
오버 로딩을 통하여 3가지 생성자 메서드를 만들어 보는 예제입니다.
class Human
{
public int age;
String name;
//생성자 오버로딩해보기
//1번 생성자
Human(String name)
{
this.name = name;
}
//2번 생성자
Human(String name,int age)
{
this.name = name;
this.age = age;
}
//3번 생성자
Human()
{
}
}
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Human h1 = new Human("홍길동"); // 1번 방법으로 생성자 메서드 호출
Human h2 = new Human("이순신,50"); // 2번 방법으로 생성자 메서드 호출
Human h3 = new Human(); //3번 방법으로 생성자 메서드 호출
}
}
생각해보면 아주 당연한 말이지만 오버로딩 기법을 사용하기 위해서는 주의사항이 있습니다. 동일한 레벨의 클래스에서 동일한 이름으로 메서드를 중복 정의했기 때문에 오버 로딩한 메서드 중 어떤 메서드인지 정확히 찾을 수 있도록 구분이 되어야 합니다.
즉 동일한 매개변수의 개수와 매개변수의 타입을 사용하면 어떠한 메서드를 호출하는 것인지 정확히 확인을 할 수 없기 때문에 오버 로딩을 하기 위해서는 위의 개념을 꼭 확인하여 작성해야만 올바른 오버 로딩의 개념을 적용시켜 다형성을 확보할 수 있습니다.
오버 라이딩은 하위 객체에서 상속받은 메서드를 다시 새롭게 정의를 하는 것 입니다.
즉 상위 클래스의 메서드를 하위 클래스에서 다시 정의하는 것 입니다. 예제를 확인해 보면 아래와 같습니다.
// 부모 클래스
class Human
{
public int age;
String name;
//생성자 오버로딩해보기
//1번 생성자
void func()
{
System.out.println("사람입니다.");
}
void func(String place)
{
System.out.println("사람은 "+place+"에 있습니다.");
}
}
class Man extends Human{
String name;
Man(String name,int age)
{
super.name = name;
super.age = age;
}
// 오버라이딩
void func()
{
System.out.println("남자입니다.");
}
// 오버라이딩 + 오버로딩
void func(String place)
{
System.out.println("남자는 "+place+"에 있습니다.");
}
}
오버라이딩은 위와 같이 사용되지만 오버라이딩 역시 사용 시 주의사항이 있습니다. 상위 객체에서 어떠한 메서드를 오버 라이딩할 것인지 정확하게 확인하기 위해 상위 객체에서 정의된 매개변수의 수와 타입이 동일해야만 오버 라이딩을 사용할 수 있습니다.
Java - 모든 클래스는 Object 클래스를 상속 받는다. (0) | 2021.07.28 |
---|---|
Java - 얕은 복사와 깊은 복사 (0) | 2021.07.21 |
Java - class의 상속의 개념(extends) (0) | 2021.07.16 |
Java - Class 생성자 (0) | 2021.07.08 |
Java - 접근 제한자 (0) | 2021.07.07 |
91년생 공학엔지니어의 개발일지
TODAY :
YESTER DAY :
TOTAL :
Commnet