본문 바로가기
  • 시 쓰는 개발자
프로그래밍 문법/Java

6장 객체지향 (3) 메소드 , 호출스택

by poetDeveloper 2024. 3. 10.

JAVA의 정석 강의를 들으며 공부하며 정리했습니다. 너무 자잘한 내용은 안적었습니다.

 

[자바의 정석 - 기초편] ch6-14~16 메서드란? 메서드의 선언부와 구현부

메소드란?

메소드는 문장(명령문)들을 묶어놓은 것이다. 좀 더 구체적으로는 자주 쓰는 코드를 괄호로 묶고서 이름을 붙여놓으면 그게 메소드다. 메소드는 값을 받아서 처리하고 결과를 반환한다. 이때 값은 여러개 받을 수 있지만 반환하는 값은 항상 1개이다. 만약 여러개를 반환하고 싶으면 배열에 담아서 주거나 객체로 묶어서 줘야한다. 단, 하나의 메소드는 하나의 기능만 수행하도록 작성하는 것이 좋다.

 

메소드의 장점

  • 코드 중복 줄임
  • 코드 관리 쉬움
  • 코드 재사용 가능
  • 코드가 간결해져서 가독성에 좋다

메소드 = 선언부 + 구현부

  • 선언부 : 메소드 이름, 매개변수(매개변수는 0개 이상이다.)
  • 구현부 : 메소드 호출시 수행될 코드이다. 이곳에서 선언된 변수를 지역변수라고 하고, 메소드가 종료되면 변수는 사라진다. 서로 다른 메소드에서 사용되는 지역변수는 이름이 같아도 상관없다. 참고로 매개변수도 지역변수이다.

[자바의 정석 - 기초편] ch6-17~19 메서드호출

메소드이름(1, 2, ...); 와 같이 호출할 수 있다. 여기서 말하는 값1, 값2는 메소드가 작업할 때 필요한 값들이다.

[자바의 정석 - 기초편] ch6-20,21 return, 반환값

  • return을 만나면 실행중인 메소드를 종료하고 메소드를 호출한 곳으로 되돌아간다. 반환 타입이 void라면 return을 생략해도 되지만 void가 아니라면 메소드 안에 return문이 반드시 필요하다. 참고로, 메소드 내에 if a return a라고만 해놓으면 오류가 난다. 왜냐하면 else에 대해서 처리하지 않았기 때문에, a가 아니라면 return을 할 수 없는 상황인 것이다.
  • return을 쓸 때는 반환 타입도 신경써야 하지만, 결과를 담을 변수의 타입도 신경써야한다. 만약 int result = maxnum(a,b) 라고 한다면 maxnum의 return이 int이어야 하고, 또한 이 결과값을 받을 result 값도 int여야 한다. 서로 맞아야 한다는 것이다.

[자바의 정석 - 기초편] ch6-22 호출스택

호출스택이란?

  메소드 수행에 필요한 메모리가 제공되는 공간이다. 메소드가 호출되면 호출 스택에 메모리를 할당하고, 종료되면 해제한다. 어려운 게 아니고 LIFO방식으로 처음에 main 실행, 그 다음 메소드 실행되면 메인메소드 위에 올려두고, 그 다음 메소드 또 올려두고 .... 메소드 종료되면 제거하는 방식이다. 

  이때 하나의 스택에서는 하나의 메소드만 실행중인 것이고, 나머지는 대기중이다. 나중에, 멀티쓰레드라는 것을 배우는데 거기서는 쓰레드마다 스택을 하나씩 가지고 있고 쓰레드가 여러개니까 스택도 여러개지만, 지금 배우는 것은 싱글쓰레드이기 때문에 해당되지 않는다.