본문 바로가기
JAVA-Spring/각종 메소드

JAVA 자바 [ 객체 지향 프로그래밍 ] 정적 메소드 _ static method

by Super Santj 2019. 7. 17.

1. 일반메소드(=인스턴스 메소드) => 객체를 생성 -> 호출이 가능하고,,,, 객체명.메소드명(~) 게다가 4byte 기억공간이 들어감.

=> 보편적인 기능 (X) => 특수한 기능을 사용할때 사용하고, 업무에 따라서 처리해주는일(ex 회원가입

2. 정적메소드(=클래스 메소드) => 객체를 생성 X -> 메소드를 호출이 가능 게다가 기억공간이 필요없다. 이렇게 본다면 정적메소드가 메모리소요가 없기에 효율적이라 생각이 들수있는데 사실은 그렇지않음. -> 클래스명.정적메소드명(~) 으로 명 할수있음.

=> 가장 기본적인 계산, 단순한 직업을 할때(대중화)(=최대값,최소값,절대값, 수학함수 (sin,cos,tan) ~ 등등) 자주 사용이 되는경우

정적메소드는 static 이라는 단어가 데이터 타입 앞에 붙는다.

 

** 중요 **

정적 메소드를 호출하는 방법

지금까지 우리는 static main() 정적 메소드에서 일반 메소드를 호출하였었다. 객체명.일반메소드명(~)

그리고 우리는 static 정적메소드에서 정적 메소드를 호출할때엔 클래스명.정적메소드(~)의 형식으로 호출이 가능하다.

추가적으로 같은 식구(같은 클래스)일경우 클래스명을 생략 할 수가 있다.

 

자바의 메모리 구조 _

1.메소드 영역

프로그램 실행 중 어떤 클래스가 사용되면, JVM은 해당 클래스의 클래스 파일(*.class)을 읽어서 분석하여 클래스에 대한 정보(클래스 데이터) 를 이곳에 저장한다. 이 때, 그 클래스의 클래스 변수(class variable =)도 이 영역에 함께 생성된다.

(=static 영역) =>정적메서드가 메모리에 올려
                              정적변수(멤버변수 앞에 static)

 =>** 프로그램이 시작->제일 먼저 메모리에 올라와지는 부분**
 =>제일 먼저 메모리에 올라오는 메서드? =>main

 당장 사용X 메서드를 모두 static ->메모리 부족 현상
                            =>자동


2.heap(힙영역) 

인스턴스가 생성도는 공간. 프로그램 실행 중 생성되는 인스턴스는 모두 이곳에 생성된다.

즉, 인스턴스변수(instance variable)들이 생성되는 공간이다.

Car sonata=new Car(); =>객체를 생성할때
                                          만들어지는 공간
                  TV  t=new TV()  ====>수동
                        =========

3.호출스택

호출 스택은 메소드의 작업에 필요한 메로리 공간을 제공한다. 메소드가 호출되면, 호출스택에 호출된 메소드를 위한 메모리가 할당되며, 이 메모리는 메소드가 작업을 수행하는 동안 지역변수(매개변수 포함)들과 연산의 중간결과 등을 저장하는데 사용된다. 그리고 메소드가 작업을 마치면 할당되었던 메모리 공간은 반환되어 비워진다.

=>자료구조(데이터를 저장하는 구조모양)
   p263
          =>메서드가 호출이 되면 메모리에 잡히는 영역

static int calcSum(int kor,int eng,int mat) {
  // int calcSum() {   =======================매개변수
int t=kor+eng+mat;
                 ====================>메서드 내부선언(지역변수)
return t;//return (kor+eng+mat);
   }

예제 실행 시 프로그램이 수행되는 동안 호출스택의 변화를 표시한 그림

호출 스택은 한쪽이 막혀있고 한쪽이 뚫려있다.

** 중요 ** 

댓글