[JAVA] (Method) 메서드 그리고 static, heap, stack

Dec 19, 2023
[JAVA] (Method) 메서드 그리고 static, heap, stack
Contents
Scope
💡
자바에서 메서드는 코드의 실행 단위입니다.
 
먼저 예제 프로그램을 보자
public class MethodEx01 { static void m1(){ // void : 반환할 게 없다. System.out.println("m1"); } static String m2(){ // main에서 실행시키면 열린다 System.out.println("m2"); return "m2"; // return - : 메서드 종료 } public static void main(String[] args) { MethodEx01.m1(); m1(); m2(); // 실행후 리턴 값인 "m2"로 바뀐다. String result = "m2"; // == String result = m2(); System.out.println("resulf : " + result); } }
메서드 유형 m1, m2
 
public class MethodEx03 { static void m3(int n1){ System.out.println("m3 : " + n1); } static void m4(int n1, int n2) { // 매개 변수(parameter)가 두개 System.out.println("m4 : " + n1); System.out.println("m4 : " + n2); } public static void main(String[] args) { m3(1); m4(1,2); // 인수(Argument) } }
메서드 유형 m3, m4
*파라미터가 동전 투입구, 인수가 동전 이라고 생각하자.
 
메서드안에 메서드를 만들지 못한다. 클래스 밖에서도 못 만든다.
 
 
하드웨어에서 메모리로 > class load라고 한다.
1. class load 2. sttaic 찾기 3. main 찾아서 실행
Method가 실행되면 Queue가 열린다.
 
💡
what is Queue(큐) ?
먼저 들어온 데이터가 먼저 나가는 선입선출(FIFO, First-In-First-Out)방식으로 데이터를 저장하고 관리하는 데이터 구조입니다.
Queue가 실행된 라인 (;)순으로 pop되는데, main Queue 실행중에 다른 Method가 실행되면, pop되지 않은 채로, Method Queue가 실행된다.
 
💡
Then what's stack(스택)?
데이터를 저장하고 접근할 수 있는 선형 자료구조입니다. 스택은 후입선출(LIFO, Last-In-First-Out) 방식으로 데이터를 저장합니다.
push : 스택에 데이터를 추가하는 작업 pop : 데이터를 제거하는 작업 - 메모리에 있는 데이터를 CPU가 작업하는 것 top : 맨 위에 있는 데이터를 확인하는 작업
 
! static이 실행되지 않고, 동적으로 stack

Scope

public class ScopeEx01 { int n1 =1; // (heap) static int n2 = 2; // (static) static void m1() { // static 이친구는 메인 전에 띄어져 있다. int n1 = 10; System.out.println("m1 : " + n1); } void m2 () { // 동적으로 (stack)에 띄워야 한다. System.out.println("m1 : " + n1); } // 메인 시작전에 static에 n2변수와 m1메서드가 로드되어 있습니다. public static void main(String[] args) { System.out.println("1"); m1(); System.out.println("2"); } }
 
notion image
notion image

컴퓨터가 .java를 실행하는 순서

  1. class load
  1. static 찾아 띄우기
  1. main 실행
    1. ```햐

Question

  1. stack 에선 static자료를 찾을 수 있나요? - 당연하지요- className.varName 이와 같은 식으로 가능합니다
  1. stack에서 다른stack자료에 접근할 수 있나요? - 안됩니다!
 
static 과 heap은 클래스 내에 어디서든 찾을 수 있다. static은 다른 클래스에서도 찾을 수 있음.
 

생명 주기

stack < heap < static
stack : 메소드가 실행 될 때 생성, 끝날 때 제거. heap : new로 동적으로 띄어줄 때 생성 static : main 실행 전 생성
 
Share article

MiracleCoding