메소드
메소드(method)란 객체 지향 프로그래밍(OOP)에서 클래스(class) 내부에 정의된 함수(函數, function)를 말한다. 멤버 함수라고도 한다. 메서드라고도 쓴다. 클래스 기반 언어에서 클래스 내부에 정의되어 있다. 메소드는 프로그램이 실행되고 있을 때 클래스에서 생성된 인스턴스와 관련된 동작을 정의한다. 메소드는 런타임 중에 클래스 인스턴스 (또는 클래스 객체)에 저장되어 있는 데이터에 접근할 수 있는 특수 속성을 가지고 있다.[1] 바인딩은 클래스와 메소드 간의 연관관계를 말합니다. 클래스와 관련된 메소드는 클래스에 바인딩 할 수 있다. 메소드는 컴파일 타임 (정적 바인딩) 또는 런타임 (동적 바인딩)에 클래스에 바인딩할 수 있다.[2]
목차
개요
메소드는 클래스 내부에서 특정한 작업을 처리하는 역할을 한다. 입력값이 있을 때 그 값을 받아서 처리한 후 결과 값이 있으면 되돌려준다. 클래스 내부에 정의되어 있는 메소드는 객체 내에 저장된 데이터에 접근하고, 객체 간의 통신을 가능하게 한다. 예를 들어, 다음 메소드를 사용하여 a와 b의 합계를 구할 수 있다.
int add(int a, int b) { int c=a+b; return c; }
일반적으로 객체에서 속성(attribute)은 데이터 값을 표시하기 위해 사용하고, 메소드는 특정한 동작을 수행하기 위해 사용한다. 메소드와 관련된 중요한 개념으로 오버로딩(overloading)과 오버라이딩(overriding)이 있다.
구조
메소드 정의[3]
접근 제어자는 해당 메소드에 접근할 수 있는 범위를 명시한다. 반환타입은 메소드가 모든 작업을 마치고 반환하는 데이터의 타입을 명시한다. 메소드 이름은 메소드를 호출하기 위한 이름을 명시한다. 매개변수 목록(parameters)은 메소드 호출 시 전달되는 인수의 값을 저장할 변수들을 명시한다. 구현부는 메소드의 고유 기능을 수행하는 명령문의 집합이다. 메소드의 선언부에 명시되는 매개변수의 리스트를 가리리는 것을 메소드 시그니처(method signature)라고 한다. 두 메소드가 매개변수의 개수와 타입, 순서까지 같다면 두 메소드의 시그니처는 같다고 할 수 있다.
메소드 정의 방법 : 접근제어자 반환타입 메소드이름(매개변수) { }
메소드 호출
메소드 호출이란 만들어진 메소드를 실행하는 것으로 변수를 다른 함수의 인자로 넘겨줄 수 있으며 호출 방식에 따라 Call by value와 Call by reference가 있다.[4]
- Call by value : 값에 의한 호출
- Call by reference : 참조에 의한 호출
정의한 메소드는 멤버 참조 연산자(.)를 사용하여 호출할 수 있다. 자바에서 메소드를 호출하는 방법은 객체를 생성하여 멤버참조연산자를 사용해 생성한 인스턴스의 메소드를 호출한다.[5]
객체참조변수이름.메소드이름(); 객체참조변수이름.메소드이름(인수1, 인수2)
메소드 구분[6]
클래스 내에서 메소드는 static 키워드 여부에 따라 static 키워드를 가지는 메소드인 클래스 메소드(static method)와 static 키워드를 가지지 않는 메소드인 인스턴스 메소드(instance method)로 구분된다.
Void on() { } //인스턴스 메소드 Static void off() { } //클래스 메소드
클래스 메소드는 인스턴스를 생성하지 않고 바로 사용할 수 있으며 메소드 내부에서 인스턴스 변수를 사용할 수 없다.
메소드의 종류
입력값과 리턴값에 따른 종류[7]
- 입력과 출력이 모두 있는 메소드 : 변수 = 객체.메소드명(매개변수);
- 입력과 출력이 모두 없는 메소드 : 객체.메소드명();
- 입력은 없고 출력은 있는 메소드 : 변수 = 객체.메소드명();
- 입력은 있고 출력은 없는 메소드 : 객체.메소드명(매개변수);
기능에 따른 종류
- 추상 메소드는 구현 없이 선언만 되어있는 메소드로 서브클래스는 반드시 메소드의 구현을 포함해야 한다. 추상 메소드는 언어에서 인터페이스를 명시하기 위해 사용된다. 예를 들어 다음 추상메소드를 사용하여 서브클래스에서 메소드를 직접 구현할 수 있다.[8]
// 추상 클래스(abstaract class)에서 추상 메소드의 정의 abstract class Rectangle{ abstract int rectangle(int, h int w); }
// 추상 클래스(abstaract class)를 상속받은 Main 클래스에서 추상 메소드 구현 public class Main extends Rectangle{ @Override int rectangle(int h, int w){ return h*w; } }
- 상태변이 메소드는 자신을 호출한 객체의 상태를 변화시킬 수 있는 메소드이다.
- 접근 메소드는 단순히 객체의 상태에 접근할 수 있는 메소드이다.
- 정적 메소드는 클래스의 인스턴스 없이 데이터에 접근할 수 있는 권한을 가진다.
각주
- ↑ Mark Slagell, 〈Methods〉, 《Ruby User`s Guide》, 2008
- ↑ PranshuSharma, 〈OOPS Interview Questions〉, 《TOLMOL》, 2008-05-07
- ↑ TCPSHOOL , 〈메소드의 개념〉, 《TCPSCHOOL》
- ↑ 여름숲_, 〈Call by value와 Call by reference〉, 《개인블로그》, 2017-05-31
- ↑ TCPSHOOL , 〈메소드의 개념〉, 《TCPSCHOOL》
- ↑ TCPSHOOL, 〈메소드의 구분〉, 《TCPSCHOOL》
- ↑ 점프 투 자바, 〈메소드(Method)〉, 《점프 투 자바》, 2017-06-05
- ↑ 위키백과, 〈메소드(컴퓨터 프로그래밍)〉, 《위키백과》, 2020-04-24
참고자료
- Mark Slagell, 〈Methods〉, 《Ruby User`s Guide》, 2008
- PranshuSharma, 〈OOPS Interview Questions〉, 《TOLMOL》, 2008-05-07
- TCPSHOOL,〈메소드의 개념〉, 《TCPSCHOOL》
- 여름숲_, 〈Call by value와 Call by reference〉, 《개인 블로그》, 2017-05-31
- TCPSHOOL , 〈메소드의 개념〉, 《TCPSCHOOL》
- TCPSHOOL, 〈메소드의 구분〉, 《TCPSCHOOL》
- 점프 투 자바, 〈메소드(Method)〉, 《점프 투 자바》, 2017-06-05
- 위키백과, 〈메소드(컴퓨터 프로그래밍)〉, 《위키백과》, 2020-04-24
같이 보기