230321 - java(6)

팝콘·2023년 3월 21일

Java

목록 보기
5/17

1. 메서드(함수)

  • 특정 작업을 수행하는 일련의 문장들을 하나로 묶은 것이다.
  • 입력값과 출력값만 알면 되고 과정은 몰라도 되기 때문에 내부가 보이지 않는 블랙박스라고도 한다.
- 메서드의 구조

// 메서드의 선언부
접근제한자 반환타입 메서드이름(변수타입 변수명, 변수타입 변수명, . . .) {
	
    // 메서드의 구현부
	수행문;
	수행문;
	수행문;
}

1-1. 메서드의 선언부

반환타입	메서드이름(매개변수) {
	수행문;
}

예)
	int add(int x, int y) {
    	int result = x + y;
        return result;
    }
  • 메서드의 이름, 매개변수의 선언 그리고 반환타입으로 구성되어 있다.
  • 메서드가 작업을 수행하기 위해 어떤 값을 필요로 하고 작업의 결과로 어떤 타입의 값을 반환하는지에 대한 정보를 제공한다.

매개변수 선언

  • 매개변수는 메서드가 작업을 수행하는데 필요한 값들을 제공받기 위한 것이다.
  • 각 변수 간의 구분은 쉼포를 사용한다.
  • 변수의 타입을 생략할 수 없다.
  • 매개변수 자체는 생략할 수 있다.

반환타입

  • 메서드의 작업수행 결과인 반환값의 타입을 적는다.

  • void
    - 반환타입이 void면 메소드 실행 후 반환값(획득되는 값)이 없다는 뜻이다.
    - 값을 추가, 변경, 삭제하는 수행문을 실행하는 경우는 반환타입이 void다.


1-2. 메서드의 구현부

  • 메서드를 호출했을 때 수행될 문장들을 넣는다.

return문

  • 이 문장은 작업을 수행한 결과인 반환값을 호출한 메서드로 전달한다.
  • 반환타입이 void가 아닌경우 구현부 안에 'return 반환값;'이 반드시 포함되어 있어야 한다.
  • void는 컴파일러가 자동으로 추가해주기 때문에 생략한다.
  • 데이터 타입이 반환타입과 일치해야 한다.
int multiply(int x, int y) {
	if(a>b) {
    	return a;
    }
}
- if문의 조건식이 true일 때만 retrun문이 실행되기 때문에 오류가 발생한다.
- if문 바깥에도 return문을 추가해주어야 한다.

void plus(int x, int y) {
    	retutn 0;
    }
- 오류

void plus(int x, int y) {
    	retutn;
    }
- 오류 아님

지역변수

  • 메서드 내에 선언된 변수들은 그 메서드 내에서만 사용할 수 있기 때문에 다른 메서드에서 같은 이름의 매개변수를 선언해도 된다.

  • Object는 모든 자바 클래스의 부모 클래스다.
  • main 메소드는 항상 먼저 생성된다.
  • 인스턴스 변수 혹은 멤버 변수는 객체 안에서 생성되고 매개변수 혹은 지역 변수는 메서드 안에서 생성된다.

메서드의 종류
1) 필드와 상호작용 하는 메서드
- 해당 클래스의 필드 값을 변경하거나 가져오는 등의 작업을 수행한다.
- 이러한 메서드는 주로 객체의 상태를 변경하거나 필드 값을 조작하는 데 사용된다.

2) 필드와 상호작용 하지 않는 메서드
- 클래스의 기능을 수행하거나 값을 반환하는 등의 작업을 수행한다.
- 이런한 메서드는 주로 객체의 상태를 변경하지 않고 단순히 정보를 반환하거나 다른 메서드를 호출하는 등의 작업을 수행한다.


2. 호출스택

  • 메서드 작업에 필요한 메모리 공간을 제공한다.

  • 호출스택의 흐름

  • 메서드가 호출되면 수행에 필요한 만큼의 메모리를 스택에 할당받는다.

  • 메서드가 수행을 마치고 나면 사용했던 메로리를 반환하고 스택에서 제거된다.

  • 호출스택의 제일 위에 있는 메서드가 현재 실행 중인 메서드이다.

  • 아래에 있는 메서드가 바로 위의 메서드를 호출한 메서드다.


3. 기본형 매개변수와 참조형 매개변수

1) 기본형 매개변수

  • 매개변수로 전달받은 값이 타입이 기본형이면 기본형의 값이 복사된다.
  • 변수의 값을 읽기만 할 수 있다.

2) 참조형 매개변수

  • 매개변수로 전달받은 값의 타입이 참조형이면 인스턴스의 주소가 복사된다.
  • 변수의 값을 읽고 변경할 수 있다.

4. static 메서드와 인스턴스 메서드

static 메서드

  • 인스턴스 변수나 인스턴스 메서드를 사용하지 않는 메서드를 클래스 메서드로 정의한다.

  • 클래스변수처럼 객체를 생성하지 않고도 '클래스이름.메서드이름(매개변수)'와 같은 식으로 호출이 가능하다.

  • 클래스 메서드는 인스턴스 변수를 사용할 수 없다. 클래스 메서드는 인스턴스 생성 없이 호출이 가능하므로 클래스 메서드가 호출되었을 때 인스턴스가 존재하지 않을 수도 있기 때문이다.

인스턴스 메서드

  • 메서드 작업을 수행하는데 인스턴스 변수를 필요로 하는 메서드다.

  • 인스턴스 변수는 인스턴스(객체)를 생성해야만 만들어지므로 인스턴스 메서드는 반드시 객체를 생성해야만 호출할 수 있다.

  • 인스턴스 변수나 인스턴스 메서드에서는 static이 붙은 멤버들을 사용하는 것이 자유롭다. 인스턴스 변수가 존재한다는 것은 static변수가 이미 메모리에 존재한다는 것을 의미하기 때문이다.

static을 붙이는 기준

  1. 클래스를 설계할 때, 멤버변수 중 모든 인스턴스에 공통으로 사용하는 것에 static을 붙인다.
  2. 메서드 내에서 인스턴스 변수를 사용하지 않는다면, static을 붙이는 것을 고려한다.

5. 메서드 중복 정의(overloading)

long add(int a, long b) {...}
long add(int a, int b) {...}
  • 이름이 같고, 매개변수가 다른 메소드를 한 클래스에 여러개 만드는 것을 뜻한다.
  • 비슷한 기능의 메서드를 같은 이름으로 사용하고 복잡함을 줄이기 위해 사용된다.

오버로딩의 조건

  1. 메서드의 이름이 같아야 한다.
  2. 매개변수의 개수 또는 데이터타입이 달라야 한다.
  3. 반환 타입은 관계없다.
  • 오버로딩의 예로 가장 대표적인 것은 println 메서드가 있다.
	System.out.println(1)
	System.out.println("안녕")
	System.out.println(3.14)
    
- PrintStream 클래스에 어떤 종류의 매개변수를 지정해도 출력할 수 있도록 오버로딩된 println메서드를 정의해두었다.
profile
터짐

0개의 댓글