"메소드"의 두 판 사이의 차이
2016081033 (토론 | 기여) |
잔글 (→입력값과 리턴값에 따른 종류점프 투 자바, 〈메소드(Method)〉, 《점프 투 자바》, 2017-06-05) |
||
(사용자 4명의 중간 판 25개는 보이지 않습니다) | |||
1번째 줄: | 1번째 줄: | ||
− | '''메소드'''( | + | '''메소드'''(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 c=a+b; | ||
+ | return c; | ||
+ | } | ||
+ | |||
+ | 일반적으로 객체에서 [[속성]](attribute)은 데이터 값을 표시하기 위해 사용하고, 메소드는 특정한 동작을 수행하기 위해 사용한다. 메소드와 관련된 중요한 개념으로 [[오버로딩]](overloading)과 [[오버라이딩]](overriding)이 있다. | ||
+ | |||
+ | ==메소드 정의<ref> TCPSHOOL , 〈[http://tcpschool.com/java/java_methodConstructor_method 메소드의 개념]〉, 《TCPSCHOOL》</ref>== | ||
+ | [[접근 제어자]]는 해당 메소드에 접근할 수 있는 범위를 명시한다. 반환타입은 메소드가 모든 작업을 마치고 반환하는 데이터의 타입을 명시한다. 메소드 이름은 메소드를 호출하기 위한 이름을 명시한다. [[매개변수]] 목록(parameters)은 메소드 호출 시 전달되는 인수의 값을 저장할 변수들을 명시한다. 구현부는 메소드의 고유 기능을 수행하는 명령문의 집합이다. | ||
+ | 메소드의 선언부에 명시되는 [[매개변수]]의 리스트를 가리리는 것을 메소드 시그니처(method signature)라고 한다. 두 메소드가 매개변수의 개수와 타입, 순서까지 같다면 두 메소드의 시그니처는 같다고 할 수 있다. | ||
+ | 메소드 정의 방법 : 접근제어자 반환타입 메소드이름(매개변수) { } | ||
+ | |||
+ | ==메소드 호출== | ||
+ | 메소드 호출이란 만들어진 메소드를 실행하는 것으로 변수를 다른 함수의 인자로 넘겨줄 수 있으며 호출 방식에 따라 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 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 name="클래스 메소드와 인스턴스 메소드">shaking shaking, 〈[https://88240.tistory.com/440 클래스메서드와 인스턴스메서드]〉, 《개인블로그》, 2016</ref> | ||
+ | |||
+ | ====인스턴스 메소드==== | ||
+ | 인스턴스 메소드는 메소드의 작업 수행 시 인스턴스 변수가 필요한 메소드이다. 인스턴스 변수는 객체를 생성해야 만들어지기 때문에 인스턴스 메소드가 인스턴스를 생성해야만 호출할 수 있다.<ref name="클래스 메소드와 인스턴스 메소드"></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)에서 추상 메소드의 정의 | ||
+ | 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, 〈[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 | ||
+ | * TCPSHOOL , 〈[http://tcpschool.com/java/java_methodConstructor_method 메소드의 개념]〉, 《TCPSCHOOL》 | ||
+ | * TCPSHOOL, 〈[http://tcpschool.com/java/java_member_method 메소드의 구분]〉, 《TCPSCHOOL》 | ||
+ | * shaking shaking, 〈[https://88240.tistory.com/440 클래스메서드와 인스턴스메서드]〉, 《개인블로그》, 2016 | ||
+ | |||
+ | * 점프 투 자바, 〈[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 | ||
+ | |||
+ | == 같이 보기 == | ||
+ | * [[객체 지향 프로그래밍]] | ||
+ | * [[자바]] | ||
+ | * [[JSP]] | ||
+ | * [[자바스크립트]] | ||
+ | * [[객체]] | ||
+ | * [[클래스]] | ||
+ | * [[인스턴스]] | ||
+ | * [[속성]] | ||
+ | * [[오버로딩]] | ||
+ | * [[오버라이딩]] | ||
+ | |||
+ | {{프로그래밍 언어|검토 필요}} |
2020년 8월 8일 (토) 02:02 기준 최신판
메소드(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]
인스턴스 메소드[편집]
인스턴스 메소드는 메소드의 작업 수행 시 인스턴스 변수가 필요한 메소드이다. 인스턴스 변수는 객체를 생성해야 만들어지기 때문에 인스턴스 메소드가 인스턴스를 생성해야만 호출할 수 있다.[7]
입력값과 리턴값에 따른 종류[8][편집]
- 입력과 출력이 모두 있는 메소드
입력과 출력이 모두 있는 메소드의 작성 : 변수 = 객체.메소드명(매개변수);
- 입력과 출력이 모두 없는 메소드
입력과 출력이 모두 없는 메소드의 작성 : 객체.메소드명();
- 입력은 없고 출력은 있는 메소드
입력은 없고 출력은 있는 메소드의 작성 : 변수 = 객체.메소드명();
- 입력은 있고 출력은 없는 메소드
입력은 있고 출력은 없는 메소드의 작성 : 객체.메소드명(매개변수);
기능에 따른 종류[편집]
추상 메소드[편집]
추상메소드는 구현 없이 선언만 되어있는 메소드로 서브클래스는 반드시 메소드의 구현을 포함해야 한다. 추상 메소드는 언어에서 인터페이스를 명시하기 위해 사용된다. 예를 들어 다음 추상메소드를 사용하여 서브클래스에서 메소드를 직접 구현할 수 있다.[9]
// 추상 클래스(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》
- ↑ 7.0 7.1 shaking shaking, 〈클래스메서드와 인스턴스메서드〉, 《개인블로그》, 2016
- ↑ 점프 투 자바, 〈메소드(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》
- shaking shaking, 〈클래스메서드와 인스턴스메서드〉, 《개인블로그》, 2016
- 점프 투 자바, 〈메소드(Method)〉, 《점프 투 자바》, 2017-06-05
- 위키백과, 〈메소드(컴퓨터 프로그래밍)〉, 《위키백과》, 2020-04-24
같이 보기[편집]