publicclassEx01_변수의_사용{publicstaticvoidmain(String[]args){/** 1) 선언(declaration)과 할당(정의,definition)을 분리 */// 정수형 변수 a를 선언 --> 메모리의 특정 위치에 4칸을 점유inta;// a에 100을 할당(기록)a=100;System.out.println(a);/** 2) 선언과 할당을 통합 */// 정수형 변수 b를 선언하고 a에 기록된 내용을 복사intb=a;System.out.println(b);/** 3) 실수형 변수 */// double 타입은 메모리의 8칸을 점유하고 소수점을 포함한 값을 저장한다.doublec=3.14;System.out.println(c);/** 4) 논리형 변수 */booleand=true;System.out.println(d);}}
/**
* 변수에 할당되기 위한 원초적인 값 형태
*
* int a = 100;
* 위의 코드에서 100이 리터럴
*
* 리터럴은 변수에 대입되거나 직접 출력할 수 있다.
*/publicclassEx02_리터럴{publicstaticvoidmain(String[]args){// 정수형태의 리터럴은 int로 인식된다.System.out.println(100);// 정수의 리터럴은 변수의 datatype에 따라 자동 식별된다.intnum1=100;System.out.println(num1);doublenum2=100;System.out.println(num2);// 실수의 리터럴은 값 뒤에 데이터 타입의 첫 글자(리터럴 문자)를 지정해서 구분해 함.// --> 지정하지 않을 경우 double로 인식// --> 첫 글자는 대소문자 구분 없음floatnum3=3.14F;System.out.println(num3);doublenum4=3.14D;System.out.println(num4);// `int`형의 리터럴 문자는 없지만 double은 `D`라고 명시하는 것이 가능doublenum5=100D;System.out.println(num5);}}
publicclassEx03_상수{publicstaticvoidmain(String[]args){/** 1) 변수는 초기화 이후 다른 값으로 변경 가능함 */intage=20;System.out.println(age);age=21;System.out.println(age);/** 2) 상수는 초기화 이후 값을 변경할 수 없는 형태 */// 데이터 타입 앞에 `final`키워드를 적용하여 생성// 선언과 할당이 통합된 형태로만 생성 가능함// 상수의 이름은 모두 대문자로 지정하고 스네이크 표기법을 사용하는 것이 관례finaldoublePI=3.14;System.out.println(PI);// 상수의 값을 변경하려고 시도 --> 이 위치에서 에러 발생함//PI = 3.14159;// 에러가 발생하는 위치에서 프로그램이 중단되기 때문에 아래 코드는 실행되지 않음//System.out.println(PI);}}
/**
* 문자열 : 문자(char타입)을 나열한 형태. 쌍따옴표를 사용함 --> 문장
* 기본 데이터 타입 8가지에 속하지 않음.
*
* 원래 문자열은 객체라는 형태의 특수한 변수이지만
* 아직 설명되지 않은 내용이므로 일반 변수와 구분하지 않는다.
*/publicclassEx04_문자열{publicstaticvoidmain(String[]args){/** 1) 문자열 변수의 선언과 할당 */Stringname;name="자바학생";System.out.println(name);/** 2) 빈 문자열 */// 내용이 없는 문자열 --> 따옴표를 열자마자 닫은 형태// 내용은 없지만 메모리 공간은 차지하고 있다는 점에서 존재하는 변수임Stringempty="";System.out.println(empty);/** 3) 공백문자열 */// 띄어쓰기도 엄연한 글자Stringspace=" ";System.out.println(space);/** 4) null값 */// 나중에 할당하기 위해서 값을 비워 놓은 형태// 빈 문자열이나 공백문자열은 메모리를 소비하지만 null은 메모리를 차지하지 않는다.StringnValue=null;System.out.println(nValue);}}
publicclassNamingRules{publicstaticvoidmain(String[]args){// ✅ 올바른 변수명intage;intuser_id;int$money;int_count;intnumber123;// ❌ 잘못된 변수명 (컴파일 에러)// int 123number; // 숫자로 시작 불가// int user-id; // 하이픈 사용 불가// int for; // 예약어 사용 불가// int user id; // 공백 사용 불가}}
publicclassNamingBestPractices{publicstaticvoidmain(String[]args){// ✅ 좋은 변수명 (의미가 명확함)intstudentAge=20;doubleaccountBalance=1000.50;StringfirstName="John";booleanisLoggedIn=false;// ❌ 좋지 않은 변수명 (의미가 불분명함)inta=20;doubleb=1000.50;Strings="John";booleanflag=false;// 상수는 대문자와 언더스코어 사용finalintMAX_STUDENTS=30;finaldoubleTAX_RATE=0.1;finalStringDATABASE_URL="jdbc:mysql://localhost:3306/mydb";}}
#08. 타입 변환 (Type Casting)
1) 자동 타입 변환 (Widening Conversion)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
publicclassAutomaticTypeCasting{publicstaticvoidmain(String[]args){// 작은 타입에서 큰 타입으로는 자동 변환bytebyteValue=10;shortshortValue=byteValue;// byte → shortintintValue=shortValue;// short → intlonglongValue=intValue;// int → longfloatfloatValue=longValue;// long → floatdoubledoubleValue=floatValue;// float → doubleSystem.out.println("byte: "+byteValue);System.out.println("short: "+shortValue);System.out.println("int: "+intValue);System.out.println("long: "+longValue);System.out.println("float: "+floatValue);System.out.println("double: "+doubleValue);}}
publicclassManualTypeCasting{publicstaticvoidmain(String[]args){// 큰 타입에서 작은 타입으로는 강제 변환 필요doubledoubleValue=3.14;floatfloatValue=(float)doubleValue;longlongValue=(long)floatValue;intintValue=(int)longValue;shortshortValue=(short)intValue;bytebyteValue=(byte)shortValue;System.out.println("double: "+doubleValue);System.out.println("float: "+floatValue);System.out.println("long: "+longValue);System.out.println("int: "+intValue);System.out.println("short: "+shortValue);System.out.println("byte: "+byteValue);// 데이터 손실 예시intbigNumber=1000;bytesmallByte=(byte)bigNumber;System.out.println("1000을 byte로 변환: "+smallByte);// -24 (데이터 손실)}}
publicclassVariableScope{// 클래스 레벨 변수 (전역 변수)staticintglobalVariable=100;publicstaticvoidmain(String[]args){// 메서드 레벨 변수 (지역 변수)intlocalVariable=200;System.out.println("전역 변수: "+globalVariable);System.out.println("지역 변수: "+localVariable);// 블록 레벨 스코프if(true){intblockVariable=300;System.out.println("블록 변수: "+blockVariable);System.out.println("지역 변수 접근: "+localVariable);System.out.println("전역 변수 접근: "+globalVariable);}// blockVariable은 여기서 접근 불가// System.out.println(blockVariable); // 컴파일 에러}}
publicclassVariableSwap{publicstaticvoidmain(String[]args){inta=10;intb=20;System.out.println("교환 전: a="+a+", b="+b);// 방법 1: 임시 변수 사용inttemp=a;a=b;b=temp;System.out.println("교환 후: a="+a+", b="+b);// 방법 2: 수학적 방법 (오버플로우 주의)a=a+b;// a = 30b=a-b;// b = 10a=a-b;// a = 20System.out.println("다시 교환 후: a="+a+", b="+b);}}
publicclassTemperatureConverter{publicstaticvoidmain(String[]args){// 상수 정의finaldoubleCELSIUS_TO_FAHRENHEIT_RATIO=9.0/5.0;finalintFAHRENHEIT_OFFSET=32;// 섭씨 온도doublecelsius=25.0;// 화씨로 변환: F = C * 9/5 + 32doublefahrenheit=celsius*CELSIUS_TO_FAHRENHEIT_RATIO+FAHRENHEIT_OFFSET;System.out.println("섭씨 "+celsius+"도는 화씨 "+fahrenheit+"도입니다.");// 화씨를 섭씨로 변환: C = (F - 32) * 5/9doublebackToCelsius=(fahrenheit-FAHRENHEIT_OFFSET)/CELSIUS_TO_FAHRENHEIT_RATIO;System.out.println("검증: 화씨 "+fahrenheit+"도는 섭씨 "+backToCelsius+"도입니다.");}}
#11. 디버깅과 변수 값 확인
1) println을 활용한 디버깅
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
publicclassDebuggingWithPrint{publicstaticvoidmain(String[]args){intx=10;inty=20;System.out.println("계산 시작");System.out.println("x = "+x);System.out.println("y = "+y);intsum=x+y;System.out.println("합계 계산 완료: "+sum);intproduct=x*y;System.out.println("곱셈 계산 완료: "+product);System.out.println("모든 계산 완료");}}
2) 변수 타입 확인
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
publicclassVariableTypeCheck{publicstaticvoidmain(String[]args){// 변수의 타입 정보 출력intintVar=100;doubledoubleVar=3.14;StringstringVar="Hello";booleanboolVar=true;System.out.println("intVar의 클래스: "+((Object)intVar).getClass().getSimpleName());System.out.println("doubleVar의 클래스: "+((Object)doubleVar).getClass().getSimpleName());System.out.println("stringVar의 클래스: "+stringVar.getClass().getSimpleName());System.out.println("boolVar의 클래스: "+((Object)boolVar).getClass().getSimpleName());// instanceof 연산자 (String의 경우)if(stringVarinstanceofString){System.out.println("stringVar는 String 타입입니다.");}}}
이제 Java 변수와 자료형에 대한 포괄적인 내용이 완성되었습니다. 기본 개념부터 실전 활용까지 다양한 예제와 함께 설명되어 있어 학습자가 단계적으로 이해할 수 있도록 구성했습니다.