"메소드"의 두 판 사이의 차이
1번째 줄: | 1번째 줄: | ||
'''메소드'''(method)란 [[객체 지향 프로그래밍]](OOP)에서 [[클래스]](class) 내부에 정의된 [[함수]](函數, function)를 말한다. '''멤버 함수'''라고도 한다. '''메서드'''라고도 쓴다. | '''메소드'''(method)란 [[객체 지향 프로그래밍]](OOP)에서 [[클래스]](class) 내부에 정의된 [[함수]](函數, function)를 말한다. '''멤버 함수'''라고도 한다. '''메서드'''라고도 쓴다. | ||
+ | 클래스 기반 언어에서 클래스 내부에 정의되어 있다. 메소드는 프로그램이 실행되고 있을 때 클래스에서 생성된 인스턴스와 관련된 동작을 정의한다. 메소드는 런타임 중에 클래스 인스턴스 (또는 클래스 객체)에 저장되어 있는 데이터에 접근할 수 있는 특수 속성을 가지고 있다.<ref> Mark Slagell, 〈[https://web.archive.org/web/20110827124154/http://www.rubyist.net/~slagell/ruby/methods.html Methods]〉, 《Ruby User`s Guide》, 2008</ref> | ||
+ | 바인딩은 클래스와 메소드 간의 연관관계를 말합니다. 클래스와 관련된 메소드는 클래스에 바인딩 할 수 있다. 메소드는 컴파일 타임 (정적 바인딩) 또는 런타임 (동적 바인딩)에 클래스에 바인딩할 수 있다.<ref>PranshuSharma, 〈[https://web.archive.org/web/20111002044728/http://www.tolmol.com/gp/java-interview-questionstips/oops-interview-questions.htm OOPS Interview Questions]〉, 《TOLMOL》, 2008-05-07</ref> | ||
==개요== | ==개요== | ||
− | 메소드는 클래스 내부에서 특정한 작업을 처리하는 역할을 한다. 입력값이 있을 | + | 메소드는 클래스 내부에서 특정한 작업을 처리하는 역할을 한다. 입력값이 있을 때 그 값을 받아서 처리한 후 결과 값이 있으면 되돌려준다. 클래스 내부에 정의되어 있는 메소드는 객체 내에 저장된 데이터에 접근하고, 객체 간의 통신을 가능하게 한다. 예를 들어, 다음 메소드를 사용하여 a와 b의 합계를 구할 수 있다. |
int add(int a, int b) { | int add(int a, int b) { | ||
10번째 줄: | 12번째 줄: | ||
일반적으로 객체에서 [[속성]](attribute)은 데이터 값을 표시하기 위해 사용하고, 메소드는 특정한 동작을 수행하기 위해 사용한다. 메소드와 관련된 중요한 개념으로 [[오버로딩]](overloading)과 [[오버라이딩]](overriding)이 있다. | 일반적으로 객체에서 [[속성]](attribute)은 데이터 값을 표시하기 위해 사용하고, 메소드는 특정한 동작을 수행하기 위해 사용한다. 메소드와 관련된 중요한 개념으로 [[오버로딩]](overloading)과 [[오버라이딩]](overriding)이 있다. | ||
+ | |||
+ | |||
+ | ==구조== | ||
+ | ==메소드 정의<ref> TCPSHOOL , 〈[http://tcpschool.com/java/java_methodConstructor_method 메소드의 개념]〉, 《TCPSCHOOL》</ref>== | ||
+ | 접근 제어자는 해당 메소드에 접근할 수 있는 범위를 명시한다. 반환타입은 메소드가 모든 작업을 마치고 반환하는 데이터의 타입을 명시한다. 메소드 이름은 메소드를 호출하기 위한 이름을 명시한다. 매개변수 목록(parameters)은 메소드 호출 시 전달되는 인수의 값을 저장할 변수들을 명시한다. 구현부는 메소드의 고유 기능을 수행하는 명령문의 집합이다. | ||
+ | 메소드의 선언부에 명시되는 매매변수의 리스트를 가리리는 것을 메소드 시그니처(method signature)라고 한다. 두 메소드가 매개변수의 개수와 타입, 순서까지 같다면 두 메소드의 시그니처는 같다고 할 수 있다. | ||
+ | 메소드 정의 방법 : 접근제어자 반환타입 메소드이름(매개변수) { } | ||
+ | |||
==메소드 호출== | ==메소드 호출== | ||
− | 메소드 호출이란 만들어진 메소드를 실행하는 것으로 변수를 다른 함수의 인자로 넘겨줄 있으며 호출 방식에 따라 Call by value와 Call by reference가 있다.<ref> 여름숲_, | + | 메소드 호출이란 만들어진 메소드를 실행하는 것으로 변수를 다른 함수의 인자로 넘겨줄 수 있으며 호출 방식에 따라 Call by value와 Call by reference가 있다.<ref> 여름숲_, 〈[https://re-build.tistory.com/3 Call by value와 Call by reference]〉, 《개인블로그》, 2017-05-31 </ref> |
* Call by value : 값에 의한 호출 | * Call by value : 값에 의한 호출 | ||
* Call by reference : 참조에 의한 호출 | * Call by reference : 참조에 의한 호출 | ||
+ | |||
+ | 정의한 메소드는 멤버 참조 연산자(.)를 사용하여 호출할 수 있다. | ||
+ | 자바에서 메소드를 호출하는 방법은 객체를 생성하여 멤버참조연산자를 사용해 생성한 인스턴스의 메소드를 호출한다.<ref> TCPSHOOL , 〈[http://tcpschool.com/java/java_methodConstructor_method 메소드의 개념]〉, 《TCPSCHOOL》</ref> | ||
+ | 객체참조변수이름.메소드이름(); | ||
+ | 객체참조변수이름.메소드이름(인수1, 인수2) | ||
+ | |||
+ | |||
+ | ==메소드 구분<ref>TCPSHOOL, 〈[http://tcpschool.com/java/java_member_method 메소드의 구분]〉, 《TCPSCHOOL》</ref>== | ||
+ | 클래스 내에서 메소드는 static 키워드 여부에 따라 static 키워드를 가지는 메소드인 클래스 메소드(static method)와 static 키워드를 가지지 않는 메소드인 인스턴스 메소드(instance method)로 구분된다. | ||
+ | Void on() { } //인스턴스 메소드 | ||
+ | Static void off() { } //클래스 메소드 | ||
+ | 클래스 메소드는 인스턴스를 생성하지 않고 바로 사용할 수 있으며 메소드 내부에서 인스턴스 변수를 사용할 수 없다. | ||
+ | |||
==메소드의 종류== | ==메소드의 종류== | ||
− | *추상 메소드는 구현 없이 선언만 되어있는 메소드로 서브클래스는 반드시 메소드의 구현을 포함해야 한다. 추상 메소드는 언어에서 인터페이스를 명시하기 위해 사용된다. 예를 들어 다음 추상메소드를 사용하여 서브클래스에서 메소드를 직접 구현할 수 있다.<ref>위키백과, | + | ===입력값과 리턴값에 따른 종류<ref>점프 투 자바, 〈[https://wikidocs.net/225 메소드(Method)]〉, 《점프 투 자바》, 2017-06-05</ref>=== |
+ | *입력과 출력이 모두 있는 메소드 : 변수 = 객체.메소드명(매개변수); | ||
+ | *입력과 출력이 모두 없는 메소드 : 객체.메소드명(); | ||
+ | *입력은 없고 출력은 있는 메소드 : 변수 = 객체.메소드명(); | ||
+ | *입력은 있고 출력은 없는 메소드 : 객체.메소드명(매개변수); | ||
+ | |||
+ | ===기능에 따른 종류=== | ||
+ | *추상 메소드는 구현 없이 선언만 되어있는 메소드로 서브클래스는 반드시 메소드의 구현을 포함해야 한다. 추상 메소드는 언어에서 인터페이스를 명시하기 위해 사용된다. 예를 들어 다음 추상메소드를 사용하여 서브클래스에서 메소드를 직접 구현할 수 있다.<ref>위키백과, 〈[https://ko.wikipedia.org/wiki/%EB%A9%94%EC%86%8C%EB%93%9C_(%EC%BB%B4%ED%93%A8%ED%84%B0_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D) 메소드(컴퓨터 프로그래밍)]〉, 《위키백과》, 2020-04-24 </ref> | ||
// [[추상 클래스]](abstaract class)에서 추상 메소드의 정의 | // [[추상 클래스]](abstaract class)에서 추상 메소드의 정의 | ||
40번째 줄: | 70번째 줄: | ||
==참고자료== | ==참고자료== | ||
+ | * Mark Slagell, 〈[https://web.archive.org/web/20110827124154/http://www.rubyist.net/~slagell/ruby/methods.html Methods]〉, 《Ruby User`s Guide》, 2008 | ||
+ | * PranshuSharma, 〈[https://web.archive.org/web/20111002044728/http://www.tolmol.com/gp/java-interview-questionstips/oops-interview-questions.htm OOPS Interview Questions]〉, 《TOLMOL》, 2008-05-07 | ||
+ | * TCPSHOOL,〈[http://tcpschool.com/java/java_methodConstructor_method 메소드의 개념〉], 《TCPSCHOOL》 | ||
* 여름숲_, 〈[https://re-build.tistory.com/3 Call by value와 Call by reference]〉, 《개인 블로그》, 2017-05-31 | * 여름숲_, 〈[https://re-build.tistory.com/3 Call by value와 Call by reference]〉, 《개인 블로그》, 2017-05-31 | ||
+ | * TCPSHOOL , 〈[http://tcpschool.com/java/java_methodConstructor_method 메소드의 개념]〉, 《TCPSCHOOL》 | ||
+ | * TCPSHOOL, 〈[http://tcpschool.com/java/java_member_method 메소드의 구분]〉, 《TCPSCHOOL》 | ||
+ | * 점프 투 자바, 〈[https://wikidocs.net/225 메소드(Method)]〉, 《점프 투 자바》, 2017-06-05 | ||
* 위키백과, 〈[https://ko.wikipedia.org/wiki/%EB%A9%94%EC%86%8C%EB%93%9C_(%EC%BB%B4%ED%93%A8%ED%84%B0_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D) 메소드(컴퓨터 프로그래밍)]〉, 《위키백과》, 2020-04-24 | * 위키백과, 〈[https://ko.wikipedia.org/wiki/%EB%A9%94%EC%86%8C%EB%93%9C_(%EC%BB%B4%ED%93%A8%ED%84%B0_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D) 메소드(컴퓨터 프로그래밍)]〉, 《위키백과》, 2020-04-24 | ||
2020년 8월 6일 (목) 14:08 판
메소드(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
같이 보기