> For the complete documentation index, see [llms.txt](https://docs.sysout.co.kr/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.sysout.co.kr/base-language/java/advanced/method.md).

# 메소드

## 멤버 메소드(method)

멤버 메소드는 클래스 내부에 위치하는 코드 저장 블록으로 필요에 의해 호출하여 실행할 수 있다. 다양한 용도로 활용될 수 있기 때문에 여러 가지의 활용법을 살펴보도록 한다.

### 형태

메소드는 다음의 형태를 가진다.

```java
반환형 이름(매개변수){
    실행코드
}
```

* 반환형 : 메소드가 실행된 뒤 반환될 데이터의 형태를 말한다.
* 이름 : 메소드를 실행하기 위한 호출에 사용된다.
* 매개변수 : 메소드를 실행하기 위해 필요한 데이터를 저장하는 변수를 말한다.
* 실행코드 : 메소드가 실행될 때 해야할 작업을 적으며, 위에서 아래로 실행된다.

### this

메소드에서 사용할 수 있는 키워드로 **인스턴스 자신, 주인공**을 의미한다. 메모리에서 메소드는 인스턴스에 포함되지 않기 때문에 어느 인스턴스에서 실행하였는지 구분하기 위해 this라는 내장 키워드를 제공하며, 이를 통해 실행한 인스턴스에 접근할 수 있다.

![](https://4208234536-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M_TNZwLuHV9ipYLbvRq%2F-MeOI74Hh66AOkbUShIz%2F-MeOJNIE90ORtpHkfXxN%2Fimage.png?alt=media\&token=56822c10-a15b-4b53-976c-6f8e31ab5129)

### 주의사항

메소드를 만들 경우 다음의 내용을 주의해야 한다.

* (필수) 메소드는 클래스 안에 만들어야 한다.
* (필수) 메소드 간 범위가 겹칠 수 없다.
* (필수) 메소드 내부에 메소드를 만들 수 없다.
* (권장) 메소드의 이름은 소문자로 시작해야 한다.

### 데모 1

```java
class Item {
    String name;
    int price;
    
    void setting(String name, int price){
        this.name = name;
        this.price = price;
    }
    void print(){
        System.out.println("이름 : "+this.name);
        System.out.println("가격 : "+this.price+"원");
    }
}

public class MemberMethodExample01 {
    public static void main(String[] args){
        Item a = new Item();
        a.setting("운동화", 150000);
        a.print();
    }
}
```

위 코드에는 두 개의 메소드가 사용되었다.

* setting
* print

setting 메소드의 코드는 다음과 같다.

```java
void setting(String name, int price){
    this.name = name;
    this.price = price;
}
```

setting 메소드에서는 `name`, `price`에 해당하는 값을 외부에서 받아 설정하기 위한 코드가 작성되어 있다. 여기서 같은 이름의 변수가 두 개씩 존재하게 되는데, 그림으로 보면 다음과 같다.

![](https://4208234536-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M_TNZwLuHV9ipYLbvRq%2F-MeOI74Hh66AOkbUShIz%2F-MeOJd5Dwv3_VRdb1hyN%2Fimage.png?alt=media\&token=9d8d843e-cca8-4fba-9837-a5bd5e7706d6)

print 메소드의 코드는 다음과 같다.

```java
void print(){
    System.out.println("이름 : "+this.name);
    System.out.println("가격 : "+this.price+"원");
}
```

print 메소드에도 `this.name`과 `this.price`가 있으며, 이는 마찬가지로 인스턴스가 가진 `name`과 `price`를 의미한다. 이 메소드에서는 `name`과 `price`가 한 개씩만 존재하기 때문에 `this`는 생략이 가능하다.

```java
void print(){
    System.out.println("이름 : "+name);
    System.out.println("가격 : "+price+"원");
}
```

![](https://4208234536-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M_TNZwLuHV9ipYLbvRq%2F-MeOI74Hh66AOkbUShIz%2F-MeOJkmKzBPF0IFZSfnB%2Fimage.png?alt=media\&token=67ea94da-a1d1-4775-a6cd-c929f97e1f47)

### 결론

멤버 메소드는 클래스에서 기능을 담당하며, 멤버 필드를 이용할 수 있어 다양한 처리가 가능하다.\
특화된 형태로 [설정 메소드(setter method)](http://www.sysout.co.kr/home/webbook/page/read/1388), [반환 메소드(getter method)](http://www.sysout.co.kr/home/webbook/page/read/1389) 등이 존재하며, 이는 해당 문서에서 살펴본다.
