package variable;
public class Var1 {
public static void main(String[] args) {
System.out.println(10);
System.out.println(10);
System.out.println(10);
}
이 코드는 단순히 숫자 10을 출력하는 코드인데, 숫자 10 대신에 숫자 20을 출력하고 싶다면 하나하나 변경해 줘야 한다.
지금은 3개밖에 안 되지만 수십, 수백개가 된다면 곤란해진다.
그래서 값을 저장해두고 필요할 때 꺼내 읽을 수 있는 저장 공간이 필요하다.
이것을 변수(variable)라고 한다.
package variable;
public class Var2 {
public static void main(String[] args) {
int a; // 변수 선언
a = 20; // 10 -> 20, 변수 초기화
System.out.println(a);
System.out.println(a);
System.out.println(a);
}
}
int a
숫자 정수( integer
)를 보관할 수 있는 이름이 a
라는 데이터 저장소를 만든다. 이것을 변수라 한다.
이렇게 변수를 만드는 것을 변수 선언이라 한다.
이제변수 a
에는 숫자정수를 보관 할 수 있다.
java에서 =
은 오른쪽에 있는 값을 왼쪽에 저장한다는 뜻이다. 수학에서 이야기하는 두 값이 같다( equals
)와는 다른 뜻이다!
숫자를 보관 할 수 있는 데이터 저장소인 변수 a
에 값 10
을저장한다.
이처럼 선언한 변수에 처음으로 값을 대입해서 저장하는 것을 변수 초기화라 한다.
System.out.println(a)
변수에 저장되어 있는 값을 읽어서 사용하는 방법은 간단하다. 변수 이름을 적어주기만 하면 된다.
변수 a
에 10
이 들어가 있다면 자바는 실행 시점에 변수의 값을 읽어서 사용한다. 따라서 다음과 같이 해석된다.
System.out.println(a) //변수 a의 값을 읽음
System.out.println(10) //a의 값인 10으로 변경, 숫자 10 출력
참고로 변수의 값은 반복해서 읽을 수 있다. 변수의 값을 읽는다고 값이 없어지는 것이 아니다.
package variable;
public class Var6 {
public static void main(String[] args) {
int a;
System.out.println(a);
}
}
이렇게 변수를 선언만 하고 초기화 하지 않는다면, 이렇게 컴파일 에러가 난다.
해석하면 변수가 초기화 되지 않았다는 오류이다.
지금 말하는 변수는 지역 변수(Local Variable)라고 하는데, 지역 변수는 개발자가 직접 초기화를 해주어 야 한다. 클래스 변수와 인스턴스 변수는 자바가 자동으로 초기화를 진행해준다.
컴파일 에러는 자바 문법에 맞지 않았을 때 발생하는 에러이다. 컴파일 에러는 오류를 빨리, 그리고 명확하 게 찾을 수 있기 때문에 사실은 좋은 에러이다. 덕분에 빠르게 버그를 찾아서 고칠 수 있다.
에러를 확인하고 나면 꼭 다음과 같이 해당 라인 전체에 주석을 적용하자. 그렇지 않으면 다른 예제를 실행할 때도 이 부 분에 컴파일 에러가 발생할 수 있다.
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 = "Hello Java"; // 문자열 리터럴, 문자열을 다르기 위한 특별한 타입
//int z = "백원"; // 타입이 안 맞음.
System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println(d);
System.out.println(e);
}
}
실행 결과
변수는 데이터를 다루는 종류에 따라 다양한 형식이 존재한다. 이러한 형식을 영어로는 타입
(type)이라 하고, 우리말로는 형식
또는 형
이라 한다. 예를 들어서 int
타입, int
형식, int
형 등으로 부른다. 특별히 구분하지 않고 섞어서 부르기 때문에 모두 같은 말로 이해하면 된다.
1
, 100
, 1000
0.2
, 1.5
, 100.121
true
, false
값만 사용할 수 있다. 주로 참과 거짓을 판단하는 곳에서 사용한다.'
)를 사용해서 감싸야 한다. 예) 'A'
, '가'
"hello java"
String
은 첫 글자가 대문자로 시작하는 특별한 타입이다.
각 변수는 지정한 타입에 맞는 값을 사용해야 한다.
코드에서 개발자가 직접 적은 100
, 10.5
, true
, 'A'
, "Hello Java"
와 같은 고정된 값을 프로그래밍 용어로 리터럴(literal
)이라 한다.
수의 값은 변할 수 있지만 리터럴은 개발자가 직접 입력한 고정된 값이다.
따라서 리터럴 자체는 변하지 않는다.
실무에서 자주 사용하는 타입
정수 - int
, long
: 자바는 정수에 기본으로 int
를 사용한다.만약 20억이 넘을 것 같으면 long
을 쓰면 된다.
파일을 다룰 때는 byte
를 사용한다.
실수 - double
: 실수는 고민하지 말고 double
을 쓰면 된다.
불린형 - boolean
: true
, false
참 거짓을 표현한다. 이후 조건문에서 자주 사용된다.
문자열 - String
: 문자를 다룰 때는 문자 하나든 문자열이든 모두 String
을 사용하는 것이 편리하다.
자주 사용하는 타입을 제외하고 실무에서 나머지를 사용하는 경우는 거의 없다. 그나마 파일 전송시에 byte
를 사용하는 것 정도이다.
java에서 변수의 이름을 짓는데는 규칙과 관례가 있다.
규칙은 필수이다. 규칙을 지키지 않으면 컴파일 오류가 발생한다.
관례는 필수는 아니지만 전세계 개발자가 해당 관례를 따르기 때문에 사실상 규칙이라고 생각해도 된다.
규칙
1num
, 1st
)myVar1
, num1
).int
, class
, public
)a-z
, A-Z
), 숫자(0-9
), 달러 기호($
) 또는 밑줄(_
)만 사용할 수 있다.관례
소문자로 시작하는 낙타 표기법
변수 이름은 소문자로 시작하는 것이 일반적이다. 여러 단어로 이루어진 변수 이름의 경우, 첫 번째 단어는 소문자로 시작하고 그 이후의 각 단어는 대문자로 시작하는 낙타 표기법(camel case)를 사용한다. (예: orderDetail
, myAccount
)
클래스는 대문자로 시작, 나머지는 소문자로 시작
java에서 클래스 이름의 첫 글자는 대문자로 시작한다. 그리고 나머지는 모두 첫 글자를 소문자로 시작한다. 여기에 낙타 표기법을 적용하면 된다.
ex. 클래스는 첫 글자 대문자, 나머지는 모두 첫 글자 소문자로 시작 + 낙타 표기법
클래스: Person
, OrderDetail
변수를 포함한 나머지: firstName
, userAccount
여기에 예외가 딱 2개 있다.
상수는 모두 대문자를 사용하고 언더바로 구분한다. USER_LIMIT
패키지는 모두 소문자를 사용한다. org.spring.boot
변수 이름은 의미있고, 그 용도를 명확하게 설명해야 한다.
a
, b
: 이런 변수는 용도를 설명하지 않는다. 단순한 예제에서만 사용하는 것이 좋다.
studentCount
, maxScore
, userAccount
, orderCount
: 용도를 명확하게 설명한다.
- psvm : 자동으로 메서드를 작성해주는 단축키
- sout : system 메서드 자동 출력 단축키
- soutv : 출력할 때 가까운 변수까지 자동으로 출력해주는 단축키
- command d - 한 줄 복사 붙여 넣기
(윈도우 - crtl d)- 리터럴(literal)이라는 단어의 어원이 문자 또는 글자를 의미한다.