메서드와 변수의 관계

둥냥둥냥둥·2023년 5월 31일
0
post-thumbnail

객체가 가지고 있는 동작, 기능을 Method라고 하며 메서드를 정의하고 메서드를 호출 방법에 대해서 학습한다.

[학습목표]

  • Method는 무엇인가
  • 메서드는 변수
  • 매개변수 parameter passing
  • 메서드 Overloading

Method는 무엇인가

method 또는 member function는 객체 지향 프로그래밍에서 객체과 관련된 서브 루틴 (또는 함수)이며 데이터와 멤버 변수에 대한 접근 권한을 갖는다.

클래스 기반 언어에서 클래스 내부에 정의되어 있다.
메서드는 프로그램이 실행되고있을때 클래스에서 생성된 인스턴스와 관련된 동작을 정의한다. 메서드는 런타임 중에 클래스 인스턴스 (또는 클래스 객체)에 저장되어 있는 데이터에 접근할 수 있는 특수 속성을 가지고 있다.

바인딩은 클래스와 메서드 간의 연관관계를 말합니다.
클래스와 관련된 메서드는 클래스에 바인딩 할 수 있다. 메서드는 컴파일 타임 (정적 바인딩) 또는 런타임 (동적 바인딩)에 클래스에 바인딩 할 수 있다.

Method

  • 반복적인 동일 작업을 메서드를 만들어 사용하면 편리합니다.
  • 객체가 가지고있는 동작(기능)을 메서드(함수)라고 한다.
  • 메서드는 정의를 하고 호출을 하여 사용되어진다.
  • 객체지향프로그램은 객체가 가지고 있는 메서드를 통해서 데이터를 서로 주고 받으며 상호작용을 한다.
  • 메서드는 크게 API 에서 제공해주는 메서드와 사용자 정의 메서드의 두 종류로 분류할 수 있습니다.

메서드 선언

public static 리턴타입(자료형, void) 메서드명() {
				
               메서드 작성
    
    	return 리턴 데이터;
}

메서드는 변수


#### ✓ 메서드의 정의와 Call
접근제한자 (1)리턴타입 메소드명 (2)(인수1, 인수2){
	    
        수행코드;
        
    	(3)return 반환값;
}

(1). 수행된 후에 return하는 결과의 자료형 아무 결과도 반환하지 않으면 자료형에 void를 씀
(2). 매개변수는 콤마로 구분, 매개변수가 없더라도 괄호 ( ) 필요
(3). 메서드를 종료하고 메서드의 결과를 반환(return)하는 역할

✓ 메서드 Call 하기

public static void main(String[] agrs){
				
   int a = 3;
   int b = 5;
   int resul = add(a,b)
}
public int add(int a, int b){
				
    int sum = a+b;
    
    return sum;
}

Q. 매개변수로 2개의 정수를 받아서 총합을 구하여 리턴 하는 메서드를 정의하세요.

public class MethodMakeTest {
    public static void main(String[] args) {
        int a = 3;
        int b = 5;

        // add 라는 메서드를 call하여 두수의 합의 결과를 받아보자.
        int result = add(a,b);
        System.out.println("result = " + result);
    }

    // Q. 매개변수로 2개의 정수를 받아서 총합을 구하여 리턴 하는 메서드를 정의하세요.
    public static int add(int a, int b){
        int sum = a+b;

        return sum;
    }
}

✓ 메서드의 결과 값은 하나의 형태로 만들어진다. 
✓ 변수는 데이터를 하나의 형태로 저장한다.
✓ 메서드의 이름이 변수 역할을 한다.

매개변수 parameter passing

✓ Call By Value(값 전달)

public int add(int a, int b){
				
    int sum = a+b;
    
    return sum;
}

✓ Call By Reference(번지 전달)

public int add(int[] a) {
	int sum=0;
	
    for(int i=0;i<a.length;i++){ 
	sum+=a[i];
	}
	return sum;
}

Q. 매개변수로 정수형 배열을 받아서 배열의 총합을 구하여 리턴 하는 메서드를 정의 하세요.

public class CallByReferenceExam {
    public static void main(String[] args) {
        int [] a = {1,2,3,4,5};
        // 배열의 총합을 구하여 출력하세요?
        int result = addArray(a);   // 번지전달(Call By Reference)
    }
    
    // Q. 매개변수로 정수형 배열을 받아서 / 배열의 총합을 구하여 / 리턴 하는 메서드를 정의 하세요.
    public static int addArray(int[] x){

        int sum = 0;
        for (int i = 0; i<x.length; i++){
            sum = sum+x[i]; // sum += a[i];
        }
        return sum;
    }
}

메서드 Overloading

부모 클래스로부터 상속받은 메소드를 자식 클래스에서 재정의하는 것을 오버라이딩이라고 한다. 상속받은 메소드를 그대로 사용할 수도 있지만, 자식 클래스에서 상황에 맞게 변경해야하는 경우 오버라이딩할 필요가 생긴다.

오버라이딩의 조건
오버라이딩은 부모 클래스의 메소드를 재정의하는 것이므로, 자식 클래스에서는 오버라이딩하고자 하는 메소드의 이름, 매개변수, 리턴 값이 모두 같아야 한다.

  • 하나의 클래스 내에서 동일한 이름의 메서드를 여러 개 사용할 수 있는 객체지향 기법
    • 동작이 비슷하기 때문에 메서드 이름을 같게 만들어 사용하면 편리하다.(편리성)
  • 오버로딩의 전제조건 -> 메서드의 signature가 달라야 한다.
    • 매개변수의 개수, 매개변수의 타입
public class CallByReference {
    public static void main(String[] args) {

        // Call By Value(값 전달)
        // Call By Reference(번지 전달)
        float a = 56.7f;
        float b = 78.9f;
        floatAdd(a,b); // Call By Value
        System.out.println("종료");
    }// 끝 -> 종료

    // Q. 매개변수로 2개의 실수를 받아서 / 총합을 구하여 / 출력하는 / 메서드를 정의하세요.
    public static void floatAdd(float a, float b){
        float hap = a+b;
        System.out.println("hap = " + hap);
        // return;
    }
}
profile
Java 먹자

0개의 댓글