본문 바로가기

2023.11.21-2024.05.31

1130수업8일차2(JAVA)

02.변수와 타입

02-1 변수

 

*변수 : 값을 저장할 수 있는 메모리에 붙이는 이름,

메모리에 값을 저장하고 싶다면 변수를 선언하고 변수에 값을 지정하면 됩니다.

 

※변수 선언 : 변수에 어떤 타입의 데이터를 저장할 것인지 그리고 변수 이름이 무엇인지를 결정하는 것.

 

타입        변수이름

int            age;     // 정수(int)를 저장할 수 있는 age 변수 선언

double     value;  // 실수(double)를 저장할 수 있는 value 변수 선언

 

 

*변수 이름 명명 규칙

-첫번째 글자는 문자이거나 '$','_' 이어야 하고 숫자로 시작할 수 없다.(필수)

-영어 대소문자를 구분한다.(필수)

-첫 문자는 영어 소문자로 시작하되, 다른 단어가 붙을 경우 첫 문자를 대문자로 한다.(관례)

-문자 수(길이)의 제한은 없다.

-자바 예약어는 사용할 수 없다.(필수)

-예약어는 변수 이름으로 사용 할 수 없다.

 

※값 저장

*값을 저장할 때에는 대입 연산자(=)를 사용한다.

*변수 초기화 : 변수에 최초로 값이 저장될 때 변수가 생성 되는 것

 

package sec01.exam01;

 

public class VariableInitializationExample {

 

public static void main(String[] args) {

//변수 value 선언

int value;

 

//변수 value 값을 읽고 10을 더하는 산술 연산을 수행

//연산의 결과값을 변수 result의 초기값으로 저장

int result = value + 10;

 

//변수 result 값을 읽고 콘솔에 출력

System.out.println(result);

}

}

-> 초기화되지 않은 변수는 아직 메모리 번지 정보를 가지고 있지 않으므로 변수를 통해 메모리 값을 읽을 수 없다.

 

 

※변수 사용 : 변수의 값을 읽거나 변경하는 것

변수는 출력문이나 연산식 내부에 저장된 값을 출력하거나 연산할 때 사용한다.

package sec01.exam02;

 

public class VariableUseExample {

 

public static void main(String[] args) {

int hour = 3;

int minute = 5;

System.out.println(hour + "시간" + minute + "분");

 

int totalMinute = (hour*60) + minute;

System.out.println("총" + totalMinute + "분");

 

}

 

}

3시간5분

총185분

 

 

*변수 값 교환 : 변수는 또 다른 변수에 대입하여 값을 복사 할 수 있다,

두 변수의 값을 교환하기 위해서 새로운 변수 temp를 선언한다.

package sec01.exam03;

 

public class VariableExchangeExample {

 

public static void main(String[] args) {

int x = 3;

int y = 5;

System.out.println("x:" + x + ", y:" + y);

 

int temp = x;

x=y;

y=temp;

System.out.println("x:"+x+", y:"+y);

 

}

}

x:3, y:5

x:5, y:3

 

※변수 사용 범위

*로컬 변수 : 메소드 블록 내에서 선언된 변수, 메소드 실행이 끝나면 메모리에서 자동으로 없어진다.

변수는 자신이 선언된 위치로부터 자신이 속한 블록 내부에서만 사용할 수 있다.

 

-변수가 어떤 범위에서 사용될 것인지를 생각하고, 선언 위치를 결정해야 한다.

-메소드 블록 전체에서 사용하고 싶다면 메소드 블록 첫머리에 선언한다.

-특정 블록 내부에서만 사용된다면 해당 블록 내에 선언한다.

 

*변수의 사용범위

package sec01.exam04;

 

public class VeriableScopeExample {

 

public static void main(String[] args) {

int v1 = 15;

if(v1>10) {

int v2;

v2 = v1-10;

}

int v3 = v1 + v2 + 5;//v2 변수를 사용할 수 없기 때문에 컴파일 에러 발생

}

}

Exception in thread "main" java.lang.Error: Unresolved compilation problem:

v2 cannot be resolved to a variable

 

at chap02/sec01.exam04.VeriableScopeExample.main(VeriableScopeExample.java:11)

 

변수 v2가 선언된 곳은 if 블록 내부, if 블록 바깥에서는 사용할 수 없다.

 

 

02-2기본타입

※정수 타입

 

타입 메모리 사용크기 저장되는 값의 허용 범위
byte 1byte 8bit -128~127
short  2byte 16bit -32,768~32,767
char    2byte 16bit 0~65535(유니코드)
int    4byte 32bit -2,147,483,648~2,147,483,647
long
8byte 64bit -9,223,372,036,854,775,808~9,223,372,036,854,775,807

 

 

 

*정수 리터럴 : 정수 타입으로 선언된 변수에는 정수 리터럴을 대입해서 정수를 저장할 수 있다.

package sec02.exam01;

 

public class IntegerLiteralExample {

 

public static void main(String[] args) {

int var1 = 0b1011;

int var2 = 0206;

int var3 = 365;

int var4 = 0xb3;

 

System.out.println("var1: " + var1);

System.out.println("var2: " + var2);

System.out.println("var3: " + var3);

System.out.println("var4: " + var4);

}

}

var1: 11

var2: 134

var3: 365

var4: 179

 

 

*byte  타입변수 : -128~127

package sec02.exam02;

 

public class ByteExample {

 

public static void main(String[] args) {

byte var1 = -128;

byte var2 = -30;

byte var3 = 0;

byte var4 = 30;

byte var5 = 127;

byte var6 = 128;//컴파일 에러

 

System.out.println(var1);

System.out.println(var2);

System.out.println(var3);

System.out.println(var4);

System.out.println(var5);

 

}

}

 

*long 타입 변수 : 정수 리터럴 뒤에 소문자 l이나 대문자 L을 붙인다.

package sec02.exam03;

 

public class LongExample {

 

public static void main(String[] args) {

long var1 = 10;

long var2 = 20L;

//long var3 = 1000000000000 >컴파일 에러

long var4 = 1000000000000L;

 

System.out.println(var1);

System.out.println(var2);

System.out.println(var4);

 

}

}

10

20

1000000000000

 

*char 타입

문자 리터럴 : 하나의 문자를 작은따옴표(')로 감싼 것, 유니코드로 변환되어 저장

package sec02.exam04;

 

public class CharExample {

 

public static void main(String[] args) {

char c1='A';

char c2=65;

char c3='\u0041';

char c4='가';

char c5=44032;

char c6='\uac00';

 

System.out.println(c1);

System.out.println(c2);

System.out.println(c3);

System.out.println(c4);

System.out.println(c5);

System.out.println(c6);

 

 

}

}

A

A

A

 

*String

문자열 : 큰따옴표(")로 감싼 문자들

String 타입은 기본 타입이 아닌 클래스 타입이다.

package sec02.exam05;

 

public class StringExample {

 

public static void main(String[] args) {

String name = "홍길동";

String job = "프로그래머";

 

System.out.println(name);

System.out.println(job);

System.out.println(name+job);

 

}

 

}

홍길동

프로그래머

홍길동프로그래머

 

*이스케이프 문자 : 역슬래시(\)가 붙은 문자, 문자열 내부에 특정 문자를 포함시킬 수 있다.

이스케이프 문자 출력 용도
\t 탭만큼 띄움
\n 줄 바꿈(라인 피드)
\r 캐리지리턴
\" "출력
\' '출력
\\ \출력
\u16진수 16진수 유니코드에 해당하는 문자 출력

 

package sec02.exam06;

 

public class EscapeExample {

 

public static void main(String[] args) {

System.out.println("번호\t이름\t직업");

System.out.println("행 단위 출력\n");

System.out.println("행 단위 출력\n");

System.out.println("우리는 \"개발자\" 입니다.");

System.out.println("봄\\여름\\가을\\겨울");

 

}

}

번호 이름 직업

행 단위 출력

 

행 단위 출력

 

우리는 "개발자" 입니다.

봄\여름\가을\겨울

 

※실수 타입

타입 메모리 사용 크기 저장되는 값의 허용 범위(양수 기준) 정밀도(소수점 이하 자리)
float 4byte 32bit   7자리
double 8byte 64bit   15자리

 

*float과 double 타입

package sec02.exam07;

 

public class FloatDoubleExam {

 

public static void main(String[] args) {

//실수값 저장

//float var1 = 3.14;

float var2 = 3.14f;

double var3 = 3.14;

 

//정밀도 테스트

float var4 = 0.1234567890123456789f;

double var5= 0.1234567890123456789;

 

System.out.println("var2: " + var2);

System.out.println("var3: " + var3);

System.out.println("var4: " + var4);

System.out.println("var5: " + var5);

 

//e 사용하기

double var6 = 3e6;

float var = 3e6F;

double var8 = 2e-3;

System.out.println("var6: " + var6);

String var7 = null;

System.out.println("var7: " + var7);

System.out.println("var8: " + var8);

}

}

 

※논리타입

 

package sec02.exam08;

 

public class BooleanExample {

 

public static void main(String[] args) {

// boolean stop= true;

// if(stop) {

// System.out.println("중지합니다.");

// } else {

// System.out.println("시작합니다.");

 

boolean start= false;

if(start) {

System.out.println("중지합니다.");

} else {

System.out.println("시작합니다.");

}

}

}


중지합니다.

 

boolean 타입 변수는 주로 두 가지 상태값에 따라 조건문과 제어문의 실행 흐름을 변경하는 데 사용한다.

 

 

※타입 변환

*자동 타입 변환: 자동으로 타입 변환이 일어나는 것,

값의 허용 범위가 작은 타입이 허용 범위가 큰 타입으로 저장될 때 발생

 

허용 범위 크기순

byte < short < int < long < float < double

 

package sec03.exam01;

 

public class PromotionExample {

 

private static char intValue;

 

public static void main(String[] args) {

//자동 타입 변환

byte byteValue = 10;

int intVaule = byteValue;

System.out.println("intValue");

 

char charValue = '가';

intValue = charValue;

System.out.println("가의 유니코드:" + intValue);

 

intVaule = 50;

long longVaule = intVaule;

System.out.println("longVaule:" + longVaule);

 

longVaule = 100;

float floatValue = longVaule;

System.out.println("floatValue:" + floatValue );

 

floatValue = 100.5F;

double doubleValue = floatValue;

System.out.println("doubleValue:" + doubleValue);

}

}

intValue

가의 유니코드:가

longVaule:50

floatValue:100.0

doubleValue:100.5

 

※강제 타입 변환

큰 허용 범위 타입은 작은 허용 범위 타입으로 자동 타입 변환될 수 없다.

하지만 큰 허용 범위 타입을 작은 허용 점위 타입으로 강제로 나눠서 저장하는 것을 강제 타입 변환(캐스팅)이라고 한다.

캐스팅 연산자 괄호()를 사용하는데, 괄호 안에 들어가는 타입은 나누는 단위이다.

 

*int타입은 byte 타입보다 더 큰 허용 범위를 가진다.

하지만 (byte)를 사용해서 강제 변환할 수 있다.

 

int intValue = 10;

byte byteValue = (byte) intValue; // 강제 타입 변환

 

*int 타입-> char 타입

 

int intValue = 65;

char charValue = (char) intValue;

System.out.println(charValue); //"A"가 출력

 

*실수 타입(float, double)-> 정수 타입(byte, short, int, long)

 

double doubleValue =3.14;

int intValue = (int) doubleValue; //intValue는 정수 부분인 3만 저장

 

package sec03.exam02;

 

public class CastingExample {

 

public static void main(String[] args) {

int intValue = 44032;

char charValue = (char) intValue;

System.out.println(charValue);

 

long longValue=500;

intValue=(int) longValue;

System.out.println(intValue);

 

double doubleValue = 3.14;

intValue = (int) doubleValue;

System.out.println(intValue );

}

}

500

3

 

 

'2023.11.21-2024.05.31' 카테고리의 다른 글

1205수업11일차(JAVA) - HelloWorld(1204 복습)  (1) 2023.12.05
1204수업10일차(JAVA)  (1) 2023.12.04
1130수업8일차1(JAVA)  (0) 2023.12.01
1129수업 7일차(JAVA)  (0) 2023.11.29
1129수업 7일차(오라클)  (0) 2023.11.29