메소드
클래스는 상태와 동작을 가지고 있는데, 상태에 해당하는 것이 멤버변수이고 동작에 해당하는 것이 메소드
메소드의 특징
- 멤버 변수와의 구분은 괄호로 - 멤버변수는 괄호 없음, 메소드는 괄호 있음
- 메소드는 클래스를 new로 인스턴스화 시켜야 사용 가능(main()이 호출되는 시점에 SpaceInvader는 생성되지 않음)
- 메인 메소드는 static, SpaceInvader는 heap 영역으로 다르기 때문
- 중복된 코드를 통합할 수 있음 → 리팩토링
📌 JVM
더보기
Static 영역 - static 붙은 것
Heap 영역 - new 한 클래스 (참조타입)
Stack 영역 - 원시타입
메소드의 선언 방법
public class 클래스이름 {
접근제어자 리턴타입 메소드이름() {
// 메소드의 기능
return 리턴타입의 결과값;
}
}
public class 클래스이름Test {
public static void main(String[] args){
클래스이름 변수이름1 = new 클래스이름();
리턴타입 변수이름2 = 변수이름1.메소드이름();
}
}
// ex
public class User {
String name;
String phoneNumber;
int age;
boolean isAdult() {
return age >= 18;
}
}
public class UserFactory {
public User getAdultUser() {
User user = new User();
user.age = 34;
return user;
}
}
public class UserFactoryTest {
public static void main(String[] args) {
UserFactory userFactory = new UserFactory();
User user = userFactory.getAdultUser();
System.out.println(user.age);
}
}
→ 메소드를 호출하기 위해서는 메소드가 들어있는 클래스를 인스턴스화하고 호출
메소드의 구성요소
- 접근제어자 : 메소드를 호출할 수 있는 범위
- 리턴타입 : 메소드를 실행한 결과의 타입
- 메소드명 : 메소드 이름
1. 접근제어자
- public : 모든 클래스에서 접근 가능, 다른 패키지에서도 접근 가능
- protected : 같은 패키지 내의 클래스와 해당 클래스를 상속한 외부 패키지의 클래스에서 접근 가능
- default : 접근 제어자를 쓰지 않은 경우 기본값, 같은 패키지 내의 클래스에서만 접근 가능
- private : 해당 클래스에서만 접근 가능
접근제어자의 사용 가능 범위
2. 리턴타입
- 반드시 써주어야 함
- 원시타입, 참조타입 모두 가능
- void 지정 가능
3. 메소드명
- 소문자로 시작
- 카멜케이스
- boolean으로 리턴 시 → is 붙이기
매개변수
파라미터, 메소드를 호출하는 곳에서 메소드로 값이나 오브젝트를 전달하는 매개체
public class 클래스이름 {
접근제어자 리턴타입 메소드이름(매개변수) {
// 메소드의 기능
return 리턴타입의 결과값;
}
}
public class Calculator {
public void plus() {
System.out.println(1 + 1);
}
public void printPlusOne(int num) { // int num : 매개변수
System.out.println(num + 1);
}
}
main() 메소드
앞에 static이 붙어있는데 static이 붙은 클래스, 변수, 메소드는 자바 프로그램이 시작될 때 인스턴스화되고 자바 프로그램이 종료될 때 사라진다.
→ static이 붙어있지 않으면 GC의 대상으로 사용이 끝나면 메모리에서 삭제됨
→ 자바가 실행되고 시작점을 찾지 못해 바로 종료
public static void main(String[] args) {
}
public
JVM에서 접근해야되기 때문에 public으로 선언 (private는 실행 불가)
메인 메소드는 다른 곳에서 호출되는 메소드가 아니기 때문에 접근제어자는 크게 의미 없음
static
Java 프로그램이 시작될 때, JVM은 main 메소드를 호출하여 프로그램을 실행한다. 예를들어 위 ArgsPrinter클래스가 Java 프로그램이 시작되는 시점에서 아직 인스턴스가 생성되지 않았기 때문에, main 메소드를 호출하기 위해선 main 메소드가 static이어야 한다.
프로그램이 실행될 때 해당 클래스의 인스턴스를 생성하지 않고도 메소드에 접근할 수 있게 하기 위함
void
리턴값이 필요없음
main
메소드명 고정
String[] args
자바 프로그램을 실행할 때 특정 값들을 전달할 수 있는 매개변수
'JAVA' 카테고리의 다른 글
[JAVA] 객체 지향 프로그래밍 (0) | 2023.05.30 |
---|---|
[JAVA] 코딩 컨벤션 (0) | 2023.05.18 |
[JAVA] 리팩토링 (0) | 2023.05.09 |
댓글