본문으로 바로가기

메소드(Method) 정의

 

자바 객체지향에서 알아두어야 의미로서, 메소드란 특정 기능을 정의한 코드들의 집합이라고 생각하면 된다.

 

기본적으로 메소드를 이해하기 쉽게 설명하기 위해 입력값(parameter) 출력값(return)으로 설명한다.

 

기본 골격은 그림과 같다.

 

  1. 리턴타입을 정의해 주어야 하며, 반환 값이 없는경우는 void(공허한) 지정해 주면 된다.

  2. 메소드 이름을 정의한다.  보통 해당 메소드가 하는 기능을 표현하는 함축적인 단어를 선택하여 네이밍을 해준다.

  3. 메소드는 파라미터라고 하는 입력값을 받을 있는데, 0개부터 여러개까지 지정 가능하다.

  4. 반환타입이 void 아닌 경우 반드시 해당 반환타입과 어울리는 변수 or 상수값을 반환해야 한다.

 

메소드를 정의하고 사용하는 목적이 무엇일까??

  1. 불필요한 중복되어 사용하는 코드를 메소드로 정의하고 호출함으로써 가독성을 높일 있다.(가장 이유)

  2. 코드에 문제 생길 문제가 되는 메소드만 수정하면 됨으로써 유지보수에 도움이 된다.

 

 

1. 메소드 형태들

 

다음 코드를 통하여 일반적인 메소드를 확인하여 보자.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class Calculator {
 
    public static class arithmetic{
        public int multi(int a, int b) {
            int multiple = a * b;
            return multiple;
        }
    }
 
    public static void main(String[] args) {
        arithmetic arm = new arithmetic();
    
        int result = 0;
        
        result = arm.multi(3,4); // 3과 4를 곱한 12의 값이 정수형 타입 변수 result에 대입된다.
        System.out.println(result);
 
        result = arm.multi(5,4); // 5과 4를 곱한 20의 값이 정수형 타입 변수 result에 대입된다.
        System.out.println(result);
    }
}
 
 

 

결과

	12
	20

 

arithmetic(산술) 클래스 내에 multi메소드가 선언되어 있다.

1
2
3
4
public int multi(int a, int b) {
    int multiple = a * b;
    return multiple;
}
 
 

 

multi메소드의 입력 값과 출력 값은 다음과 같다.

  • 입력 : int a, int b
  • 출력(반환) : int

해당 메소드는 두개의 값을 입력 받아 곱한 값을 반환해주는 메소드이다.

해당 메소드를 사용할때는 코드처럼 반환받을변수 = 객체.메소드명(입력값 a,입력값 b) 이다.

 

메소드는 입력 값이 없을수도 출력 값이 없을 수도 있다.

 

1
2
3
public String getName() {
    return this.name;
}
 

메소드는 클래스 내부에 있는 name이란 변수를 리턴해주는 입력(파라미터, parameter) 값이 없는 메소드이다.

 

1
2
3
public void setName(String name) {
     this.name = name;
}
 
 

메소드는 클래스 내부에 있는 name변수에 값을 대입하기 위한 메소드로서 반환(출력,  return) 값이 없는 메소드이다.

반환값이 없는 메소드는 void문을 사용한다.

 

1
2
3
public void print(){
    System.out.println("check name value : " + this.name);
}
 
 

메소드는 클래스 내부에 있는 name변수의 값을 출력하기 위한 메소드로 반환 값과 입력 값이 모두 없는 메소드이다.

 

 

 

2. 메소드 내부에 선언된 변수???

 

메소드 안에서 선언된 변수는, 메소드의 작업이 끝나면 소멸되게 된다. 또한 메소드 다른 영역에서는 접근이 불가능 하다이렇게 메소드 안에서만 선언되어 사용되는 변수를 지역변수라고 한다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class methodVariableTest {
 
    public static class test{
        public String test = "test";
        
        public void print() {
            String test = "methodTest";
            System.out.println(test);
        }
        
        public void print2() {
            System.out.println(test);
        }
    }
    public static void main(String[] args) {
        test test = new test();
        
        test.print();
        test.print2();
    }
}
 
 

 

코드에서 print(), print2() 메소드를 보면 동일한 test 변수를 System.out.println()으로 출력하고 있다.

다만 print()메소드에서의 test 메소드내에서 새롭게 선언한 String타입의 변수로서 클래스 내부에 선언한 test변수와는 별개다.

print2()메소드는 클래스 내부의 변수인 test 출력하고 있다.

 

이처럼 메소드 안에서 선언하는 변수는 클래스 변수와 변수명이 똑같더라도 에러가 나지 않는다. 그렇다면 이렇게 이름은 똑같지만 메소드 내에서 클래스 변수에 접근하려면 어떻게 해야할까?? 바로 this 사용하여 접근할수 있다. 사용법은 아래와 같다.

  • this.클래스변수명

 

print()메소드에서 지역변수가 아닌 클래스 변수를 출력하고 싶으면 아래와 같이 수정하면 된다.

 

1
2
3
4
public void print() {
    String test = "methodTest";
}