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

메소드

위키원
mkp0312 (토론 | 기여)님의 2020년 8월 6일 (목) 14:16 판
이동: 둘러보기, 검색

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