본문 바로가기
컴소니/개발

[다시 시작하는 JAVA 개발] 메소드 이해하기

by 금소니 2022. 5. 8.
반응형

#212

다시 시작하는 자바 공부로 클래스를 공부하면서 기본적인 메소드에 대해 알아봤습니다.

 

[다시 시작하는 JAVA 개발] 클래스 이해하기

#211 1. 클래스(Class)란? JAVA는 대표적인 객체지향형 프로그래밍 언어입니다. 클래스뿐만 아니라 추상클래스, 인터페이스 등 객체지향적인 요소를 이용하여 프로그램을 구성합니다. 이 중에서 가

goldsony.tistory.com

메소드를 사용하는데 있어 잘 알아둘 부분이 있어 추가적으로 몇가지 내용들에 대해 정리해보기로 했습니다.

 

메소드의 개념에 대해서는 위의 포스팅에서 설명하여 다음으로 알고자하는 내용에 대해서만 작성해보도록 하겠습니다.

 

1. 메소드 오버로딩(overloding)

메소드를 사용하다보면 동일한 메소드명을 가지고 있음에도 타입이 다르거나 메개변수 유무에 따라 다양하게 사용되는 경우가 있습니다.

이처럼 메소드명을 중복하여 정의하지만 각각 다른 기능을 가지는 것을 메소드 오버로딩이라고 합니다.

이 때 중요한 개념인 메소드 시그니처를 알아야 합니다.

메소드 시그니처란 메소드 선언 시 사용되는 메서드명, 입력매개변수의 자료형을 의미합니다.

여기서 메소드명이 같더라도 입력매개변수가 다르다면 메소드 시그니처가 다른 것을 의미하고 다른 메소드처럼 기능을 수행할 수 있습니다.

따라서 오버로딩의 경우 같은 하나의 메소드명을 이용하여 다양한 기능을 구현할 수 있는 특징을 가지고 있습니다.

 

그렇다면 이제 어떻게 사용하면 되는지 알아보도록 하겠습니다.

 

클래스 이해하기 포스팅에서도 사용한 적이 있는데 사용방법은 정말 간단합니다.

 

1, 2, 3, 4의 케이스에 대하여 같은 메소드명을 가진 메소드를 작성하고 실행해보도록 하겠습니다.

1) 입력 값 없이 문장 출력

2) 입력한 정수 값 출력

3) 입력한 실수 값 출력

4) 입력한 문자열 출력

보시면 메소드명은 같지만 각각 입력매개변수가 다릅니다.

 

메소드 전부를 한 번 메인에서 호출해보도록 하겠습니다.

보시면 동일한 메소드명으로 하여 입력매개변수를 다르게 받고 있습니다.

 

그럼 결과를 확인해보도록 하겠습니다.

콘솔에 입력한 매개변수대로 값이 출력되었습니다.

 

이처럼 오버로딩의 경우 한 메소드명으로 다양한 기능을 구현하고자할 때 많이 사용됩니다.

 

2. 메소드 오버라이딩(Overriding)

메소드 오버라이딩의 경우 클래스 상속에 대한 개념을 먼저 알아야해서 상속에 대한 부분을 공부한 후 정리하도록 하겠습니다.

 

[다시 시작하는 JAVA 개발] 클래스 상속

#217 1. 클래스 상속이란? 다들 상속이라는 개념에 대해서 알고 계시죠? 예를들어 부모가 자식에게 재산을 상속한다는 것처럼 클래스에서도 비슷한 개념을 가지고 있습니다. 자바에는 부모 클래

goldsony.tistory.com

그럼 클래스 상속에 대해 알아봤으니 메소드 오버라이딩에 대해 자세히 알아보도록 하겠습니다.

 

메소드 오버라이딩이란 부모 클래스와 자식 클래스가 있을 때 부모 클래스의 메서드를 동일한 이름으로 자식 클래스에서 재정의하는 것입니다.

즉, 동일한 메소드명이지만 기능이 다른 것입니다.

단, 활용하기 위해서는 조건이 있습니다.

1) 메소드 시그니처와 리턴 타입이 동일해야합니다.

2) 접근 지정자의 범위가 일치하거나 넓어야 합니다.

 

그럼 메소드 오버라이딩을 왜 사용하는지 알아보도록 하겠습니다.

자바는 다형적 표현이 특징인 언어라고 말씀을 드렸었습니다.

메소드 오버라이딩도 동일한 메소드명으로 성격은 같지만 클래스별로 다른 결과를 보고 싶을 때 사용됩니다.

 

아래에 실제 사용하면서 이해를 해보도록 하겠습니다.

보시면 부모 클래스인 Person에 eat라는 메소드가 있고 나머지 자식 클래스에서도 동일하게 eat이라는 메소드를 만들어주었습니다.

보시면 시그니처, 접근 지정자가 동일하고 리턴이 없는 것 또한 동일합니다.

이렇게 동일하게 먹는 것을 동일하지만 자식 클래스별로 먹는 것에 대한 결과값은 다릅니다.

 

이제 각 클래스 별로 생성된 객체의 메소드 결과값을 확인해보도록 하겠습니다.

저희가 원하는 결과값을 확인할 수 있었습니다.

 

반응형

댓글