본문 바로가기
개발용어

객체지향(Object-oriented)용어 - 상속, 다형성, 메소드오버로딩, 메소드오버라이딩, inheritance, method override, method overload

by devscb 2022. 4. 25.
반응형

객체지향(Object-oriented)용어
- 상속, 다형성, 메소드오버로딩, 메소드오버라이딩, inheritance, method override, method overload


상속(Inheritance)


상속은 객체 지향 프로그래밍(OOP) 언어의 핵심 개념 중 하나입니다.
한 클래스의 어트리뷰트와 메소드를 공유할 수 있도록 하는 메커니즘입니다.
상속된 클래스는 상위 클래스의 "하위 클래스" 혹은 "차일드 클래스"라고 합니다.
상속을 통해 프로그래머는 기존 클래스의 동일한 동작을 유지하면서 새로운 구현을 지정하고,
코드를 재사용하며, 공용 클래스와 인터페이스를 통해 코드를 확장할 수 있습니다.


상속을 활용한 코드의 예

 


class A{
 int a = 0;
 public void print(){
 System.out.println(a);
 }
}

// extends A를 씀으로써, B클래스는 A클래스를 상속하게 됩니다.
class B extends A{ 

}

B b = new B();
b.print(); // B 클래스에는 print가 정의되어 있지 않지만, A클래스로부터 상속받은 메소드를 이용할 수 있습니다.
 



다형성(Polymorphism)


다형성은 객체 지향 프로그래밍(OOP)의 핵심 개념 중 하나로,
하나의 타입에 여러 형태를 취할 수 있는 성질입니다.
OOP에서 다형성의 가장 일반적인 사용은 부모 클래스 참조가 자식 클래스 객체를 지칭하는 데 사용될 때 발생합니다.
다형성을 활용하면 기능을 확장하거나, 객체를 변경해야할 때 코드 수정을 최소화할 수 있고,
중복되는 코드까지 제거하여 코드의 효율적인 운영이 가능합니다.
다형성을 구현하는 방법중 대표적인것으로, 오버로딩과 오버라이딩을 살펴보겠습니다.


메소드 오버로딩(메소드 오버로드, Method overloading, Method overload)


클라스 안에서, 메소드 이름은 같지만 매개변수가 다른 경우를 메소드 오버로딩이라고 합니다.
메소드 오버로딩을 사용함으로써 메소드이름을 여러개 지정하지 않아도 되며, 개발시 혼란을 줄일 수 있습니다.
또한, 메소드 호출 시 매개변수의 타입이나 개수에 대해 신경을 쓰지 않고 호출할 수 있습니다.
메소드 오버로딩의 대표적인것으로 System.out.println() 이 있습니다.


1. println(boolean x)
2. println(char x)
3. println(float x)
4. println(String x)


위와 같이 println 으로 메소드의 이름은 동일하나,
매개변수가 다름을 알 수 있습니다.
만일 이 개념이 없다면, 매개변수 타입에 따라 아래와 같이 메소드를 사용해야하는 불상사가 생기게 될것입니다.
코딩할때 여간 귀찮은 일이 아닐수가 없겠지요~


1. printlnBoolean(boolean x)
2. printlnChar(char x)
3. printlnFloat(float x)
4. printlnString(String x)



메소드 오버로딩이 성립하기 위해서는 다음과 같은 조건을 만족해야 합니다.
1. 메소드의 이름이 같다.
2. 매개변수의 개수 또는 타입이 달라야 함.
메소드 오버로딩은 반환 타입과는 관계가 없습니다.
메소드의 매개변수는 같은데, 반환 타입만이 다른 경우에는 오버로딩이 성립하지 않습니다.


또 다른 예제 코드를 살펴보겠습니다.
아래 코드는 매개변수를 다르게 하여 메소드 오버로딩을 한 예제입니다.

 
class Adder{ 
 static int add(int a,int b){return a+b;} 
 static int add(int a,int b,int c){return a+b+c;} 
} 
class TestOverloading{ 
 public static void main(String[] args){ 
 System.out.println(Adder.add(11,11)); 
 System.out.println(Adder.add(11,11,11)); 
 }
}


받아들이는 매개변수의 갯수는 다르지만,
add 라는 통일된 메소드를 사용함으로써 직관적으로 메소드 호출을 할 수 있습니다.


메소드 오버라이딩(메소드 오버라이드, Method overriding, Method override)


하위 클래스(차일드 클래스)가 부모 클래스에서 선언된 것과 동일한 메소드를 갖는 경우,
하위클래스에 선언된 메소드에서 새로운 구현이 되었을때 이를 메소드 오버라이딩 되었다고 합니다.
메소드 오버라이딩은 런타임 다형성(폴리몰피즘, polymorphism)의 대표적인 사례입니다.

메소드 오버라이딩 규칙은 다음과 같습니다.
- 메서드는 부모 클래스와 이름이 같아야 합니다.
- 메서드는 상위 클래스와 동일한 매개변수를 가져야 합니다.
- IS-A 관계(상속)여야 한다.

메소드 오버라이드의 예제 코드를 살펴보겠습니다.


class Vehicle{ 
 void run(){System.out.println("Vehicle is running");} 
} 

class Bike2 extends Vehicle{ 
 // 부모 메소드인 Vehicle 의 run 메소드를 오버라이드(override)했습니다.
 void run(){System.out.println("Bike is running");} 
} 




메소드 오버로딩과 메소드 오버라이딩의 비교


1) Method Overloading은 프로그램의 가독성을 높이기 위해 사용되며, Method Overriding은 Super Class에서 제공하는 Method의 구체적인 구현을 제공하기 위해 사용된다.
2) Method Overloading은 Class 내에서 수행되며, Method Overriading은 IS-A(상속) 관계가 있는 2개의 Class에서 발생한다.
3) Method Overloading의 경우 파라미터가 달라야 하며, Method Overriding의 경우 파라미터가 같아야 한다.
4) Method overloading은 compile time polymorphism의 예이며, Method overriding은 Run time polymorphism의 예이다.

총평


메소드 오버로딩과 오버라이딩은 한글로 하면 비슷하지만 영어로는 오버(over)부분만 동일할 뿐 완전히 다릅니다.
또한 그 개념도 완전히 다르기에 각각의 의미가 무엇인지 헷갈리지 않고 잘 이해하여야 합니다.
또한, 오버로딩과 오버라이딩은 OOP 에서 정말로 빈번하게 사용되므로 잘 이해하고 사용할 수 있어야 되겠습니다.

상속, 다형성, 메소드오버로딩, 메소드오버라이딩, inheritance, method override, method overload
#상속, #다형성, #메소드오버로딩, #메소드오버라이딩, #inheritance, #method ,#override, #overload,#오버라이딩,#오버로딩,#overriding,#overloading,#OOP,#객체지향

 

https://devscb.com/post/89

 

Object-oriented terminology - inheritance, polymorphism, method overloading, method overriding, inheritance, method override, me

Object-oriented terminology Inheritance, polymorphism, method overloading, method overriding, inheritance, method override, method overload InheritanceInheritance is one of the core concepts of obje

devscb.com

 

728x90
반응형

댓글