JAVA

[JAVA]메서드

당고개 2023. 9. 7. 23:27

1. 메서드(Method)

메서드는 기본적으로 네 가지 메서드로 존재할 수 있습니다.

1. 반환값이 있고 매개변수도 있는 메서드
2. 반환값이 있고 매개변수가 없는 메서드
3. 반환값이 없고 매개변수가 있는 메서드
4. 반환값이 없고 매개변수가 없는 메서드

인스턴스 변수와 정적 변수가 있듯이 메서드에는 인스턴스 메서드정적 메서드가 있습니다.

메서드의 선언과 정의

메서드는 클래스 내부에 선언되며 다음과 같을 수 있습니다.

class Person {
    String name;
    int age;
    String gender;

    // 반환값이 없고 매개변수가 있는 메서드
    void setName(String name) {
        this.name = name;
    }

    // 반환값이 있고 매개변수가 없는 메서드
    String getName() {
        System.out.println(name);
        return name;
    }
}

반환값이 없는 메서드는 void 키워드를 선언해야 하며, 반환값이 있는 메서드는 메서드 내부에 return 키워드와 반환값이 존재해야 합니다.

반환값이 없는 메서도에도 return 키워드가 존재할 수 있다

메서드 실행 도중 종료되길 원한다면 메서드에서 반환값없는 return 키워드를 이용하여 메서드 실행을 종료할 수 있습니다.

class Study {
    …
    boolean isStuding;

    void start() {
        if (isStuding) {
            System.out.println("이미 공부중이다");
            return;
        }
        isStuding = true;
        System.out.println("공부를 시작한다");
    }
}

메서드의 실행

메서드에는 인스턴스 메서드와 정적 메서드가 존재합니다.
인스턴스 메서드는 인스턴스 변수와 같이 인스턴스를 생성 후에 호출할 수 있습니다.

Person person = new Person();
// 인스턴스 메서드의 실행
person.setName("록카");

String name = person.getName();

정적 메서드

정적 변수와 같이 메서드가 존재하는데요. 정적 메서드는 객체를 인스턴스화하지 않고 사용할 수 있는 메서드 입니다.

정적 메서드 또한 정적 변수와 같이 프로그램 시작 시 메서드의 내용이 적재되기 때문에 인스턴스 생성 없이도 메서드를 호출 할 수 있습니다.

class Utils {
    static int plus(int a, int b) {
        return a + b;
    }
}
int sum = Utils.plus(1, 3);

System.out.println(sum);

그러나 정적 메서드에도 제약이 있습니다.

class Utils {
    // 인스턴스 변수
    int c = 3;
 
    static int plus(int a, int b) {
        // 인스턴스 변수 c에 접근할 수 없다 
        return a + b + c;
    }
}

정적 메서드도 생성과 소멸의 수명주기가 인스턴스 변수와 다르기 때문에, 정적 메서드 내부에서 인스턴스 변수 c에 접근할 수 없습니다.

class Utils {
    // 정적 변수
    static int c = 3;
 
    static int plus(int a, int b) {
        return a + b + c;
    }
}

그러나 정적 변수는 프로그램이 시작이 메모리에 적재되기 때문에 정적 메서드 내부에서 접근할 수 있습니다.

2. 메서드를 작성해보자

1. 메서드 선언하기

코드 작성(Person.java)

class Person {
    String name;
    int age;
    String gender;

    Person(String name, int age, String gender) { 
        this.name = name;
        this.age = age;
        this.gender = gender;
    }

    // 인스턴스 메서드
    void eat(String food) {
        System.out.printf("%s는 %s를 먹었다\n", name, food);
    }

    // 인스턴스 메서드
    String getPersonInfo() {
        return String.format("name: %s, age: %d, gender: %s", name, age, gender);
    }

    // 정적 메서드
    static void printSpecies() {
        System.out.println("사람입니다");
    }
}

코드 작성(Main.java)

public class Main {
    public static void main(String[] args) {

        Person.printSpecies();

        Person person = new Person("김철수", 20, "male");
        person.eat("밥");

        System.out.println(person.getPersonInfo());
 
    }
}

출력

사람입니다
김철수는 밥을 먹었다
name: 김철수, age: 20, gender: male

 

 

 

출처 : https://www.codelatte.io/courses/java_programming_basic/KVG7OY0F7VE622T6

'JAVA' 카테고리의 다른 글

[JAVA]객체의 합성  (0) 2023.09.12
[JAVA]메서드 오버로딩  (0) 2023.09.08
[JAVA]생성자 오버로딩  (0) 2023.09.06
[JAVA]생성자, this  (0) 2023.09.05
[JAVA]멤버 변수  (0) 2023.09.05