Starbucks Caramel Frappuccino
본문 바로가기
  • 그래 그렇게 조금씩
JAVA/Java Start

2. 변수(variable)_(package, psvm)

by Toughie 2024. 1. 7.

package

자바에서 패키지는 관련 클래스들을 그룹화 하고, 클래스들 간 이름 충돌을 방지하기 위한 네임스페이스를 제공하는 방법이다.

소스코드(src)의 최상단에 위치함.


public static void main(String[] args) { ... } 메인 메서드

클래스의 메인 메서드 톺아보기.

 

public - 메인 메서드는 다른 클래스에서도 접근 가능해야 하기 때문에 public 접근 제어자 사용.

 

static - 메인 메서드는 객체 인스턴스 생성하지 않고 호출됨. 클래스에 속한 정적 메서드(타입 메서드)

(메서드의 로컬 변수 및 매개변수는 메서드가 호출될 때 스택 영역에 저장됨 -> 종료 시 메모리에서 해제)

 

void - main메서드는 반환값이 없음.

(자바는 메서드의 반환 타입이 메서드 이름 앞에 기재됨, 또한 기본 데이터 타입은 소문자로 시작함.)

public int add(int a, int b) {
	return a + b;
}
//Swift와 비교
func add(a: Int, b: Int) -> Int {
    return a + b
}

 

main - 자바 프로그램이 시작되는 진입점(entry point)으로 사용되는 특별한 메서드.

프로그램이 시작되면 JVM은 main 메서드를 찾아서 실행한다.

 

String[] args - main 메서드의 매개변수로 문자열 배열을 받는다.

해당 배열은 프로그램 실행 시 커맨드 라인에서 전달되는 인수들을 저장한다.

이를 통해 프로그램에게 외부에서 입력된 데이터를 전달할 수 있음.


변수 선언과 초기화

 

변수 선언

변수를 선언하면 메모리 공간을 확보해 데이터를 저장할 수 있다.

변수의 이름을 통해서(메모리 주소를 통해) 해당 메모리 공간에 접근할 수 있다.

 

변수 초기화

변수 선언 후 선언한 변수에 처음으로 값을 할당하는 것을 '초기화'(initialize) 라고 한다.

지역 변수_Local variable)의 경우 꼭 직접 초기화 해줘야함. 안 하면 아래 컴파일 에러 발생

java: variable a might not have been initialized

 

클래스 변수나 인스턴스 변수는 자바가 자동으로 초기화 해줌.(기본 값으로)

package variable;

public class Var5 {
    //클래스 변수의 경우 자동으로 초기화가 되는데 이 때 기본 값이 할당된다.(int는 0)
    static int p;

    public static void main(String[] args) {
        int a;
        a = 1;
        System.out.println(a);

        //선언과 초기화 동시
        int b = 2;
        //여러 변수 선언 및 초기화
        int c = 3, d = 4, e = 5;

        // java: variable a might not have been initialized
        // 지역변수는 반드시 초기화 되어야 한다.(지금은 메인 메서드 스코프 내부 변수)

        System.out.println(p);
    }
}

변수 타입 

int, double, boolean, char, String

package variable;

public class Var7 {
    public static void main(String[] args) {
        int a = 100; //정수 (지금은 리터럴 값_고정된 값 할당)
        double b = 10.5; //실수
        boolean c = true; // 불리언(boolean) true/false
        char d = 'A'; // 문자, 홑따옴표
        String e = "dog"; // 문자열을 다루기 위한 타입, 쌍따옴표
        //자바에서 기본 데이터 타입은 소문자로 시작하지만 String은 클래스이기 떄문에 upper camel case 적용

        //java: incompatible types: java.lang.String cannot be converted to int
//        int x = "hi";

        //코드복사 단축키 cmd + d
        System.out.println(a);
        System.out.println(b);
        System.out.println(c);
        System.out.println(d);
        System.out.println(e);
    }
}

String의 경우 문자 길이에 따라 동적으로 메모리 사용량이 달라짐.


 

숫자 타입

정수(byte, short, int, long)

실수(float, double)

package variable;

public class Var8 {

    public static void main(String[] args) {
        // 정수
        byte b = 127; // -128 ~ 127 2의 8승, 음수부터 0
        short s = 32767; // -32,768 ~ 32,767
        int i = 2147483647; // -2,147,483,648 ~ 2,147,483,647 약 21억

        // -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
        long l = 9223372036854775807L; // 9해 이상

        // 실수
        float f = 10.0f; // 4byte
        double d = 10.0; // 8byte
    }
}

Integer number too large - 타입의 크기에서 벗어나는 숫자의 경우 해당 컴파일 에러 발생

리터럴 타입 지정

정수는 기본적으로 int를 사용하기 때문에, long의 경우 L을 붙여줘야함.

실수는 기본적으로 double을 사용하기 때문에 float의 경우 f를 붙여줘야함.(부동소수점 오류로 인해 double이 더 정확함)


정수 - int, long(20억 이상 가능성 있는 경우)

실수 - double

불린 - boolean (true, false)

문자열 - String ("SSS")


변수 명명 규칙(네이밍)

- 변수는 숫자로 시작할 수 없다.

- 이름에는 공백이 들어갈 수 없다.

- 예약어를 변수 이름으로 사용할 수 없다.(int,class,public)

- 변수 이름에는 영문자, 숫자, 달러기호, 언더바만 사용할 수 있다.

- 주로 소문자 camel case로 표현함. (ex. myWallet) 클래스는 대문자 카멜 케이스

 

상수는 모두 대문자 사용, 언더바로 구분함 (ex. USER_NUMBER)

패키지는 모두 소문자를 사용함(org.spring.boot)


학습 출처

김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음