객체의 구성 멤버

🔯  변수 (Variable)

메모리(ram)에 값을 기록하기 위한 공간

데이터를 저장하는 메모리(ram)의 일정 공간

 

✔ 선언

컴파일러에게 어떤 변수를 사용하겠다고 미리 알리는 것

메모리 공간에 데이터를 저장할 수 있는 공간을 할당하고 이름을 지정하는것

✔ 변수값 기록 이유

- 프로그램 실행시 사용할 값(date)이 있다면 그 값은 먼저 메모리에 기록 되있어야 함
- 가독성이 좋아짐
- 재사용성 증가로 인한 코드량 감소, 유지보수 용이

 

✔ 변수의 명명 규칙

  1. 대소문자가 구분되며 길이 제한이 없다.
  2. 예약어를 사용하면 안된다.     // ex) true, final, String
  3. 숫자로 시작하면 안된다.         // ex) age1은 가능하지만 1age는 불가능
  4. 특수문자는'_'와 '$'만을 허용한다.
  5. 여러 단어 이름은 단어의 첫글자를 대문자로 한다.
    단, 첫 시작 글자는 소문자로 하는 것이 관례이다. ex) userName

 

 

🔯 필드 선언

클래스의 필드(field)란 클래스에 포함된 변수(Variable)를 말한다.

 

⭐ 필드 선언

ⓛ 제어자  ② 데이터 타입 ③ 필드명
public, private, (default), protected int, String, double, char, boolean ... 필드명
필드를 선언할 때 접근 제한자
final, static을 사용할 수 있다
필드가 저장하는 값의 데이터 타입을 지정하며 절대 생략 불가능 필드명은 소문자로 시작함
-  필드 선언은 블록{ } 어디서든 존재할 수 있다.
-  생성자 선언과 메소드 선언의 앞, 뒤 어디서든 필드 선언이 가능하다.
-  하지만 생성자와 메서드 블록{ } 내부에 선언된 것은 필드가 아닌 지역변수가 된다

 

 변수의 종류

class  Number { 
       static  int  two;		//① 클래스 변수 (static 변수, 공유 변수)
       int  one;			//② 인스턴스 변수

       void  Method01 (int four)  {	//③ 매개 변수
       int  three;			//④ 지역 변수      
       }
}
변수 종류 static 선언위치 메모리 영역  
클래스 변수
(필드 멤버변수)
넣음 필드 클래스 영역
(static영역)
⦁ 객체의 속성을 표현
⦁ 클래스 변수는 모든 인스턴스가 공통된 저장공간(변수)을 공유하게 된다. 클래스의 모든 인스턴스들이 공통적인 값을 유지해야하는 속성의 경우, 클래스 변수로 선언해야 한다.
인스턴스 변수
(필드 멤버변수)
안넣음 필드 클래스 영역
(heap영역)
⦁ 객체의 속성을 표현
⦁ 인스턴스는 독립적인 저장공간을 가지므로 서로 다른 값을 가질 수 있다.
⦁ 인스턴스마다 고유한 상태를 유지해야하는 속성의 경우, 인스턴스변수로 선언한다.
매개 변수   메서드,
생성자 괄호 내부 ( )
  ⦁ 객체의 속성을 표현메서드 선언 시 ( )안에 선언되는 변수.
⦁ 객체의 속성을 표현메서드를 실행할 때 필요한 데이터를 외부에서 받기 위해 정의
지역 변수   메서드, 생성자,
초기화,
반복문(for,while)
중괄호 내부 { }
  ⦁ 메서드에서 필요한 값을 잠시 저장할 목적으로 선언
⦁ 메소드 내에 선언되어 메소드 내에서만 사용 가능하다 
⦁ 메소드가 종료되면 소멸되어 사용할 수 없다.

 

 

▶ 필드 예시 

더보기
package java02;

public class FieldExam {
	// [전근제한자] [예약어] 자료형 변수명[=초기값];
	// 클래스 변수(모든 객체가 공통적으로 속성을 가질때
	// 사용을 하고 생성할때 메모리 영역에 같이 생성되기 때문에
	// 꼭 필요한 공통적인 속성을 가진 변수에 사용을 해야합니다.)
	public static int var1;
	
	//멤버 변수(인스턴스 변수)
	//각각의 객체(인스턴스)마다 개별적인 속성을 가져야할떄
	//멤버 변수(인스턴스 변수)를 사용하세 됩니다.
	public int var2;
	private int var3;	//캡슐화 원칙으로 private사용
	int var4;	//접근제한자 생략 default 접근제한자
	
	//생성자
	public FieldExam() {
		String var5="생성자 지역변수";	//지역변수
		System.out.println(var5);
	}
	
	//초기화 블럭
	{
		String var6="초기화블럭 지역변수";	//지역변수
		System.out.println(var6);
	}
	//메소드
	public String method() {
		String var7 = "메소드안의 지역변수"; //지역변수
		return var7;
	}
	public static String method1() {
		String var8 = "static안의 지역변수";	//지역변수
		return var8;
	}
}

 

▶ 필드 (Field) - 클래스 초기화 블럭

package java02;

public class BlockExam {
	public static String name="하이드";
	
	public BlockExam() {
		System.out.println("생성자 영역");
	}
	int age =19;
	static{
		System.out.println("static block 영역");
		name="하이드";
	}
	{
		
	}
	
	{
		System.out.println(age);
		System.out.println("인스턴스 블럭1");
		this.age = 23;
		System.out.println(age);
	}
	{
		System.out.println("인스턴스 블럭2");
	}
}

▶ 필드 예시 실행 Run

package java01;

import java02.BlockExam;
import java02.FieldExam;

public class Run {
	public static void main (String[] args) {
		// 클래스 변수는 사용할려고 하면 클래스명을 써주고
		//.을 입력 후에 해당 클래스변수, 메소드를 사용할 수 있습니다.
		System.out.println(FieldExam.var1);
		System.out.println(FieldExam.method1());
		
		FieldExam fe=new FieldExam();
		System.out.println(fe.var2);
		System.out.println(fe.method());
		
		BlockExam be = new BlockExam();
		System.out.println(be.name);

 

'Language > Java' 카테고리의 다른 글

Class - 메소드 (Method)  (0) 2022.01.04
Class - 생성자 (Constructor)  (0) 2022.01.03
package와 import  (0) 2022.01.02
클래스, 객체, 인스턴스 개념  (0) 2022.01.02
배열 복사  (0) 2021.12.29