ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 복습 6일차 - 자바의 메모리 영역
    프로그래밍 언어/자바(JAVA) 2024. 3. 3. 23:10

    메소드 영역

    ◆ 인스턴스가 공용으로 사용하는 메소드,변수,클래스 등을 담아두는 영역이다

    ■ 코드에 직접 작성한 값인 리터럴들을 묶어서 메소드 영역에 보관한다

    스택 영역

    ◆ 자바 실행시 하나의 실행 스택(쓰레드)가 생성되고, 메서드를 호출할 때 마다 하나의 스택 프레임이 쌓이고 지역변수, 중간 연산결과 등을 담고 있다

    힙 영역

    ◆ 객체(인스턴스)와 배열이 생성되는 영역이다


    정적 변수의 필요성

    ■ 객체끼리 공용으로 사용하는 필드가 없으면 새로운 인스턴스를 만들어서 접근해야하는 번거로움이 있었다

    정적 변수를 사용하지 않고, 새로운 인스턴스에 객체수를 카운트했다

    ■ 정적 변수를 사용해 편리하게 객체 생성시 값을 1씩 증가시켰다

    정적 변수에 접근하여 값을 증가

    멤버 변수(필드)의 종류

    ◆ 인스턴스 변수 :  인스턴스에 소속되고, 새로운 인스턴스에도 변수도 새로 만들어진다 각 인스턴스마다 정보를 저장하기 위해 사용한다

    ◆ 클래스(정적) 변수 : 클래스자에 소속되어, 자바 프로그램이 시작할 때 하나 만들어진다 힙, 정적 여러 곳에서 공유하기 위해 사용한다

    정적 변수

    ◆ 정적 변수는 <클래스의 이름>.<정적 변수의 이름> 으로 접근해야한다

    ◆ 정적 메서드는 단점으로는 정적 변수 또는 메서드만 사용할 수 있다 왜냐하면 정적메서드 입장에서는 인스턴스의 참조값이 없이 호출한다. 인스턴스가 생성되었는지 어떤 인스턴스인지 알 수 없다

    ■ 정적 변수는 메소드 영역에 존재하여 여러곳에서 접근할 수 있다

     

    □ 굳이 예외인 상황을 따지자면 정적메서드가 객체의 참조값을 매개변수로 입력받으면 그 인스턴스를 호출하거나 접근은 가능하지만 완전히 다른 상황이다

     

    변수와 생명주기

    ■ 지역 변수 : 스택 프레임이 제거될때 지역 변수도 함께 제거된다

    ■ 인스턴스 변수 : 더이상 A 인스턴스 변수가 참조되지 않을때, (다른 인스턴스(B)에서 A의 필드를 데이터타입으로 사용하는것도 참조(강한 연결)에 포함된다) 가비지 컬렉션이 발생하면 제거된다

    ■ 클래스 변수 : 메서드 영역의 정적 영역에 보관되는 변수이다 프로그램이 시작되는 순간에 생성되고, 프로그램이 종료될때 함께 사라진다

     

    정적 메서드 

    ■ 정적 메서드(클래스 메서드) 덕분에 불필요한 객체 생성 없이 편리하게 메서드를 사용한다

    ■ 정적메소드의 용도는 메서드 호출만 필요한 기능에 주로 사용한다 예를 들어 유틸리성 메서드에 자주 사용한다 (계산, 형변환 등등)  

    ■ 

    꿀팁

    import static static2.DecoData.staticCall;

    정적메서드를 호출할때 선언한 클래스와 호출한 클래스가 다를 경우, 클래스명을 쓰고 호출해야하는 불편함을 import static 를 사용하여 클래스 명을 생략하는 편리함이 있다

     

     

     

    ★ 개발할때 코드를 가져다 쓰는 입장, 작성하는 입장을 반드시 고려해야한다

    '프로그래밍 언어 > 자바(JAVA)' 카테고리의 다른 글

    47일차 - 정규표현식  (0) 2024.03.29
    복습 7일차 - final, 상속  (2) 2024.03.11
    복습 5일차 - 접근제어자, ★캡슐화  (0) 2024.03.03
    복습 4일차 - 생성자, 패키지  (0) 2024.03.02
    자바 시험  (1) 2024.02.20
Designed by Tistory.