Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

개발 한번 해블로그

[Java] 10. 메서드와 변수의 관계 이해 본문

Java

[Java] 10. 메서드와 변수의 관계 이해

hide on bush 2023. 11. 27. 11:27

지금까지 main 메서드를 사용하면서 도대체 이게 어떤 의미인지 무슨 역할을 하고 있는건지 모르는게 99.9%였다.
하지만 오늘 궁금즘 해결 시간이 드디어 다가왔다(물론 갓지피티한테 물어보긴 함 ^^! 그래도 모르겠는건 마찬가지 ㅎㅎ)

1. 메서드란 무엇인가?

  • 객체가 가지고 있는 어떤 동작, 기능을 의미
    • 여기서 잠깐, 그럼 객체가 뭐였지?!
    • 객체는 소프트웨어에 구현할 대상
  • 반복적인 동일 작업에서 메서드를 만들어 사용하면 편리
  • 객체가 가지고 있는 메서드를 통해서 데이터를 서로 주고 받으며 상호작용
  • 크게 API에서 제공해주는 메서드, 사용자 정의 메서드 두 종류로 분류
  • 메서드는 정의를 하고 호출하여 사용됨
  • 우리는 지금까지 메인 클래스에서 메인 메서드 아래에 필요한 메서드를 만들어서 한 것이다!

2. 프로그래밍 언어의 메서드

public int add (int x, int y){ -> 정의부(head), 원형(prototype)이라고함
 
int z=x+y; -> 검은 블랙박스를 구현부(body)라고함
 
return z;
}
접근제한자 리턴타입 메소드명 (매개변수){
 
수행코드;
 
return 반환값;
}

- public static void main(String[] args){} 우리가 지금까지 사용한 main 메서드이다. 이 형식을 뜯어서 어떤 의미인지 확인해보자!
(첫번째 칸의 메서드는 하나의 예시)

1) public
- 접근제한자
- 접근제한자에도 여러가지 종류가 있는데 public은 모든 접근을 허용한다는 의미

2) int
- return의 결과를 어떤 형태로 보낼 것인지 정하는 것
- 예시에서 int라고 기재되어있고 return z의 타입이 int 정수형이라는 것
- return은 함수(add)앞에 있는 자료형과 연관이 있고 함수 앞에 자료형이 붙는걸 리턴타입 이라고 한다.

3) add
- 메소드명이며 변수 역할을 한다.
- 함수 이름으로 값을 전달

4) (int x, int y)
- 입력값이며 인수, 인자, 매개변수, 파라메터라고도 함
- 이 매개변수는 콤마로 구분되고 매개 변수가 없더라고 () 괄호는 무조건 필요 
- 함수 또는 메서드에 전달되는 값을 받는 변수를 의미, 즉 메서드를 호출할 때 필요한 정보를 전달하는데 사용

5) return
- 메서드를 종료하고 메서드 결과를 리턴하는 역할


3. 메서드 호출

public static void main(String[] args){
int a=3;
int b=5;
int result=add(a,b); //메서드 호출
}
public int add(int a, int b){
int sum=a+b;
return sum;
}

- 왼쪽 칸에 있는 호출하는 쪽의 a,b를 실인수라고하며 오른쪽 칸에 있는 호출 받는 쪽을 가인수라고 함
- 실인수와 가인수의 개수와 타입이 일치해야 호출이 된다.(변수 이름을 맞출 필요는 없음)
- 메서드의 결과 값은 단 하나의 형태로 만들어짐(ex. sum)
- 변수는 데이터를 하나의 형태로 저장한다


4. 매개 변수 전달 기법(파라미터 패씽 : parameter passing)

- 동작은 하기 위해 메서드는 외부에서 데이터를 받아 처리하는 경우로 결과를 냄
- 매개 변수 전달 기법 중 자주 사용하는 2가지는 call by value(값 전달), call by reference(번지 전달)
- 자바에서는 거의 call by reference 사용

public class CallbyReferenceExam {
	//call by value
    public static void main(String[] args) {
        int[] a={1,2,3,4,5};
        int result = addArray(a);
        System.out.println("result = " + result);

    }
    //call by reference
    //Q. 매개변수로 정수형 배열을 받아서 총합을 구하여 리턴하는  메서드 정의
    public static int addArray(int[] a){
        int sum=0;
        for (int i = 0; i < a.length; i++) {
            sum+=a[i];
        }
        return sum;

    }
}

5. 메서드의 오버로딩

  • 하나의 클래스 내에서 동일한 이름의 메서드를 여러개 사용할 수 있는 객체기향 기법
  • 동작이 비슷하기 때문에 메서드 이름을 같게 만들어 사용하면 편리
  • 단, 오버로딩의 전제 조건은 메서드의 시그니처(매개변수의 개수, 타입)가 달라야한다
public int add(int a, int b){
int sum=a+b;
return sum;
}
public int add(float a, float b){
float sum=a+b;
return sum;
}
public int add(int a, int b, int c){
int sum=a+b+c;
return sum;
}

- 메서드의 오버로딩에서는 컴파일 시점에서 사용될 메서드가 결정되는 정적 바인딩 사용
- 컴파일 시점에서는 사실 add_int_int, add_float_float처럼 변경되어서 표현, 즉 다른 메소드명이기 때문에 컴파일 진행시 메서드 검색이나 속도 저하에 문제 없음


드디어 part 2를 끝냈다.. 끝냈다고 다 이해한건 아니고 흐름만 이해중,,이면 안되는데,, ^^,,,
갈 길이 멀었다. 아직 시작한지 3주밖에 지나지않았지만 내가 진짜 할 수 있을까,, 나 취업 할 수 있을까라고 끝없는 꼬리 질문의 연속으로 잠을 못잔다. 그래서 이제 그냥 유튜브로 자바 강의 영상 보면서 잔다.
억지로 이해해야겠다라고 생각하면서 강의 보는것보다 누워서 부담없이 보는게 뭔가 더 이해가 잘되는 것 같기도 ㅎㅋㅎㅋ
이제 다시 월요일이 돌아왔다.. (빨리 금요일이 오면 좋겠다..) 이번주도 화이릥,,,