개발 공부/[java]

[java] 김영한의 자바 입문 / 강의 정리 / 변수

죽밥죽밥화이팅 2024. 1. 25. 23:45

해당 내용은 인프런에 있는 [김영한의 자바 입문] 강의를 보고 참고하여 정리한 글이다.

혹시 문제가 된다면 꼭 알려주시길 바랍니도...😢

 

변수(variable)

어딘가에 값을 보관하고 필요할 때 값을  꺼내 읽을 저장소. 즉, 데이터를 담는 그릇

변수는 이름 그대로 변할 수 있다는 뜻

public static void main(String[] args) {
    int a; //변수 선언
    a = 10; //변수 초기화

    System.out.println(a);
}

*tip: class를 만들 땐 관례상 첫 글자는 대문자로 작성한다

 

-변수 선언

int a; 

변수를 만드는 것변수 선언이라고 함

a라는 변수 그릇에 int(integer) 정수를 보관할 수 있음

 

-변수 초기화

a = 10;

자바에서 =는 오른쪽에 있는 값을 왼쪽에 저장한다는 의미, 수학에서의 같다(equals)와는 다른 뜻.

변수 a에 10(값)을 대입하여 저장하는 것을 변수 초기화라고 함

 

-변수 값 읽기

System.out.println(a);

변수에 저장되어 있는 값을 읽는 방법은 변수의 이름을 적어주면 됨

변수 a에 10이 들어가 있다면 자바는 실행 시점에 변수의 값을 읽어서 사용함

변수의 값을 읽는다고 값이 사라지는 것은 아니며 반복해서 읽을 수 있음

 

변수 값 변경

public static void main(String[] args) {
    int a; //변수 선언
    a =10; //변수 초기화
    System.out.println(a); //변수 a 에는 10이 들어있다. 10 출력

    a = 50; //변수 값 변경: a(10 -> 50)
    System.out.println(a); //변수 a에는 50이 들어있다. 50출력
}

 

프로그램은 위에서 부터 아래로 실행됨

변수 a가 10으로 초기화 되었지만 10을 출력 후, 50으로 변수 a 값이 변경되어 두번째 출력에선 50으로 값이 나오게 된다. 

 

변수 선언과 초기화

-변수 선언

변수를 선언하면 컴퓨터의 메모리 공간을 확보하여 그곳에 데이터를 저장

변수 이름을 통해 해당 메모리 공간에 접근할 수 있음

즉, 데이터 보관 공간을 만들고 이름을 부여하는 것

public static void main(String[] args) {
    //변수는 하나씩 선언할 수도 있고
    int a;
    int b;
    // 한번에 여러 변수를 선언할 수도 있다.
    int c,d;
    
}

 

 

-변수 초기화

변수를 선언하고, 선언한 변수에 처음으로 값을 저장하는 것을 변수 초기화라고 함

public static void main(String[] args) {
    //변수 선언, 초기화를 따로
    int a;
    a = 1;
    System.out.println(a);

    //변수 선언과 초기화를 한번에
    int b =2;
    System.out.println(b);

    //여러 변수 선언과 초기화를 한번에
    int c =3, d =4;
    System.out.println(c);
    System.out.println(d);
}

 

 

-초기화 하지 않은 변수 

int f;
System.out.println(f);

 

변수는 초기화를 반드시 해야 함

초기화를 하지 않은 변수는 다음과 같은 에러 발생

java: variable f might not have been initialized (변수가 초기화 되지 않았다는 오류)

*해당 오류는 컴파일 에러 => 자바 컴파일러가 컴파일을 돌려 .class 파일을 만들어야 하는데 지금 그게 진행이 안되는 것

컴파일 에러는 자바 문법이 맞지 않았을 때 발생하는 에러, 오류를 빠르고 명확하게 찾을 수가 있기 때문에 사실 좋은 에러

 

 

왜 오류가 발생하는가?

컴퓨터의 메모리는 여러 시스템이 함께 사용하는 공간이라 계속 어떠한 값들이 저장됨

변수 선언 시 메모리 상 어떤 공간을 차지하고 사용하겠단 말, 그 공간에 기존에 어떤 값이 있었는진 아무도 모름

그래서 초기화를 하지 않으면 이상한 값이 출력될 수 있기 때문에 자바는 변수 초기화를 하도록 강제함

 

*지금 배우고 있는 변수는 지역변수(Local Variable)라고 함. 지역 변수는 개발자가 직접 초기화 해주어야 하지만,

클래스 변수와 인스턴스 변수는 자바가 자동으로 초기화를 진행함

 

 

변수 타입1

public static void main(String[] args) {
    int a = 100; //정수
    double b = 10.5; //실수
    boolean c = true; //불리언(boolean) true, false 두 가지만 입력 가능
    char d = 'A'; //문자 하나, 2개부턴 오류 발생
    String e = "Hello Java"; //문자열, 문자열을 다루기 위한 특별한 타입

    System.out.println(a);
    System.out.println(b);
    System.out.println(c);
    System.out.println(d);
}

 

변수는 데이터를 다루는 종류에 따라 다양한 형식(type) 존재 ( 형식, 타입, 형 모두 같은 의미)

  • int: 정수 ex) 1, 2, 10, 10000 
  • double: 실수 ex) 0.2, 1.6, 1000.8455
  • boolean : 불리언(boolean) / true, false 두 값만 사용 가능, 참과 거짓을 판단하는 곳에 사용
  • char : 문자 하나를 다룸 /  작은 따옴표(')로 감싸야 함 ex) 'A', '가' 
  • String : 문자열 / 큰따옴표(")를 사용해야 함 / String은 첫 글자가 대문자로 시작한다 ex) "hello java"

리터럴

코드에서 개발자가 직접 입력한 고정된 값을 리터럴(literal)이라고 함

ex) 100, 10.5, true, 'A', "Hello Java"

 

 

변수 타입2

메모리를 작게 사용하면 작은 숫자 표현 가능, 메모리를 많이 사용하면 큰 숫자 표현 가능

  • 정수
    • byte  : -128 ~ 127
    • short : -32,768 ~ 32,767
    • int : -2,147,483,648 ~ 2,147,483,647 (약 20억) 
    • long : -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
  • 실수
    • float : 대략 -3.4E38 ~ 3.4E38, 7자리 정밀도
    • double : 대략 -1.7E308 ~ 1.7E308, 15자리 정밀도
  • 기타
    • boolean : true, false (1byte)
    • char : 문자 하나(1byte)
    • String : 문자열을 표현, 문자 길이에 따라 메모리 사용량 달라짐

 

실무에서 자주 사용하는 타입

  • 정수- int, long : 기본적으로 정수는 int, 20억이 넘을 것 같으면 long 사용
    • 파일을 다룰 땐 byte 사용 (그나마 파일 전송 시 사용한다고 함)
  • 실수 - double 
  • 불린형 - boolean : 조건문에 자주 사용
  • 문자열 - String : 문자를 다룰 땐 문자 하나든 문자열이든 String으로 사용하는 것이 편리

 

 

변수 명명 규칙

* 변수 이름은 의미있고, 용도를 명확하게 설명해야 함 / 변수 이름을 잘 짓는 것이 중요하다고 하심

규칙 :  (규칙은 필수) 규칙을 지키지 않으면 컴파일 오류 발생 

  • 변수 이름은 숫자로 시작할 수 X / BUT 숫자 포함은 가능
  • 이름에 공백 포함 X
  •  자바의 예약어를 이름으로 사용X 
  • 변수 이름에는 영문자, 숫자, 달러기호($), 밑줄(_)만 사용 가능

관례 : 필수는 아니지만 전세계 개발자가 해당 관례를 따르므로 사실상 규칙인 셈

  • 소문자 시작하는 낙타 표기법(camel case)
    • 변수 이름은 소문자로 시작하는 것이 일반적임 / 여러 단어로 이루어진 변수 이름의 경우, 첫 번째 단어는 소문자로 시작하고 이후의 단어는 대문자로 시작하여 공백 없이도 단어 구분을 쉽게 함 ex) myJava, orderDetail 

 

자바 언어의 관례 정리

클래스는 대문자, 나머지는 소문자로 시작

  • 자바에서 클래스 이름 첫글자는 대문자로 시작 / 나머지는 모두 소문자로 시작 & 낙타 표기법 적용
    • ex) 클래스 : Person, OrederDetail
    • 변수를 포함한 나머지 : firstName, userAccount
  • 예외 2가지 존재
    • 상수는 모두 대문자 사용 & 언더바로 구분 ex) USER_LIMIT
    • 패키지는 모두 소문자 사용 ex) org.spring.boot

 

 

 

강의 中

 

백문이 불여일타!

프로그래밍은 수영이나 자전거 타기처럼 직접 물 속에 들어가거나 자전거를 타봐야 이해할 수 있듯 직접 코딩을 해보는 것이 중요하다고 말씀하셨다.

읽어서 이해가 잘 안되더라도 직접 코딩을 해보면 자연스럽게 이해가 되는 경우가 많고, 백번 읽는 것 보다 한번 직접 코딩해서 결과를 보는 것이 좋은 개발자로 빠르게 성장할 수 있는 지름길이다.