이 포스트는 인프런 "김영한의 자바 입문" 섹션 2 강의를 바탕으로 작성하였습니다 :)
[지금 무료] 김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음 강의 - 인프런
프로그래밍에 처음 입문하는 분들을 위한 자바 강의입니다. 코드를 따라하면서 손쉽게 자바를 배울 수 있습니다., 국내 개발 분야 누적 수강생 1위, 제대로 만든 김영한의 자바 입문[사진][임베
www.inflearn.com
01. 변수 시작
# Var1
package variable;
public class Var1 {
public static void main(String[] args) {
System.out.println(10);
System.out.println(10);
System.out.println(10);
System.out.println(10);
}
}
10
10
10
10
ㅇ 패키지 (packages)
- variable 이라는 패키지를 만들었다면, 해당 패키지에 들어가는 자바 파일 첫 줄에 packages variable; 와 같이 소속된 패키지를 선언해주어야 함
- 자바 파일이 위치하는 패키지와 package variable 선언 위치가 같아야 함

** 단축키 정보
psvm -> public static void main(String[] args)
sout -> System.out.println();
자동으로 출력되는 것을 알 수 있다.
알차게 잘 써먹을 예정입니다 ^___^
# Var2
- 10이 아닌 20으로 숫자를 변경하여 출력하고 싶을 때
- 사용자가 숫자를 입력하고, 출력하고 싶을 때
우리는 이때 "변수"라는 기능을 사용하여 프로그램 코드를 작성한다.
case 1. 10을 변수로 선언
package variable;
public class Var2 {
public static void main(String[] args) {
int a; //변수 선수
a = 10; //변수 초기화
System.out.println(a);
System.out.println(a);
System.out.println(a);
}
}
10
10
10
case 2. 20을 변수로 선언
package variable;
public class Var2 {
public static void main(String[] args) {
int a; //변수 선수
a = 20; //변수 초기화
System.out.println(a);
System.out.println(a);
System.out.println(a);
}
}
20
20
20
>> a의 값을 변경하면 출력결과가 모두 함께 변경되는 것을 확인할 수 있다.
02. 변수 값 변경
# Var3
package variable;
public class Var3 {
public static void main(String[] args) {
int a; // 변수 선언
a=10; // 변수 초기화 a(10)
System.out.println(a);
a=50; // 변수 값 변경 : a(10->50)
System.out.println(a);
}
}
10
50
* 출력 과정
1. a=10; -> 변수 a에 10을 저장한다.
2. System.out.println(a); -> 변수 a의 값을 읽는다. a에는 10이 들어있다. 10을 출력한다.
3. a=50; -> 변수 a의 값을 50으로 변경한다. a(10->50)
4. System.out.println(a); -> 변수 a의 값을 읽는다. a에는 50이 들어있다. 50을 출력한다.
03. 변수 선언과 초기화
ㅇ 변수 선언
변수를 선언하면 컴퓨터의 메모리 공간을 확보해서 그곳에 데이터를 저장할 수 있다.
그리고 변수의 이름을 통해서 해당 메모리 공간에 접근할 수 있다.
쉽게 이야기해서 데이터를 보관할 수 있는 공간을 만들고, 그곳에 이름을 부여한다.
# Var4
package variable;
public class Var4 {
public static void main(String[] args) {
int a;
int b;
int c,d;
}
}
변수는 다음과 같이 하나씩 선언할 수도 있고
int a;
int b;
다음과 같이 한번에 여러 변수를 선언할 수도 있다.
int c,d;
ㅇ 변수 초기화
변수를 선언하고, 선언한 변수에 처음으로 값을 저장하는 것을 "변수 초기화"라고 한다.
# Var5
package variable;
public class Var5 {
public static void main(String[] args) {
//1. 변수 선언, 초기화 각각 따로
int a;
a=1;
System.out.println(a);
int b=2; //2.변수 선언과 초기화를 한번에
System.out.println(b);
int c=3, d=4; //3. 여러 변수 선언과 초기화를 한번에
System.out.println(c);
System.out.println(d);
}
}
1
2
3
4
* 출력 과정
1. 변수의 선언과 초기화를 각각 따로 할 수 있다.
2. 변수를 선언하면서 동시에 초기화 할 수 있다.
-> int b 를 사용해서 변수 b를 만들고 그 다음에 바로 b=2 를 사용해서 변수 b에 값 2 저장
3. 여러 변수를 선언하면서 초기화도 동시에 진행할 수 있다.
** 단축키 정보
Ctrl + Shift + F10 -> 코드 출력 실행 단축키 (Windows)
ㅇ 변수는 초기화 해야한다
만약 변수를 초기화 하지 않고 사용하면 어떻게 될까?
# Var6
package variable;
public class Var6 {
public static void main(String[] args) {
int a;
System.out.println(a);
}
}

변수를 초기화 하지 않고 사용하면 위에 사진과 같이 컴파일 에러가 발생한다.
왜 이런 오류가 발생할까?
컴퓨터에서 메모리는 여러 시스템이 함께 사용하는 공간이다. 그래서 어떠한 값들이 계속 저장된다.
변수를 선언하면 메모리상의 어떤 공간을 차지하고 사용하는데,
초기화 하지 않으면 그 공간에 기존에 어떤 값이 있었는지 아무도 모르고 이상한 값이 출력될 수 있다.
이러한 문제를 예방하기 위해 자바는 변수를 초기화 하도록 "강제"한다.
cf 1 . 지역변수
지금 학습하는 변수는 "지역변수 (Local Variable)이라고 하는데, 지역 변수는 개발자가 직접 초기화를 해주어야 한다.
나중에 배울 클래스 변수와 인스턴스 변수는 자바가 자동으로 초기화를 진행해준다.
cf 2 . 컴파일 에러
컴파일 에러는 자바 문법에 맞지 않았을 때 발생하는 에러이다.
오류를 빨리, 그리고 명확하게 찾을 수 있기 때문에 사실은 좋은 에러다. 덕분에 빠르게 버그를 찾아서 고칠 수 있다.

package variable;
public class Var6 {
public static void main(String[] args) {
int a;
//System.out.println(a);
}
}
System.out.println(a); 부분을 위와 같이 주석 처리해준다면,
out에서 var6 파일이 생성되는 것을 확인할 수 있다.
04. 변수 타입 1
변수는 데이터를 다루는 종류에 따라 다양한 형식이 존재한다.
# Var7
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"; //문자열, 문자열을 다루기 위한 특별한 타입
System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println(d);
System.out.println(e);
}
}
100
10.5
true
A
Hello Java
변수는 데이터를 다루는 종류에 따라 다양한 형식이 존재한다.
이러한 형식을 영어로는 타입(type)이라고 하고, 우리말로는 형식 또는 형이라고 한다.
예를 들어서 int 타입, int 형식, int 형 등으로 부른다.
특별히 구분하지 않고 섞어서 부르기 때문에 모두 같은 말로 이해하면 된다.
ㅇ 변수 타입의 예
- int : 정수를 다룬다 (ex) 1, 100, 1000
- double : 실수를 다룬다 (ex) 0.2, 1.5, 100.121
- boolean : 불리언 타입이라 한다. true, false 값만 사용할 수 있다.
주로 참과 거짓을 판단하는 곳에서 사용한다.
- char : 문자 하나를 다룰 때 사용한다. 작은 따옴표(')를 사용해서 감싸야 한다 (ex) 'A', '가'
- String : 문자열을 다룬다. 큰 따옴표를 사용해야 한다. (ex) "Hello Java"
파이썬 변수 타입과 미치게 헷갈린다..
str은 비슷하지만 ,, double이 왜이리 생각 안나는지 모르겠다 ,,,
cf . String
String은 첫 글자가 대문자로 시작하는 특별한 타입이다.
ㅇ 리터럴
코드에서 개발자가 직접 적은 100, 10.5, true, 'A', "Hello Java"와 같은
"고정된 값"을 프로그래밍 용어로 리터럴(literal)이라고 한다.
변수의 값은 변할 수 있지만, 리터럴은 개발자가 직접 입력한 고정된 값이다.
따라서 리터럴 자체는 변하지 않는다.
int a=100; // 정수 리터럴
double b=10.5; // 실수 리터럴
boolean c=true; // 불리언 리터럴
char d='A' // 문자 하나 리터럴
String e="Hello Java" // 문자열 리터럴
05. 변수 타입 2
ㅇ 숫자 타입
# Var8
package variable;
public class Var8 {
public static void main(String[] args) {
// 정수
byte b =127; // -128 ~ 127까지
short s = 32767; // -32,768 ~ 32,767
int i = 2147483647; //-2,147,483,648 ~ 2,147,483,647 (약 20억)
// -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
long l=9223372036854775807L;
// 실수
float f = 10.0f;
double d = 10.0;
}
메모리를 작게 사용하면 작은 숫자를 표현할 수 있고, 메모리를 많이 사용하면 큰 숫자를 표현할 수 있다.
변수를 선언하면 표현 범위에 따라 메모리 공간을 차지한다.
그래서 필요에 맞도록 다양한 타입을 제공한다.

표현할 수 있는 숫자의 범위와 차지하는 메모리 공간은 다음과 같다.
- 정수형
byte : -127 ~ 127 (1byte, 2^8)
short : -32,768 ~ 32,767 (2byte, 2^16)
int : -2,147,483,648 ~ 2,147,483,647 (약 20억) (4byte, 2^32)
long : -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 (8byte, 2^64)
- 실수형
float : 대략 -3.4E38 ~ 3.4E38, 7자리 정밀도 (4byte, 2^32)
double : 대략 -1.7E308 ~ 1.7E308, 15자리 정밀도 (8byte, 2^64)
- 기타
boolean : true, false (1byte)
char : 문자 하나 (1byte)
String : 문자열을 표현한다. 메모리 사용량은 문자 길이에 따라 동적으로 달라진다.
ㅇ 리터럴 타입 지정
정수 리터럴은 int를 기본적으로 사용한다. 따라서 int 범위까지 표현할 수 있다.
숫자가 int 범위인 약 20억을 넘어가면 L을 붙여서 정수 리터럴을 long으로 변경해야 한다.
(대문자 L, 소문자 l 모두 가능하다. 그런데 소문자 l은 숫자 1과 착각할 수 있어서 권장하지 않는다.)
실수 리터럴은 기본이 double형을 사용한다.
float형을 사용하려면 f를 붙여서 float형으로 지정해야 한다.
ㅇ 변수 타입 정리
이렇게 많은 변수들을 실제로 다 외우고 사용해야 할까?
다음 타입은 실무에서 거의 사용하지 않는다.


06. 변수 명명 규칙

cf. 낙타표기법
프로그래밍에서 변수,함수,클래스 등의 이름을 지을 때 많이 사용하는 표기법 중 하나이다.
이 표기법의 이름은 이름이 여러 단어로 구성되어 있을 때,
각 단어의 첫 글자가 대문자로 시작하고,이 대문자들이 낙타의 동봉처럼 보이는 것에서 유래했다.
이름에 공백을 넣지 않고도 여러 단어를 쉽게 구분할 수 있으므로, 변수의 이름을 이해하기 쉽게 만들어준다.


06. 문제와 풀이
백문이 불여일타 !
프로그래밍은 수영이나 자전거 타기와 비슷하다.
아무리 책을 보고 강의 영상을 봐도 직접 물속에 들어가거나 자전거를 타봐야 이해할 수 있다.
프로그래밍도 마찬가지다.
이해하고 외우는 것도 중요하지만 무엇보다 직접 코딩을 해보는 것이 더욱 중요하다.
읽어서 이해가 잘 안 되더라도 직접 코딩을 해보면 자연스럽게 이해가 되는 경우도 많다.
백번 읽는 것보다 한 번 직접 코딩해서 결과를 보는 것이 좋은 개발자로 빠르게 성장할 수 있는 지름길이다.
문제 1
다음 코드에 반복해서 나오는 숫자 4,3을 다른 숫자로 한번에 변경할 수 있도록
다음을 변수 num1, num2를 사용하도록 변경해보세요.
# VarEx1
package variable.ex;
public class VarEx1 {
public static void main(String[] args) {
int num1=4;
int num2=3;
System.out.println(num1+num2);
System.out.println(num1-num2);
System.out.println(num1*num2);
}
}
7
1
12
문제 2
다음과 같은 작업을 수행하는 프로그램을 작성하세요.
클래스 이름은 VarEx2라고 적어주세요.
1. 변수 num1을 선언하고, 이에 10을 할당하세요.
2. 변수 num 2를 선언하고, 이에 20을 할당하세요.
3. 두 변수의 합을 구하고, 그 결과를 새로운 변수 sum에 저장하세요.
4. sum 변수의 값을 출력하세요.
# VarEx2
package variable.ex;
public class VarEx2 {
public static void main(String[] args) {
int num1=10;
int num2=20;
int sum;
sum=num1+num2;
System.out.println(sum);
}
}
30
# 정답코드
package variable.ex;
public class VarEx2 {
public static void main(String[] args) {
int num1=10;
int num2=20;
int sum=num1+num2;
System.out.println(sum);
}
}
30
int sum=num1+num2; 로 간단하게 표현할 수 있었다는 것을 알아갑니다..

intellij 사용하지 않고 손코딩을 했더라면, 저는 이 문제 틀렸습니다.
sum 변수 선언할 때 데이터 타입 안 적고 바로 sum=num1+num2;를 적었거든요..
그리고 변수 선언할 때, 파이썬과 자바의 차이점에 대해서 물어봤습니다..
기억 상 파이썬 변수 선언할 땐 데이터 타입을 명시적으로 지정하지 않았거든요.
사람들이 여러모로 파이썬이 간편하다고 하는데는 이유가 있었네요 ^^;;
https://chat.openai.com/share/2b4c74ca-ecb9-44a7-a371-dec4eb3ec236
ChatGPT
A conversational AI system that listens, learns, and challenges
chat.openai.com
파이썬과 자바의 차이점을 정리해보자면
자바는 다음과 같이 'int'라는 정수형 데이터 타입을 명시하며 변수를 선언하지만,
int myNumber = 10;
파이썬은 변수의 데이터 타입이 자동으로 결정되기 때문에, 따로 데이터 타입을 명시적으로 지정하지 않는다.
my_number = 10
그리고 데이터 타입이 자동으로 결정되기에 같은 변수에 다른 데이터 타입을 할당할 수 있다.
my_number = 10
my_number = "Hello"
여기서 더 궁금해서 찾아보았던 자바의 변수 선언 특징은

pasreInt()는 javascript 에서만 있는 줄 알았는데, java에서도 사용되는 함수라는 사실 ! ...
나중에 알게 될 사실이었겠지만 그래도 gpt한테 물어보면서 신기한 것을 알아간다 ~ ,,,
문제 3 - long, boolean 데이터 타입
클래스 이름 : VarEx3
long 타입의 변수를 선언하고, 그 변수를 10000000000(백억)으로 초기화한 후 출력하는 프로그램을 작성하세요.
boolean 타입의 변수를 선언하고, 그 변수를 true로 초기화한 후 출력하는 프로그램을 작성하세요.
# VarEx3
package variable.ex;
public class VarEx3 {
public static void main(String[] args) {
long a = 1000000000L;
boolean b = true;
System.out.println(a);
System.out.println(b);
}
}
1000000000
true
** 단축키 정보
soutv()
System.out.println("b = " + b); 와 같이 자동적으로 생성됨
'JAVA' 카테고리의 다른 글
| [ 김영한의 자바 입문 ] 섹션 4. 조건문 (0) | 2024.02.01 |
|---|---|
| [ 김영한의 자바 입문 ] 섹션 3. 연산자 (1) | 2024.01.27 |
| [ 김영한의 자바 입문 ] 섹션 1 . Hello World (0) | 2024.01.08 |