반응형
메서드의 오버로딩
하나의 클래스 내에서 동일한 이름의 메서드를 여러개 사용할 수 있는 객체지향 기법

 

 

 

메서드의 동작 및 기능이 비슷하다면  메서드 이름을 같게 만들어 사용하면 편리하다.
메서드도 변수와 마찬가지로 같은 클래스 내에서 서로 구별될 수 있어야 하기 때문에 각기 다른 이름을 가져야한다.
그러나 자바에서는 한 클래스 내에 이미 사용하려는 이름과 같은 이름을 가진 메서드가 있더라도
조건 - 메서드의 이름이 같고, 매개변수의 개수 or 타입이 다르면, 같은 이름을 사용해서 메서드를 정의할 수 있다.
(=메서드의 시그니처가 달라야한다.)

오버로딩된 메서드들은 매개변수에 의해서만 구별될 수 있으므로 반환 타입은 오버로딩을 구현하는데 아무런 영향을 주지 못한다.

 

public class Ex_9_Overloading {
    public static void main(String[] args) {
        float v = add(35.6f, 56.7f);
        System.out.println("v = " + v);
        
        int x = add(15,5);
        System.out.println("x = " + x);
    }

    //Q.매개변수로 두개의 정수 값을 받아서 / 총합을 구하여 / 리턴 하는 / [메서드를 정의]하세요.
    public static int add(int a, int b) {  
		//main이 static 키워드를 가지고 있으니 호출될 메서드에도 static을 작성
        int sum = a+b;
        return sum;
    }

    //Q. 매개변수로 두개의 실수 값을 받아서 / 총합을 구하여 / 리턴하는 / [메서드를 정의] 하세요.
    public static float add(float a, float b) {
        float sum = a+b;
        return sum;
    }
}

 

 

생성된 메서드들의 이름은 같지만 메서드 내의 개수는 같고, 매개변수가 int와 float로 다르기때문에 add 2개를 중복하여 정의할 수 있다 
→ 메서드의 오버로딩메서드들의 이름이 같은 상황에서 만약 add의 중복정의가 많이 되어있다면, add 메서드는 어떤 메서드로 호출이 되어야 하는지는아래로 전부 읽어내려가면서 찾기 때문에 실행 속도가 더딜 수 있다.
매개변수의 타입을 하나하나 비교해서 일치하는 메서드를찾아야하기 때문이다.

동작이나 기능이 비슷하더라도 오버로딩기법으로 작성하는 것이 아닌 , 타입에 맞춰 각각의 메서드 이름을 지정하게 되면,
개발자가 알아야하는 메서드 이름들이 너무 많아지기 때문에 효율적으로 작성하기 위해 중복정의가 가능하도록 한다.

 

정적바인딩이란?
컴파일 시점에서 사용될 (호출될) 메서드가 결정(연결) 되는 바인딩

정적 바인딩(Static binding)은 프로그램의 실행 전에 코드가 수행되는 바인딩 방식입니다.

정적 바인딩은 일반적으로 메서드 오버로딩(Overloading)과 관련이 있습니다.
메서드 오버로딩은 같은 이름의 메서드가 매개변수의 개수나 타입에 따라 다른 동작을 수행할 수 있는 기능을 말합니다.
정적 바인딩은 컴파일러가 함수 호출 시 해당하는 함수를 컴파일 타임에 정확하게 판단하고 바인딩합니다.
이는 메서드 호출 시 호출한 코드의 컨텍스트와 매개변수의 개수와 타입을 기반으로 결정됩니다.

ex) add(34.5f, 56.5f) → add_float_float(34.5f, 56.5f) → 정적바인딩으로 인해 왼쪽과 같이 코드를 작성하면
컴파일될 시점에서 매개변수의 타입을 알아내 _float_float 이렇게 바꾼 후 해당 메서드를 호출하기 때문에 시간이 소요되지 않습니다.

정적 바인딩의 장점은 실행 시간에 바인딩이 발생하지 않기 때문에 실행 성능이 빠르다는 것입니다.
또한 컴파일 시에 바인딩이 결정되므로 오류를 미리 확인할 수 있습니다.
하지만 정적 바인딩은 실행 중에 동적으로 객체의 타입이 변하는 상황에서는 적용되지 않습니다.
예를 들어, 다형성(polymorphism)이 적용된 경우에는 정적 바인딩이 아닌 동적 바인딩(Dynamic binding)이 사용됩니다.
동적 바인딩은 실행 시간에 객체의 실제 타입에 따라 메소드를 결정하므로 실행 시 동적으로 바인딩이 발생합니다.

요약하면, 정적 바인딩은 컴파일 타임에 함수 호출을 어떤 구현체와 연결할지 결정하는 바인딩 방식입니다.
함수 오버로딩과 관련이 있으며 실행 성능이 빠르고 컴파일 시에 오류를 확인할 수 있습니다.
하지만 실행 중에 객체의 타입이 변하는 경우에는 적용되지 않습니다.

728x90

+ Recent posts