메소드(method)는 어떤 특정 작업을 수행하기 위한 명령문의 집합이라고 할 수 있다.
이러한 메소드를 왜 사용하는가?
메소드의 구조를 보기 위해 main 메소드를 한 번 보자
public static void main(String[] args){
...
}
public : 접근 제어자. 어디서나 접근이 가능하도록 하겠다는 의미이다.
static : 전역 메소드로 선언
void : 반환 타입. 이때 void는 반환 타입이 없다는 의미이다. (return x)
main : 메소드 명.
String[] args : 매개 변수.
우리가 항상 보는 main 메소드는 위와 같이 생겼다.
이러한 main 메소드는 프로그램 실행 시, JVM(Java virtual machine)이 호출하며 실행하게 된다.
main 메소드에 다른 메소드를 호출하고 싶다면 참조연산자(.)를 이용하면 된다.
public class App {
public static void main(String[] args){
App app = new App();
app.methodA(); //여기
}
public void methodA(){
...
}
}
return은 메소드 실행에 따라 나온 값을 반환해줄 수 있고, 해당 메소드를 즉시 종료시켜주는 역할로도 사용할 수 있다.
위에서 우리는 반환 타입이 void 형일 때 반환 할 것이 없기 때문에 굳이 return을 같이 써주지 않았다.
이때 void type 메서드 안에는 return이 숨어있는데, 컴파일러가 return을 자동으로 추가해주는 것이다.
public void methodA(){
//return //<--- 여기에 숨어있다
}
그럼 반환 타입을 int로 바꿔준다면 어떨까?
public int methodB(){
return 10;
}
위와 같이 메소드의 반환 타입과 같은 자료형인 int형을 return 해 주어야 한다.
만약 int형인데 return을 해주지 않거나, 다른 타입의 자료형을 return 해주게 된다면 컴파일 에러가 뜨게 되니 주의하자.
public class App {
public static void main(String[] args){
App app = new App();
app.methodA(); //여기
}
public void methodA(){
...
}
}
우리가 메소드를 호출하기 위해선 ‘클래스명.메소드명’ 방식으로 호출을 했었다.
이번엔 methodA()에 static을 붙여 보겠다.
public class App {
public static void main(String[] args) {
System.out.println("main 실행");
methodA(); //여기
System.out.println("main 종료");
}
public static void methodA() {
System.out.println("methodA 호출");
}
}
위 코드와 같이 같은 클래스 내에 호출할 다른 메소드에 static을 붙여 준다면, 앞에 클래스명을 붙여주지 않고 메소드명 만으로도 메소드를 호출해 줄 수 있다.
패키지(package)는 서로 관련 있는 클래스 또는 인터페이스 등의 모아 하나의 묶음으로 단위를 구성하는 것을 말한다.
서로 다른 패키지 안에 존재하는 클래스를 다른 클래스에서 끌어와 사용하는 경우엔 패키지 명을 포함한 풀 클래스 이름을 사용해야 한다.
하지만 이렇게 매번 다른 클래스의 패키지 명까지 기술 해주기에는 써주어야하는 패키지 명이 아주 길어질 수도 있고, 코드의 가독성까지 떨어질 수 있다.
이렇게 반복적으로 패키지 명을 쓰지 않고 생략하여 사용할 수 있도록 도와주는 것이 import 구문이다.
import를 하지 않고 다른 클래스를 가져와 사용할 경우
public class App {
public static void main(String[] args){
com.ohgiraffers.section01.method.Calculator calc1 = new com.ohgiraffers.section01.method.Calculator();
}
}
import를 해준 경우
import com.ohgiraffers.section01.method.Calculator
public class App {
public static void main(String[] args){
Calculator calc1 = new Calculator();
}
}
→ 코드의 길이 차이가 확연하게 나게 된다.
앞으로도 많이 사용될 Java의 메소드와 패키지의 내용을 다시 한 번 정리해보며 간단하게 알아보았다.
아직 많이 어려운 내용은 없지만 잠깐 나온 접근 제어자와 static 부분은 헷갈리니 좀 더 자세히 알아 보면 좋을 것 같다는 생각이 들었다.