자바(Java)〃생성자 오버로딩과 메소드 오버로딩

반응형

                                                 


오버로딩이라면 그냥 한가지만 존재하는줄 알았는데 생성자를 공부하게 되면서 생성자 오버로딩과 메소드 오버로딩이 따로 있다는 것을 알게 되었고 이번 포스팅에서 정리하게 됬습니다. 


학원에서 오버로딩과 오버라이딩을 대충대충 넘어가서 그런지 되게 생소하지만 이번 포스팅으로 정리하며 어느정도 알게되서 기분은 좋습니다. 이래서 공부는 계속 해야되나봐요^^ 중간중간 필요한 경우 저번글을 링크해두었기 때문에 같이 연동해서 보시면 이해하기 빠르실거에요.


 생성자 오버로딩

저번글에서 생성자의 주된 사용목적인 매개변수의 값을 다르게 하고 싶을때 필드 초기화를 해주었는데요. 필드(객체)의 초기화가 아닌 생성자도 초기화 하고 싶을땐 생성자 오버로딩이란걸 사용하시면 됩니다. 필드와 변수에 대한글과 생성자의 조건+매개변수가 무엇인지에 해당되는 글을 먼저 보시면 이해하기 쉬우실거에요.


저번글  자바(Java)〃생성자의 조건 / 필드 초기화 + 매개변수는?


저번글  자바(Java)〃필드와 변수의 선언위치와 초기값(전역변수,지역변수)


생성자 오버로딩은 매개변수가 다른 생성자를 여러개 만들어내는 것입니다. 단 조건이 있는데 같은 클래스 내에서 이루어져야만 하고 선언된 매개변수 타입의 순서와 개수가 달라야 합니다.



그림으로만 보면 잘 모르겠죠? 구분선을 기준으로 위에 세문장은 선언된 매개변수 타입의 개수가 이미 다르기 때문에 순서를 따질 필요없이 생성자 오버로딩이 아주 잘된 모습입니다.


하지만 위 세개의 문장에 구분선 아래 문장을 하나 추가시키면 [ String,String,int ] [String,String, int ] 매개변수 타입의 개수와 순서 모두 똑같기 때문에 생성자 오버로딩이 아니게 됩니다. 매개변수의 이름만 달라진건 소용이 없고 타입을 기준으로 보시면 됩니다.


마찬가지로 세개의 문장에 마지막 문장을 추가 시키면 [ String, String, int ] [String, int, String ] 타입의 순서가 다르지만 개수가 겹치기 때문에 이번에도 생성자 오버로딩의 조건으로서 탈락인거죠.



 메소드 오버로딩

사람들이 오버로딩이라 부르면 대부분 메소드 오버로딩을 지칭하는 말인데요. 메소드 오버로딩 역시 마찬가지로 개념적으로 글로만 정리하면 되게 머리아픕니다. 그림을 먼저 보도록 할게요.



메소드는 클래스 내에 리턴타입 메소드이름 ( 매개변수 ) { } 로 구성되있는데 오버로딩을 하려면 메소드이름이 무조건 동일해야합니다. 그다음 매개변수의 타입의 개수나 순서 둘중에 하나만 달라도 메소드 오버로딩에 해당이 됩니다. 생성자 오버로딩은 두개 모두 달라야 하지만, 메소드 오버로딩은 개수가 같아도 순서만 다르면 된다는 거죠. ( 참고로 리턴타입은 무관합니다.)


다음글  자바(Java)〃오버로딩과 오버라이딩의 차이


그림을 보시면 는 메소드 오버로딩에 해당되는 문장입니다. 첫번째는 메소드 이름이 동일하지 않기 때문에 해당되지 않고 두번째는 매개변수의 이름은 다르지만 매개변수 타입의 개수와 순서가 모두 동일해서 해당되지 않습니다. 마지막은 리턴타입이 바뀌더라도 무관하다라는 문장입니다.  

반응형