검수요청.png검수요청.png

메소드

위키원
mkp0312 (토론 | 기여)님의 2020년 8월 7일 (금) 09:30 판
이동: 둘러보기, 검색

메소드(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;
	}
}

상태변이 메소드

상태 메소드는 자신을 호출한 객체의 상태를 변화시킬 수 있는 메소드이다.

접근 메소드

접근 메소드는 단순히 객체의 상태에 접근할 수 있는 메소드이다.

정적 메소드

접근 메소드는 클래스의 인스턴스 없이 데이터에 접근할 수 있는 권한을 가진다.

각주

  1. Mark Slagell, 〈Methods〉, 《Ruby User`s Guide》, 2008
  2. PranshuSharma, 〈OOPS Interview Questions〉, 《TOLMOL》, 2008-05-07
  3. TCPSHOOL , 〈메소드의 개념〉, 《TCPSCHOOL》
  4. 여름숲_, 〈Call by value와 Call by reference〉, 《개인블로그》, 2017-05-31
  5. TCPSHOOL , 〈메소드의 개념〉, 《TCPSCHOOL》
  6. TCPSHOOL, 〈메소드의 구분〉, 《TCPSCHOOL》
  7. 점프 투 자바, 〈메소드(Method)〉, 《점프 투 자바》, 2017-06-05
  8. 위키백과, 〈메소드(컴퓨터 프로그래밍)〉, 《위키백과》, 2020-04-24

참고자료

같이 보기


  검수요청.png검수요청.png 이 메소드 문서는 프로그래밍에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.