반응형
프로그래밍을 하다보면 정말 많은 메서드를 만들어 사용한다. 객체지향언어인 JAVA에서도 객체의 수많은 기능을 위해 메서드를 자주 구현하곤 하는데, 이번 포스팅에서는 이러한 메서드가 무엇이며 어떻게 만들어 사용하는지 알아보고자한다.
메서드(method)란?
메서드는 객체의 기능을 수행하는 일련의 문장들을 하나로 묶어 놓은 것이다. 기본적으로 수학의 함수와 유사하며, 어떤 값을 입력하면 이 값으로 작업을 수행해서 결과를 반환한다. 예를 들어 소수점 올림을 하는 메서드 Math.ceil()은 인자를 필요로하며, 4.5를 인자값으로 입력하면 5.0이라는 결과로 반환한다. 이러한 메서드는 때에 따라 입력값 또는 출력값이 없을 수 도 있으며, 심지어 입력값, 출력값 모두 없을 수 도있다.
일반적으로 메서드는 io(input과 output)작업을 수행하는데 필요한 값만 넣고 원하는 결과만을 얻으면 될 뿐, 메서드가 내부적으로 어떠한 과정을 거쳐 결과를 만들어내는지 몰라도 된다. 때문에 메서드를 내부가 보이지 않는 '블랙박스' 라고도 칭한다.
메서드를 사용해야 하는 이유
메서드의 이점은 여러가지가 있지만 그 중 세가지만 언급하겠다. 내용은 다음과 같다.
- 높은 재사용성메서드는 한번 만들어 놓으면 자바의 API에서 제공하는 메서드들 처럼 몇번이고 호출하여 사용가능하며, 타 프로그램에서도 사용이 가능하다.
- 중복된 코드의 제거프로그램을 만들다보면 같은 내용의 코드들이 여러 곳에 반복하여 작성될 때가 있다. 이때 반복되는 코드들을 묶어서 하나의 메서드로 만들어 놓으면 반복되는 문장들 대신 메서드를 호출함으로서 코드 중복을 피할 수 있다.
- 프로그램의 구조화작은 규모의 프로젝트인 경우 크게 상관없지만 큰 규모의 프로젝트인 경우에는 문장들을 작업단위로 나누어 여러 메서드에 담아 프로그램의 구조를 단순화시키는 것이 필수적이다. 때문에 구조 단순화를 위해 메서드를 활용하면 나중에 프로그램에 문제가 발생하더라도 해당 부분을 쉽게 찾아 해결가능하다.
메서드의 정의와 호출
메서드는 호출과 정의로 나뉜다. 메서드 호출과 정의에 대한 예제코드는 다음과 같다.
// 메서드 호출
int sum(int a, int b);
// 메서드 정의
int sum(int a, int b) {
int result = a + b;
return result;
}
메서드는 호출 할 때 위와 같이 '반환타입 메서드이름 (타입 변수명, 타입 변수명 ...)' 처럼 작성해 주면된다.
메서드를 정의할 때는 호출형태에 중괄호를 추가하여 메서드에 담길 내용과 함께 작성해주면되는데, 여기서 잠깐 알고가야할 용어가 있다.
메서드 정의는 선언부와 구현부가 존재하는데 중괄호 바깥에 작성되는 부분을 선언부라하며, 중괄호가 열리고 닫히는 부분까지는 구현부라고 한다.
따라서 메서드의 정의는 선언부와 구현부로 이루어져있다고 말할 수 있으며, 이렇게 정의된 메서드는 호출을 통해 사용할 수 있다.
인자와 매개변수(argument와 parameter)
// 메서드 호출
int sum(int a, int b); // 호출에서의 a와 b는 인자(argument)
// 메서드 정의
int sum(int a, int b) { // 정의에서의 a와 b는 매개변수(parameter)
int result = a + b;
return result;
}
메서드에 항상 동행하는 개념이 있다. 바로 인자와 매개변수이다. 현업에 종사하시는 분들이라면 팀원들과 소통할때 인자, 매개변수, 아규먼트, 파라메타 등 인자와 매개변수를 지칭하는 용어들을 쓰고 듣고 했을 것이다. 독자분들 중에서는 이 두가지가 같은 것이라고 인지하시는 분도 있을 것이고 아닌분도 있을 것이다.
결론부터 말하면 조금 다르다. 인자와 파라메타는 input의 재료로 쓰이는것은 동일하나 메서드의 호출문과 정의문에서 다르게 불리운다. 인자(argument)는 메서드 호출문에서 쓰이는 괄호안의 변수들을 지칭하며, 매개변수(parameter)는 메서드 정의문에서 쓰이는 괄호안의 변수들을 지칭한다.
클래스 메서드와 인스턴스 메서드
메서드도 변수와 마찬가지로 static이 붙어있으면 클래스 메서드, 붙어있지않으면 인스턴스 메서드이다. 클래스 메서드도 클래스변수처럼, 객체를 생성하지 않고도 호출이 가능하며, 반면 인스턴스 메서드는 반드시 객체를 생성해야만 호출이 가능하다. 클래스 메서드 혹은 인스터스 메서드를 설계할 때 고려해야할 점은 다음과 같다.
- 클래스를 설계할 때 인스턴스에 공통으로 사용하는 메서드는 static을 붙여 클래스 메서드로 사용한다.
- 클래스 메서드는 인스턴스 변수를 사용할 수 없다.
- 메서드 내에서 인스턴스 변수를 사용하지 않는다면 클래스 메서드로 활용하는 것을 고려한다.
읽어주셔서 감사합니다. 😊
Reference
자바의 정석 - 남궁성
반응형
'JAVA' 카테고리의 다른 글
JAVA / 생성자(Constructor) (0) | 2020.04.03 |
---|---|
JAVA / 오버로딩이란 (0) | 2020.04.03 |
JAVA / 클래스와 객체 (0) | 2020.04.03 |
JAVA / 배열 (0) | 2020.03.31 |
JAVA / 캐스팅(형변환)이란? (0) | 2020.03.30 |