-
복습 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