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

"메소드"의 두 판 사이의 차이

위키원
이동: 둘러보기, 검색
잔글 (입력값과 리턴값에 따른 종류점프 투 자바, 〈메소드(Method)〉, 《점프 투 자바》, 2017-06-05)
 
(사용자 2명의 중간 판 6개는 보이지 않습니다)
13번째 줄: 13번째 줄:
 
일반적으로 객체에서 [[속성]](attribute)은 데이터 값을 표시하기 위해 사용하고, 메소드는 특정한 동작을 수행하기 위해 사용한다. 메소드와 관련된 중요한 개념으로 [[오버로딩]](overloading)과 [[오버라이딩]](overriding)이 있다.
 
일반적으로 객체에서 [[속성]](attribute)은 데이터 값을 표시하기 위해 사용하고, 메소드는 특정한 동작을 수행하기 위해 사용한다. 메소드와 관련된 중요한 개념으로 [[오버로딩]](overloading)과 [[오버라이딩]](overriding)이 있다.
  
 
==구조==
 
 
==메소드 정의<ref> TCPSHOOL , 〈[http://tcpschool.com/java/java_methodConstructor_method 메소드의 개념]〉, 《TCPSCHOOL》</ref>==
 
==메소드 정의<ref> TCPSHOOL , 〈[http://tcpschool.com/java/java_methodConstructor_method 메소드의 개념]〉, 《TCPSCHOOL》</ref>==
 
[[접근 제어자]]는 해당 메소드에 접근할 수 있는 범위를 명시한다. 반환타입은 메소드가 모든 작업을 마치고 반환하는 데이터의 타입을 명시한다. 메소드 이름은 메소드를 호출하기 위한 이름을 명시한다. [[매개변수]] 목록(parameters)은 메소드 호출 시 전달되는 인수의 값을 저장할 변수들을 명시한다. 구현부는 메소드의 고유 기능을 수행하는 명령문의 집합이다.
 
[[접근 제어자]]는 해당 메소드에 접근할 수 있는 범위를 명시한다. 반환타입은 메소드가 모든 작업을 마치고 반환하는 데이터의 타입을 명시한다. 메소드 이름은 메소드를 호출하기 위한 이름을 명시한다. [[매개변수]] 목록(parameters)은 메소드 호출 시 전달되는 인수의 값을 저장할 변수들을 명시한다. 구현부는 메소드의 고유 기능을 수행하는 명령문의 집합이다.
 
메소드의 선언부에 명시되는 [[매개변수]]의 리스트를 가리리는 것을 메소드 시그니처(method signature)라고 한다. 두 메소드가 매개변수의 개수와 타입, 순서까지 같다면 두 메소드의 시그니처는 같다고 할 수 있다.
 
메소드의 선언부에 명시되는 [[매개변수]]의 리스트를 가리리는 것을 메소드 시그니처(method signature)라고 한다. 두 메소드가 매개변수의 개수와 타입, 순서까지 같다면 두 메소드의 시그니처는 같다고 할 수 있다.
메소드 정의 방법 : 접근제어자 반환타입 메소드이름(매개변수) {  }
+
메소드 정의 방법 : 접근제어자 반환타입 메소드이름(매개변수) {  }
 
 
  
 
==메소드 호출==
 
==메소드 호출==
32번째 줄: 29번째 줄:
 
  객체참조변수이름.메소드이름(인수1, 인수2)
 
  객체참조변수이름.메소드이름(인수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>TCPSHOOL, 〈[http://tcpschool.com/java/java_member_method 메소드의 구분]〉, 《TCPSCHOOL》</ref>==
+
====클래스 메소드====
클래스 내에서 메소드는 static 키워드 여부에 따라 static 키워드를 가지는 메소드인 클래스 메소드(static method)와 static 키워드를 가지지 않는 메소드인 인스턴스 메소드(instance method)로 구분된다.  
+
클래스 메소드는 객체를 생성하지 않고 호출이 가능하다. 클래스 메소드는 [[인스턴스]]를 생성하지 않고 바로 사용할 수 있으며 메소드 내부에서 인스턴스 변수를 사용할 수 없다.<ref name="클래스 메소드와 인스턴스 메소드">shaking shaking, 〈[https://88240.tistory.com/440 클래스메서드와 인스턴스메서드]〉, 《개인블로그》, 2016</ref>
Void on() {  } //인스턴스 메소드
 
Static void off() {  } //클래스 메소드
 
클래스 메소드는 [[인스턴스]]를 생성하지 않고 바로 사용할 수 있으며 메소드 내부에서 인스턴스 변수를 사용할 수 없다.
 
  
 +
====인스턴스 메소드====
 +
인스턴스 메소드는 메소드의 작업 수행 시 인스턴스 변수가 필요한 메소드이다. 인스턴스 변수는 객체를 생성해야 만들어지기 때문에 인스턴스 메소드가 인스턴스를 생성해야만 호출할 수 있다.<ref name="클래스 메소드와 인스턴스 메소드"></ref>
  
==메소드의 종류==
 
 
===입력값과 리턴값에 따른 종류<ref>점프 투 자바, 〈[https://wikidocs.net/225 메소드(Method)]〉, 《점프 투 자바》, 2017-06-05</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>
+
====추상 메소드====
 +
추상메소드는 구현 없이 선언만 되어있는 메소드로 서브클래스는 반드시 메소드의 구현을 포함해야 한다. 추상 메소드는 언어에서 인터페이스를 명시하기 위해 사용된다. 예를 들어 다음 추상메소드를 사용하여 서브클래스에서 메소드를 직접 구현할 수 있다.<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)에서 추상 메소드의 정의
63번째 줄: 71번째 줄:
 
  }
 
  }
  
* 상태변이 메소드는 자신을 호출한 객체의 상태를 변화시킬 수 있는 메소드이다.
+
====상태변이 메소드====
* 접근 메소드는 단순히 객체의 상태에 접근할 수 있는 메소드이다.
+
상태 메소드는 자신을 호출한 객체의 상태를 변화시킬 수 있는 메소드이다.
* 정적 메소드는 클래스의 [[인스턴스]] 없이 데이터에 접근할 수 있는 권한을 가진다.
+
 
 +
====접근 메소드====
 +
접근 메소드는 단순히 객체의 상태에 접근할 수 있는 메소드이다.
 +
 
 +
====정적 메소드====
 +
접근 메소드는 클래스의 [[인스턴스]] 없이 데이터에 접근할 수 있는 권한을 가진다.
  
 
{{각주}}
 
{{각주}}
76번째 줄: 89번째 줄:
 
* TCPSHOOL , 〈[http://tcpschool.com/java/java_methodConstructor_method 메소드의 개념]〉, 《TCPSCHOOL》
 
* TCPSHOOL , 〈[http://tcpschool.com/java/java_methodConstructor_method 메소드의 개념]〉, 《TCPSCHOOL》
 
* TCPSHOOL, 〈[http://tcpschool.com/java/java_member_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://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월 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;
	}
}

상태변이 메소드[편집]

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

접근 메소드[편집]

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

정적 메소드[편집]

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

각주[편집]

  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. 7.0 7.1 shaking shaking, 〈클래스메서드와 인스턴스메서드〉, 《개인블로그》, 2016
  8. 점프 투 자바, 〈메소드(Method)〉, 《점프 투 자바》, 2017-06-05
  9. 위키백과, 〈메소드(컴퓨터 프로그래밍)〉, 《위키백과》, 2020-04-24

참고자료[편집]

같이 보기[편집]


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