Developer/JAVA

JAVA, 자바의 규칙과 멤버의 의미 , 자바의 변수

단님 2024. 7. 19. 18:05
728x90
멤버의 의미

클래스 안에 있는 구성을 의미한다.

  • 멤버 변수(= 필드)

멤버 변수는 인스턴스 변수와 클래스 변수(static 변수) 두 종류가 존재한다.

 

인스턴스 변수는 static 이 선언되지 않는 변수를 말하며,

인스턴스마다 고유하게 존재하는 변수로 , 객체가 생성될때마다 메모리에 할당되는 변수.

 

클래스 변수는 static이 선언된 변수를 말하며,

클래스 전체에서 공유되는 변수를 말한다. 클래스가 메모리에 로드될때 할당되는 변수.

public class MyClass {
    int instanceField;         // 인스턴스 필드
    static int classField;     // 클래스 필드
}
  •  멤버 메서드

멤버 메서드는 객체의 동작을 정의하는 함수로 인스턴스 메서드와 클래스 메서드로 분류된다.

 

인스턴스 메서드는 static이 선언되지 않는 메서드를 말하며,

인스턴스 변수와 static 변수를 사용할 수 있다.

 

클래스 메서드는 static이 선언된 메서드를 말하며,

인스턴스 변수를 사용할 수 없다.

 

public class MyClass {
    void instanceMethod() {
        System.out.println("Instance method");
    }

    static void classMethod() {
        System.out.println("Class method");
    }
}

 

  • 초기화 블럭

초기화 블럭은 인스턴스가 생성될때 실행되는 블럭으로 , 

인스턴스 초기화 블럭과 클래스 초기화 블럭이 있다.

public class MyClass {
    {
        // Instance initialization block
        System.out.println("Instance initialization block");
    } // instance 초기화 블럭

    static {
        // Static initialization block
        System.out.println("Static initialization block");
    } // static 초기화 블럭
}

 

  • 내부 클래스

정적 내부 클래스와 , 비 정적 내부 클래스가 있다. (추후 배울 예정)

public class OuterClass {
    static class StaticInnerClass {
        // Static inner class
    }

    class NonStaticInnerClass {
        // Non-static inner class
    }
}

 

 


자바의 규칙

 

1. 메인 메서드가 있는 클래스명과 파일명은 동일해야한다. (대문자로 시작)

- 메인 메서드명을 임의로 변경할경우 실행되지 않는다 . (main O , mains X)

2. 실행문은 메서드 또는 초기화 블럭에 들어갈 수 있다.

- 외부에 들어갈 수 없다.(아래 예문 확인)

3. 변수명은 숫자와 특수문자가 첫글자가 될 수 없다.

4. 변수명은 _(언더바) , $(달러기호) , 소문자로 시작해야 한다.

5. 예약어는 패키지 명 , 클래스명 , 변수명으로 사용 할 수 없다.

6. final 변수는 변하지 않는 숫자를 표기함의 특수성의 구별을 위해 변수명을 전체 대문자로 표기한다.

public class Ex01_Hello {//메인클래스 -> 파일명과 동일해야함.
	
    //	int num = 100;
	// 변수 선언이 가능함.
	
	 static int num = 100;// 멤버 변수 선언이 가능함.
	 
	//System.out.println("안녕하세요 !!"); 실행문은 메서드 안에서만.
	 
	public static void main(String[] args) { // 멤버 메서드
		// TODO Auto-generated method stub
		System.out.println("안녕하세요 !!");
		System.out.println("안녕하세요 !!");
		System.out.println("num = "+ num);
	}

}

 


자바의 변수

 

변수의 개념

 

자바에서는 변수로  데이터를 저장하기 위해 이름을 할당받는 메모리 공간을 의미한다.

타입을 명시하여 타입마다 맞는 메모리 공간을 할당 받기 때문에 , 

타입을 명시해줘야 한다.

- 기본자료형의 특징

모두 기본 값이 정해져 있음.

변수 선언과 동시에 메모리 생성 , 값은 메모리의 stack(스택) 영역에 저장되어 실제 자료값을 갖는다.

 

- 참조자료형의 특징

기본형과 달리 실제 값이 저장되어 있지 않고, 자료가 저장된 공간의 주소를 저장하게 된다.

실제값은 heap 영역에 저장되어 있고 , 그 주소값을 참조하여 사용한다.

stack 영역에 저장된 참조형 변수는 null값을 줌으로 초기화를 시킬 수 있다.

 

자료 참조 : https://inpa.tistory.com/entry/JAVA--변수의-기본형-참조형-타입

 

--변수 이름의 적합성 테스트.

 - test 1

String name = "홍길동";

good !

이름이라는 명시적인 변수명을 가지고 소문자로 시작하는 변수.

- test 2

String irum = "홍길동";

비추천 , 

변수명으로의 역할은 명시적이여야 하는데 명시성이 떨어짐으로 비추천함.

-test 3

String 이름 = "홍길동";

사용금지,

변수명으로 한글을 허용하나 , 한글을 지원하지 않는 라이브러리를 이용하게 될 때 오류가 생길 수 있다.

-test 4

String Name = "홍길동";

사용금지,

변수명이 대문자로 시작한다고 해서 오류가 나지는 않으나 ,

다른 작업자가 오해할 수 있고, 특정 라이브러리는 대문자를 클래스로 인식할 수도 있다.

 

--기본자료형의 타입체크.

test 1.(long 타입)

long l = 1234567890123;

long 타입의 l 에 L을 명시 하지 않는다면 int 타입으로 취급하기 때문에,

타입이 맞지 않음의 타입 미스매치 오류가 발생.

long l = 1234567890123L;

올바르게 변경해줘야 한다.

test2. (float 타입)

float f = 123.456;

float 타입에 f 또는 F 를 명시하지 않는다면 double 타입으로 취급하기 때문에,

타입이 맞지 않음의 타입 미스매치 오류가 발생.

test3.(char 타입)

char 형 : 한글 영문 모두 한글자를 의미함.(2byte)

2byte로 int 타입으로도 사용 가능.

타입 캐스팅

		//char 형 : 한글 영문 모두 한글자를 의미함.(2byte)
		// 2byte로 int 타입으로도 사용 가능.
		char aa = 'A';
		char bb = 'B', cc ='C';
		char kk = '가' , nn = '나';
		String ss = "한글자 이상 가능";
		System.out.println("소괄호 묶지 않고 :char(A)+char(B)+char(C) ="+aa+bb+cc);
		//문자열의 연산이 이루어짐 
		System.out.println("소괄호 묶어서 : (char(A)+char(B)+char(C)) ="+(aa+bb+cc));
		//연산자의 우선순위의 적용으로 인해 아스키코드화 되어 연산됨.
		System.out.println("소괄호 묶어서 : (char(A)+char(B)+char(C)+string(한글자이상가능)) ="+(aa+bb+cc+ss));
		// 연산 순서 : aa+bb => aa+bb+cc => aa+bb+cc+ss => 문자열 +aa+bb+cc+ss
		
		//char를 int로 출력 (타입 캐스팅:명시적 형변환)
		System.out.println("타입캐스팅 :(int)char(A)+(int)char(B)+(int)char(C) ="+(int)aa+(int)bb+(int)cc);
		System.out.printf("char 테스트 : (int)aa = %d , bb = %s , (int)kk = %d , nn = %s \n" ,(int) aa, bb, (int)cc, ss);
		//System.out.printf("char 테스트 : aa = %d , bb = %s , kk = %d , nn = %s \n" , aa, bb, cc, ss); //Error
		
				//int 를 char 로 출력 (타입 캐스팅 : 명시적 형변환)
		int ii = 66;
		System.out.println("타입캐스팅 :(char)int(66)="+(char)ii);

 

 

형변환은 다음번에 자세히 다뤄보겠다.