아자 와자 아자
728x90
728x90
이 게시글은 남궁성의 정석코딩 - 자바의 정석 기초편(2020최신)을 보고 공부한 내용을 정리한 게시글입니다.
틀린 내용이 있을 수 있습니다. 

 

 

✔ 메서드

- 문장들을 묶어놓은 것.

- 값을 받아서 처리하고 결과를 반환.

 

메서드와 함수

- 메서드와 함수는 거의 같다고 할 수 있다.

- 메서드는 객체지향 개념에서 함수를 지칭하는 용어이다.

- 메서드와 함수의 다른 점은, 메서드 반드시 클래스 안에서만 정의할 수 있는 반면 함수 클래스에 독립적이다. 제약이 없다.

 

메서드의 장점

- 중복 코드 제거

- 코드 관리 용이

- 코드 재사용 가능

 

 


 

◾ 메서드 호출

class Test{
  void method(); //메서드 선언
  void method(){}; //메서드 정의
}

- 클래스 영역 안에 method() 만 있으면 메서드 선언, method(){} 중괄호까지 있으면 메서드 정의이다.

- 반환할 게 없을 때는 반환 타입을 void라고 적어준다.

- 반환 타입이 void일 경우 return문을 생략할 수 있다. (return할게 없으니까)

- 반환 타입이 void가 아닐 경우에는 반드시 return문이 있어야 한다.

class Calculate{
  int max(int a, int b) {
    if (a > b){
      return a; // true일 경우 반환
    }
    return b; // false일 경우 반환
  }
}

- if문 사용 시 true와 false 모든 영역에 return문이 들어가야 한다.

 

 


 

◾ 클래스 메서드(static 메서드)와 인스턴스 메서드

클래스 메서드

class StaticMethod{
  static long add(long a, long b){ // 클래스 메서드
  	return a + b;
  }
}

class Main{
  public static void main(String args[]){
    System.out.println(StaticMethod.add(10, 20)); // 30
  }
}
StaticMethod 클래스 안에 add()라는 클래스 메서드를 정의.
Main 클래스에서 StaticMethod 클래스 안에 있는 add() 메서드를 호출.

 

- 클래스 메서드는 객체 생성 없이 클래스명.메서드이름() 으로 호출한다. ( ex. StaticMethod.add(10,20) )

- 인스턴스 변수, 인스턴스 메서드와는 관련없는 별개의 작업을 하는 메서드이다. 

- 그렇기 때문에 클래스 메서드 내에서 인스턴스 변수를 사용할 수 없다.

 

 

인스턴스 메서드

class InstanceMethod{
  long a, b; // 인스턴스 변수 
  long add(){ // 인스턴스 메서드
    return a + b;
  }
}

class Main{
  public static void main(String args[]){
    InstanceMethod i = new InstanceMethod(); // 객체생성
    
    i.a = 30;
    i.b = 40;
    
    System.out.println(i.add()); // 70
  }
}
InstanceMethod 클래스 안에 add() 라는 인스턴스 메서드를 정의.
Main 클래스 안에서 InstanceMethod 타입을 가진 참조변수 i에 InstanceMethod 객체 생성.
참조변수 i를 통해 InstanceMethod 클래스 안에 있는 인스턴스 변수 a, b에 접근하여 값을 할당.
참조변수 i를 통해 인스턴스 메서드를 호출.

 

- 인스턴스 메서드는 객체 생성 후 참조변수.메서드이름() 으로 호출한다. ( ex. i.add() )

- 인스턴스 변수, 인스턴스 메서드와 관련된 작업을 하는 메서드로 메서드 내에서 인스턴스 변수를 사용할 수 있다.

 

 

static을 언제 붙여야 할까?

 

변수의 경우 - 변수 중에서 공통적으로 사용하는 변수에 붙인다.

메서드의 경우 - 인스턴스 변수를 사용하지 않는 메서드에 붙인다.

 

 


 

◾ 메서드 간의 호출과 참조

  클래스 변수 인스턴스 변수
클래스 메서드 사용 O 사용 X
인스턴스 메서드 사용 O 사용 O

클래스 메서드는 클래스 변수는 사용할 수 있지만 인스턴스 변수는 사용할 수 없다.

인스턴스 변수는 객체가 생성된 후 사용할 수 있는데,

클래스 메서드는 객체 생성 없이도 사용할 수 있기 때문에 클래스 메서드가 인스턴스 변수를 사용할 경우

객체의 생성 유무를 확인할 수 없어 에러가 발생한다.

 

반면에 인스턴스 메서드는 클래스 변수, 인스턴스 변수 둘 다 사용할 수 있다.

 

 


 

✔ 호출스택

스택 : 밑이 막힌 상자로 물건을 넣으면 위에 차곡차곡 쌓인다.

호출스택 : 메서드 수행에 필요한 메모리가 제공되는 공간으로, 메서드가 호출되면 호출스택에 메모리가 할당되고, 메서드가 종료되면 해제된다.

 

호출스택 예시

class Main{
  public static void main(String args[]){
    System.out.println("stack"); 
  }
}
1. main메서드 호출 2. println메서드 호출 3. println메서드 종료 4. main메서드 종료
       
  println 메서드(실행)    
main 메서드(실행) main 메서드(대기) main 메서드(실행)  

1. main 메서드가 호출되어 호출스택에 메모리를 할당한다. main 메서드는 실행중이다.

2. println 메서드가 호출되어 호출스택에 메모리를 할당한다. main 메서드 위에 쌓인다. 이때 main 메서드는 대기 상태, println 메서드는 실행상태가 된다.

3. println 메서드가 종료되고 호출스택에서 삭제된다. main 메서드가 실행상태로 바뀐다.

4. main 메서드가 종료되고 호출스택에서 삭제된다.

 

728x90
728x90

'💻 Study > Java' 카테고리의 다른 글

[Java] 객체지향개념4_상속과 포함  (0) 2023.01.30
[Java] 객체지향개념2_변수  (0) 2023.01.30
[Java] 객체지향개념1_클래스와 객체  (0) 2023.01.27
profile

아자 와자 아자

@와자!

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!