메소드

ryulhui·2024년 6월 20일

progremmers

목록 보기
4/5

메소드란?
객체지향 언어라는 의미는 하나의 사물을 하나의 클래스로 설명하는 언어인데
사물의 설명은 그 물체의 상태와 물체의행동으로 나뉩니다.
필드가 물체의 상태라면, 물체의 행동에 해당하는게 메소드다.
car에 이름과 번호가 있기도 하지만, car는 앞으로 전진할수도 있고 후진하는 행동도 할 수 있다.
메소드는 입력값이 있고, 그 입력값을 받아서 무언가 한 다음 결과를 도출해 내는 수학의 함수와 비슷한 개념이다. 이때 입력값을 매개변수라고 하고, 결과값을 리턴값이라고 합니다.
인자( Argument ) 는 어떤 함수를 호출시에 전달되는 값을 의미한다.
매개 변수( Parameter ) 는 그 전달된 인자를 받아들이는 변수를 의미한다.
메소드란 클래스가 가지고 있는 기능이다. 클래스 안에 선언됩니다.


메소드(Method) 선언
클래스가 가지고 있는 기능을 의미
메소드는 클래스 내부에 선언됨

public 리턴타입 메소드명 (매게변수 틀 ) { 구현 }
리턴타입_메서드가 실행 된 후에 결과값을 되돌려주는 부분,어떤타입으로 돌려줄꺼냐 하는거)
리턴타입이 있냐 없냐, 매게변수가 있느냐 없느냐로 다양한 형태의 메소드를 정의 할수 있음

다양한 형태의 메소드
매개변수도 없고 리턴하는 것도 없는 형태의 메소드
리턴하는 것이 없을 경우 void라고 작성합니다.

public class MyClass{
    public void method1(){
        System.out.println("method1이 실행됩니다.");
    }
}

정수(int) 를 받아들인 후, 리턴하지 않는 메소드 void
받아들이는 값은 어떤 타입이라도 상관없다.
받아 들이는 값의 수는 여러개 일 수 있다. 여러개을 경우 콤마(,)로 구분한다.
public class MyClass{
public void method2(int x){
System.out.println(x + " 를 이용하는 method2입니다.");
}
}

이번엔 정수를 받아들인 후, 리턴하지 않는 메소드입니다.
아무것도 받아들이지 않고, 정수를 반환하는 메소드
리턴하는 값 앞에 return 이라는 키워드를 사용한다.
메소드 이름 앞에는 리턴하는 타입을 적어준다.
리턴타입은 하나만 사용할 수 있다. 리턴하는 타입은 어떤 타입이라도 상관없다.
public int method3(){
System.out.println("method3이 실행됩니다.");

    return 10;
}
//위 메소드가 실행되면, 콘솔에 'method3이 실행됩니다.' 를 출력하고, 이 메소드를 호출한 쪽에 10을 리턴한다.

정수를 2개 매개변수로 받고, 아무것도 반환하지 않는 메소드 _여러개을 경우 콤마(,)로 구분
public void method4(int x, int y){
System.out.println(x + "," + y + " 를 이용하는 method4입니다.");
}

정수를 한개 받아들인 후, 정수를 반환하는 메소드
public int method5(int y){
System.out.println(y + " 를 이용하는 method5입니다.");
return y *5;
}
}


메소드의 사용
MyClass
public class MyClass{
public void method(){
System.out.println("method1이 실행됩니다.");
}

    public void method2(int x){
        System.out.println(x + " 를 이용하는 method2입니다.");
    }

    public int method3(){
        System.out.println("method3이 실행됩니다.");
        return 10;
    }

    public void method4(int x, int y){
        System.out.println(x + "," + y + " 를 이용하는 method4입니다.");
    }

    public int method5(int y){
        System.out.println(y + " 를 이용하는 method5입니다.");
        return 5;
    }
}

메소드를 사용하기 위해서는 메소드가 정의된 클래스인 MyClass 가 생성되어야 한다
객체를 생성할 때는 new 연산자를 이용한다.
메소드 사용할때는 생성된 클래스를 참조하는 레퍼런스변수.메소드명() 으로 사용할 수 있다.
public class MyClassExam{
public static void main(String args[]){
MyClass my1 = new MyClass(); //메소드가 정의된 클래스 생성

        my1.method1();   //MyClass에서 정의해 놓은 메소드 method1() 를 호출한다.       

        my1.method2(10);

        int x = my1.method3();

        System.out.println("method3 이 리턴한 " + x + " 입니다.");

        my1.method4(10,100);

        int x2 = my1.method5(50);

        System.out.println("method5 가 리턴한 " + x2 + " 입니다.");

    }
}

ex)
class ReferenceTypeExam {
public static void main(String []args) {
ReferenceTypeExam exam = new ReferenceTypeExam();

    //기본형 변수value1을 addOne에 전달합니다.
    int value = 10;
    exam.addOne(value);
    System.out.println("기본형 변수의 값을 다른 메소드에서 변경한 결과: " + value);
    
    //참조형 변수arr을 addOne에 전달합니다.
    int []arr = {10};
    exam.addOne(arr);
    System.out.println("참조형 변수의 값을 다른 메소드에서 변경한 결과: " + arr[0]);
}


public void addOne(int value) {
    value++;
}

public void addOne(int[] arr) {
    for(int i = 0; i < arr.length; i++){
        arr[i] ++;
    }
}

}


출력 〉	기본형 변수의 값을 다른 메소드에서 변경한 결과: 10
참조형 변수의 값을 다른 메소드에서 변경한 결과: 11

기본형 타입은 다른 메소드에 매개변수로 전달될때, 10이라는 값이 그대로 전달됩니다.따라서 addOne에서 1을 더하더라도 value라는 변수에는 아무 영향이 없습니다.

하지만 참조형 타입은 다른 메소드에 매개변수로 전달될때, 변수의 주소가 전달됩니다. 예를들어 '몇번째 박스에 값이 있다'는 식으로 값이 들어있는 주소가 전달되는겁니다. 그럼 그걸 전달받은 메소드addOne에서는 그 박스에 가서 들어있는 값에 1 더합니다. addOne을 실행하고 나서 arr[0]을 확인해 볼 때도 같은 박스에 가서 값을 확인하기 때문에 값이 11로 변해있는겁니다.


-----------------------------------------------------------------------------------------------------------
profile
개발자 준비생😂

0개의 댓글