클래스란 무엇인가? 4 : 메서드 정의

정소이·2023년 1월 20일
0

OOP를 향해서

목록 보기
6/10

아래 메서드 정의 예제가 있다.

	public double calculateAnswer(double wingSpan, int numberOfEngines, double length, double grossTons) {
    	// do the calculation here
    }

메서드 선언에 필요한 요소는 리턴타입, 이름, ()내부의 매개변수, 본문{}이다.

메서드 선언에는 순서대로 6가지가 있다.
1. Modifiers - public, private 등과 같은 접근제한자
2. return type - 메서드는 정해진 데이터 타입의 값을 리턴하거나 void, 즉 데이터를 리턴하지 않을 수 있다.
3. method name - 필드 이름에 대한 규칙은 메서드 이름에도 적용되지만 약간 다르다.
4. 괄호 안에 있는 매개변수 - 쉼표로 구분된 매개변수 목록으로, 데이터 타입이 앞에 오고 괄호 안에 있다. 매개변수가 없다면 빈괄호()를 사용한다.
5. An exception list - 추후 논의한다.
6. 메서드 본문 - 지역 변수 선언을 포함한 메서드 코드가 여기 포함된다.

메서드 이름과 매개변수는 메서드의 signature를 구성한다.
위에 선언된 메서드 시그니처

	computeAnswer(double, int, double, int)

Naming a Method

메서드 이름은 어떤 문자도 가능하지만, 코드컨벤션은 메서드 이름을 제한한다. 이 규칙에 따라 메서드 이름은 소문자 동사이거나 소문자로 시작하는 동사,형용사,명사여야 한다. 만약 여러 단어로 구성된 메서드 이름은 두번째 단어의 첫글짜를 대문자로 표시해야한다.

	run
    runFast
    getBackground
    getFinalData
    compareTo
    setX
    isEmpty

일반적으로, 클래스 내부에서 메서드는 유니크한 이름을 가져야 한다.
그러나, 메서드는 메서드 오버로딩을 통해 다른 메서드와 이름이 같을 수 있다.

Overloading Methods

Java 언어는 오버로딩 메서드를 지원하고, Java는 메서드 시그니처가 다른 메서드들을 구분할 수 있다. 즉, 한 클래스의 메서드들은 다른 매개변수를 갖고 있을 경우, 같은 이름을 가질 수 있다.

예를 들어, 다양한 데이터타입(strings, integers 등)을 그리는 캘러그라피가 있고, 각 데이터타입을 그리는 방법을 포함한 클래스가 있다.
만약 drawString, drawInteger, drawFlaot 같이 메서드 이름을 다르게 사용하는 것은 굉장히 번거롭다!
그래서 Java에서는 매개변수만 다르면, 같은 클래스 내에서 같은 이름을 사용하는 메서드를 정의할 수 있다.

	public class DataArtist {
    	...
        public void draw(String s){
        ...
        }
        public void draw(int i) {
        ...
    	}
    	public void draw(double f) {
        ...
    	}
    	public void draw(int i, double f) {
        ...
    	}
    }

오버로드된 메서드는 메서드에 전달된 숫자와 타입으로 구분된다. 위 코드에서 draw(String)과 draw(int i)는 다른 타입이 필요하기 때문에 고유한 메서드이다.

동일한 이름, 수, 매개변수 타입을 갖는 메서드는 컴파일러가 구분할 수 없기때문에 정의할 수 없다.
그리고 컴파일러는 리턴타입을 고려하지 않으므로 리턴타입이 다르면 메서드 선언이 불가능하다.

메서드 오버로딩은 코드의 가독성을 떨어뜨리므로 남용해선 안된다!

profile
프로그래밍 학습에 왕도는 없다! 내가 컴퓨터를 닮아갈때까지!

0개의 댓글