본문 바로가기
JAVA-Spring/추상화 | 다형성

JAVA 자바 [ 객체 지향 프로그래밍 ] 다형성 _ 오버로딩

by Super Santj 2019. 7. 16.

다형성은 같은 메소드를 호출해도(다양한 방식으로 표현) 결과가 다 다르게 나타날 수가 있다.

사람도 황인종, 백인종, 흑인종의 문화가 서로 다르듯 다형성도 비슷한 맥락이다.

우선, 생성자 오버로딩 / 메소드의 오버 로딩을 보도록 하자.

다양한 메소드로인하여 관리가 어려울때의 예시 사진

사진과 같이 비슷한 기능을 가진 메소드가 3개 있다고 가정하였을때 반드시 관리상의 어려움이라는 문제를 직면하게 될것이다. 작은 차이이기때문에 외우기가 어렵고, 적은 숫자의 메소드가 있을경우엔 큰 문제가 되지않겠지만, 100개, 1000개 또는 그 이상의 비슷한 메소드를 관리할때 문제가 발생할 수가있다. 이럴때 우리는 다형성이라는 것을 통해 이러한 문제를 해결할수가 있다.

다형성을 통해 메소드 통합을 적용한 예시 사진

오버로딩은 서로 다른 여러개의 비슷한 기능을 가진 메소드가 존재하는 경우 메소드명을 하나로 통합을 하면 매개변수의 갯수와 매개변수의 자료형을 갖고 서로 다른 메소드 처럼 사용 할수 있도록 만들어주는 기법이다.

또한 생성자 오버로딩은 다양한 방법으로 멤버변수의 값을 초기화 시킬 수가 있다.

** 중요 **

다형성 메소드 셋팅 예시 사진

하지만 메소드 오버로딩을 구현 하기위한 조건이 있다.

1. 메소드의 이름은 같게 줘야한다. ** 필수 **

2. 메소드의 매개변수를 다르게 설정, 매개변수가 같아도 되는데, 서로 자료형이 달라야된다.

3. 메소드의 자료형을 다르게 설정

** 중요 **

그렇다면 이제 오버로딩한 메소드를 호출하여보자.

해당 구문은 인스턴스화를 하는 과정중에서 클래스( ) 괄호안에 매개변수를 대입하듯 하면 된다. 이러한 방법은 p2 라는 객체를 생성함과 동시에 생성자를 만들어주는 방법인것이다. 캡슐화에비해 코드가 굉장히 짧다.

즉 매개변수 형식에따라 위에서 만들어 놓은 메소드가 매개변수의 형식에 맞춰 호출되는것이다.

메소드의 호출방법은

1. main() --> 일반 메소드 호출

        객체생성 -> 객체명.일반메소드명(~)

2. 생성자(일반메소드) -> 일반메소드

        객체명.일반메소드명(~) => 객체명을 생략 _ 같은 클래스 내부에서는 객체명을 생략 다른클래스의 객체는 객체명을 생략 (X)

추가적으로 설명 하자면 생성자 내부에서는 자기 클래스의 객체명을 사용할수가 없고, 해당 객체명을 생략하면된다. 그리고 타 클래스의 객체명은 사용이 가능하다.

 

댓글