전체 방문자
오늘
어제
21종
종이의 코딩 공부방
21종
  • 분류 전체보기 (171)
    • JAVA (64)
    • Springboot (46)
      • 블로그만들기 (45)
    • Database (60)
      • Oracle (60)
    • 프로젝트 3 (CELOVER) (0)
    • 개발서버 구축 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

인기 글

최근 글

최근 댓글

hELLO · Designed By 정상우.
21종

종이의 코딩 공부방

JAVA

[자바/JAVA] 프로그래밍 - 클래스(Class) - Field(전역변수, 지역변수)

2023. 6. 7. 17:26

변수 구분


- 전역 변수 : 클래스 영역에 바로 선언한 변수 --> 클래스 내에서면 어디서든 적역으로 다 사용 가능하다.

  (외우는 팁! 전체지역!!)

- 지역 변수 : 클래스 영역내에 어떤 특정한 구역 ({})에 선언한 변수 --> 선언된 해당 그 지역에서만 사용 가능하다.
  * 특정한 구역 : 메소드 {}, 제어문(if, for){} 등등 ...

 

1. 전역변수
  - 필드 == 멤버변수 == 인스턴스 변수
 *  생성시점 : new 연산자를 통해서 객체 생성
 *  소멸시점 :  객체 소멸시 같이 소멸

 

  - 클래스 변수 == static 변수 => 예약어 쓸 수 있는데 static이라는걸 쓰면 클래스 변수가 된다.
 *  생성시점 : 프로그램 실행(해당 객체 생성 안돼도)과 동시에 무조건 메모리 영역(static) 영역
 *  소멸시점 : 프로그램 종료될때 소멸


2. 지역변수
 *  생성시점 : 지역변수가 속해있는 특정한 구역({}) 실행(호출)시 메모리 영역에 할당
 *  소멸시점 : 특정한구역({}) 종료시 소멸


테스트 1)

// 전역변수
private int a;

public void method1() {
    int b = 10;	// 클래스 입장에서 지역변수, 메소드 입장에서 전역변수
    System.out.println(b);

    if(true) {
        int c = 20;
	}
//system.out.println(c); // 안됨
}

실행 Class

// 멤버변수 (인스턴스변수) => 전역변수
private int global;

public void test(int num) {	// test 메소드 시작
    
    // 매개변수(일종의 지역변수 즉, 메소드 영역 내에서만 쓸 수 있음)

    // 지역변수(메소드 영역내에 선언) => 지역변수에는 접근제한자 같은거 붙이는거 아님
//	int local;	// 초기화 안하면 안됨. 근데 전역변수는 왜 됨?
    int local = 10;

    // 멤버변수 출력 => 멤버변수는 해당 이 객체 생성시 JVM이 기본값으로라도 초기화
    System.out.println(global);	// 초기화 안돼있음. 근데 오류 안남. heap영역에 생성될때 초기화

    // 매개변수 출력 => 매개변수는 해당 이 메소드 호출시 반드시 값이 전달될것이기 때문에 초기화 안돼있어도됨.
    System.out.println(num);	// 초기화 안돼있음. 근데 오류안남. 매개변수로 무조건 하나는 넘어올거니까

    // 지역변수 출력
    System.out.println(local);	// local이 초기화 안되있으면 오류남.

}	// test 메소드 영역 끝

컴파일


테스트 2)

package com.kh.chap04_field.model.vo;

// 필드들의 접근제한자를 테스트 해보기 위한 클래스
public class FieldTest2 {	// 클래스 시작
	
	/*
	 * * 필드(멤버변수)에서 사용가능한 접근제한자 4가지
	 * 
	 * public		=> 어디서든(같은패키지, 다른패키지 모두) 접근 가능
	 * protected	=> 같은 패키지 접근 가능, 다른 패키지일 경우 상속구조(부모자식간의 관계)에서는 접근 가능 -> 나중에 
	 * default		=> 같은 패키지에서만 접근 가능(다른패키지 일 때는 절대 불가)
	 * private		=> only 해당 클래스에서만 접근 가능
	 * 
	 * 위에서부터 아래로 내려갈수록 접근할 수 있는 범위가 좁아짐
	 */
	
	public String pub = "public";
	protected String pro = "protected";
	String def = "default";	// 안쓰면 default
	private String pri = "private";


}	// 클래스 종료

실행 Class

package com.kh.chap04_field.run;

import com.kh.chap04_field.model.vo.FieldTest2;

public class FieldRun {

	public static void main(String[] args) {
		
		FieldTest2 f2 = new FieldTest2();
		
		// public 
		System.out.println(f2.pub);

		// protected : 같은 패키지내에서는 접근가능, 다른 패키지라면 상속구조에서만 접근가능
//		System.out.println(f2.pro);
		
		// default : 오로지 같은 패키지 내에서만 접근가능
//		System.out.println(f2.def);
		
		// private : only 해당 클래스에서만 접근 가능!!
//		System.out.println(f2.pri);
		
	}

}

컴파일


테스트 3)

package com.kh.chap04_field.model.vo;


// 클래스변수 (Static)
public class FieldTest3 {
	
	// static은 공유의 개념
	// static이 붙은 애들은 프로그램 실행과 동시에 메모리의 static 영역에 올라감!!
	// 프로그램 실행과 동시에 메모리상에 한번 올려놓고 여기저기서 가져다 쓰는 개념!!
	// public이랑 같이 쓰자!
	
	public static String sta = "static_FieldTest3";
	
	// static : 공유의 개념
	// final : 상수의 개념(한번 지정된 값 변경x)
	
	// 상수필드 (Static final) : 프로그램 시작시 값이 저장되면 더이상 변경되지 않고 공유하면서 사용할 목적
	public static final String STA_FIN = "static_final";
	
	
}

실행 Class

package com.kh.chap04_field.run;

import com.kh.chap04_field.model.vo.FieldTest3;

public class FieldRun {

	public static void main(String[] args) {
		
		System.out.println(FieldTest3.sta);
		
		// 수정하고 싶다면 ? 
		FieldTest3.sta = "ㅋㅋㅋ";
		System.out.println(FieldTest3.sta);
		
		// 근데 절대 변경 안되게 하고싶다면 ? => 상수필드로 선언해야함
		System.out.println(FieldTest3.STA_FIN);
//		FieldTest3.STA_FIN = "ㅎㅎㅎ";
		
		System.out.println(Math.PI);
//		Math.PI = 2.53;	// 상수라 변경불가능
		
		System.out.println(Math.random());	// static : 기울임
	}
}

컴파일

    'JAVA' 카테고리의 다른 글
    • [자바/JAVA] 프로그래밍 - 객체(Object) 실습 예제
    • [자바/JAVA] 프로그래밍 - 클래스(Class) - 생성자(Constructor)
    • [자바/JAVA] 프로그래밍 - 클래스(Class) 실습 예제
    • [자바/JAVA] 프로그래밍 - 클래스(Class)
    21종
    21종
    코딩 공부한 것 정리하려고 만든 블로그

    티스토리툴바