Method : 동작
메서드를 정의하고 메서드를 사용(호출)하는 방법
Method(메서드)란?
메서드는 동작을 수행할 때 꼭 필요한 기능을 할 수 있도록 해준다. 메서드가 없이는 기능의 동작이 안된다.
개발자가 프로그래밍을 해 놓은 상태로 동작을 할 때, 그 동작을 할 수 있도록 해주는 방법이라고 이해하는게 쉽다.
반복적인 동일 작업을 메서드를 만들어 사용하면 편리하게 사용이 가능하다.
객체 지향 언어에서의 행위나 동작을 의미한다고 말하며, 메서드를 통해서 데이터를 서로 주고받으며 상호작용을 한다.
→ 코딩의 목적 메서드도 클래스처럼 API에서 제공해주는 메서드 , 사용자 정의 메서드 두 종류로 분류가 가능하다.
다른 언어들에서는 함수(function)이라고 부르기도 한다.
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은 언제 붙여서 작성해야 할까?
- 클래스를 설계할 때 멤버변수 중 모든 인스턴스에 공통으로 사용하는 것에 static을 붙인다.
- 클래스 변수(static)는 인스턴스를 생성하지 않아도 사용할 수 있다.
- 클래스 메서드(static메서드)는 인스턴스 변수를 사용할 수 없다.
- 메서드 내에서 인스턴스 변수를 사용하지 않는다면, 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)
'[ BACKEND] > JAVA_객체지향' 카테고리의 다른 글
[JAVA] 클래스(모델)의 종류 (1) | 2023.06.12 |
---|---|
[JAVA] 클래스로 객체 모델링 (0) | 2023.06.11 |
[JAVA] 메서드 오버로딩 / 정적 바인딩 (1) | 2023.06.10 |
[JAVA] 객체와 클래스란? (0) | 2023.06.03 |
[JAVA] 객체 지향(중심) 프로그래밍 (0) | 2023.06.01 |