728x90
Method : 동작
메서드를 정의하고 메서드를 사용(호출)하는 방법

 

Method(메서드)란?

메서드는 동작을 수행할 때 꼭 필요한 기능을 할 수 있도록 해준다. 메서드가 없이는 기능의 동작이 안된다.
개발자가 프로그래밍을 해 놓은 상태로 동작을 할 때, 그 동작을 할 수 있도록 해주는 방법이라고 이해하는게 쉽다.
반복적인 동일 작업을 메서드를 만들어 사용하면 편리하게 사용이 가능하다.
객체 지향 언어에서의 행위나 동작을 의미한다고 말하며, 메서드를 통해서 데이터를 서로 주고받으며 상호작용을 한다.
→ 코딩의 목적 메서드도 클래스처럼 API에서 제공해주는 메서드 , 사용자 정의 메서드 두 종류로 분류가 가능하다.
    다른 언어들에서는 함수(function)이라고 부르기도 한다.

 

https://cloudstudying.kr/lectures/81

 

Object : 사람 동작 1 → 먹다 동작 2 → 걷다 / 해당 동작들은 독립적으로 만들어진다
class : person 동작 1 → eat() 동작 2 → walk() / 객체 지향 프로그램안에서는 클래스 안에 이런 기능을 하는 동작들을 넣어서 만든다.

프로그래밍 언어에서의 메서드

 

 


메서드는 변수라고도 볼 수 있다. (어떠한 동작이 수행된 후 처리의 결과 값이 담겨진 변수)

 

 

메서드는 우선 접근제한자를 먼저 설정해주는데 보통 public으로 설정하여 사용한다.
리턴타입은 수행된 후에 반환하는 결과의 자료형이며, 아무 결과도 반환하지 않으면 자료형에 void를 입력해준다. → void는 반환할 값이 없다는 걸 의미한다.

메소드명 뒤의 ()안에는 매개변수를 작성하며 콤마로 여러개의 매개변수 작성이 가능하다.만약 매개변수가 없더라도 ()는 꼭 작성해주어야 한다.
매개변수 작성시에는 변수의 타입이 같아도 변수의 타입을 생략할 수 없고, 선언할 수 있는 매개변수의 개수는 제한은 없지만 많은 경우 배열이나 참조변수를 사용하며 된다.

 

public class Ex_6_makeMethod {
    public static void main(String[] args) {
        int a = 3;
        int b = 5;
        //add라는 메서드를 호출하여 두 수의 합의 결과를 받아보자
        int result = add(a,b);
        System.out.println("result = " + result);

    }
    //메서드는 독립적으로 만들어야 한다 / main 메서드 밖에서 작성한 후 main메서드에서 호출하여 사용하는 방식이다.
    //Q.[매개변수로 2개의 정수를 받아서] [총합을 구하여][리턴]하는 [메서드를 정의]해보자

    public static int add(int x, int y) {
        int sum = x+y;
        return sum;
    }
}

 

우선 add 라는 메서드를 만들어서 main 메서드에서 호출하여 결과 값을 출력해보는 코드를 작성해보았다.
메서드의 선언부에서 메서드의 이름(add), 매개변수 선언(int x, int y), 반환 타입(static int)을 정해주었고 두 개의 정수를 입력받아 두 값을 더한 결과를 반환하도록 했다.
메서드의 선언부는 메서드가 호출되는 모든 곳에서 동일하게 쓰이기 때문에 신중하게 작성해야한다. 수정 시 모든 곳을 변경해야 하는 번거로움이 발생할 수 있다.

반환 타입이 정해져있지 않을 때는 void로 작성해두어도 되지만 이후 return 반환값의 타입이 정해진다면 반환 타입을 정해줘야한다.
메서드는 수행한 결과를 반환값을 호출한 메서드로 전달하는데, (여기서는 main) 이 값의 타입은 반환 타입과 일치하거나, 적어도 자동 형변환이 가능한 것이어야한다.
그래서 위의 코드에서도 add메서드 내의 return값인 sum이 int형이므로 main 메서드 에서 호출된 값을 담을 result의 타입도 int형으로 작성되었다. return문은 단 하나의 값만 반환할 수 있다.

 

메서드 앞에 static이 붙어 있으면 클래스 메서드이고 , 붙어 있지 않으면 인스턴스 메서드이다.
클래스 메서드는 클래스 변수처럼 객체를 생성하지 않고도 <클래스이름.메서드이름>과 같은 식으로 호출이 가능하지만( “ . “ 을 이용해서 호출가능), 인스턴스 메서드는 반드시 객체를 생성해야만 호출할 수 있다.
객체를 생성한다는 의미는 new 연산자를 사용하여 인스턴스(객체)를 생성함을 의미한다.

 

static은 언제 붙여서 작성해야 할까?
  1. 클래스를 설계할 때 멤버변수 중 모든 인스턴스에 공통으로 사용하는 것에 static을 붙인다.
  2. 클래스 변수(static)는 인스턴스를 생성하지 않아도 사용할 수 있다.
  3. 클래스 메서드(static메서드)는 인스턴스 변수를 사용할 수 없다.
  4. 메서드 내에서 인스턴스 변수를 사용하지 않는다면, static을 붙이는 것을 고려한다.

 

매개변수 전달 기법 (Call By Value & Call By Reference)

 

외부로부터 데이터를 받을 때, 값을 그대로 받을 수도 있지만 (Call By Value - 값 전달) 값을 번지(주소)를 갖고 있는 데이터를 받을 수도 있다. (Call By Reference(번지 전달))
java는 객체 지향 프로그래밍은 객체를 대부분 다루기 때문에 Call By Reference가 자주 사용된다. 이 때, 번지의 데이터가 어떤 데이터인지 확인할 필요가 있다.

Call By Value Call By Reference
값에 의한 호출방식은 인자로 받은 값을 복사하여 처리한다. 참조에 의한 호출방식은 인자로 받은 값의 주소를 찹조하여 직접 값에 영향을 준다.
원래의 값이 수정되지 않는다. 원래의 값이 수정된다.
변수의 복사본이 전달된다. 변수 자체 전달된다.
실제 인수가 다른 메모리 위치에 생성된다. 실제 인수가 같은 메모리 위치에 생성된다.

 

  • 기본 자료형 : call by value 로 동작 (int, short, long, float, double, char, boolean)
  • 참조 자료형 : call by reference 로 동작 (Array, Class Instance)
728x90
반응형

+ Recent posts