The Debugging Chronicles : "코드의 미학"
Mentor JAVA - section02. 변수와 자료형 본문
01 데이터
컴퓨터 프로그램은 데이터(data)와 명령어(instruction)의 결합으로 구성된다.
데이터는 실제적인 값(value)을 의미하는 데 숫자, 문자와 같은 단순 데이터부터 사진, 영상 등의 복합데이터까지 있다.
데이터는 정확하고 언제든지 수정할 수 있어야하며, 사용 목적에 따라 다른 형태로 가공할 수 있어야 한다.
이러한 데이터는 컴퓨터의 메모리에 저장된다.
1. 출력문
System.out.print() :괄호 안의 내용을 출력합니다. -> 문자열로 인식
System.out.pritnln() : 괄호 안의 내용을 출력하고 행을 바꾼다. -> 문자열로 인식
System.out.printf() : 문자열을 서식 문자를 이용해 형식화된 내용으로 출력한다.
System.out.printf() 출력문은 값의 자료형에 따라 서식 문자를 이용해 출력하는 데이터의 형식을 지정한다.
- 서식 문자
서식문자 | 출력 형태 |
%d | 정수(10진수) |
%o | 정수(8진수) |
%x | 정수(16진수) |
%f | 실수 |
%e | 지수(e표기 기반) |
%g | 출력 대상에 따라 %e 또는 %f 형태로 출력 |
%s | 문자열 |
%c | 문자 |
%nd | n칸 만큼 확보한 후 오른쪽 정렬하여 출력한다 |
%.nf | 소수점 아래 n번째 자리까지 출력(반올림) |
package section02;
public class Print01{
public static void main(String[] args){
System.out.pirntf("저는 대학교 %d학년에 재학중입니다!",3);
}
}
저는 대학교 3학년에 재학중입니다! 가 출력된다.
package section02;
public class Print02{
Public static void main(String[] args){
System.out.printf("%d은 첫번째, %f는 두번째, %s은 세번째", 1, 2.0, "셋");
}
}
1은 첫번째, 2.000000은 두번째, 셋은 세번째 가 출력된다.
02. 변수(variable)
1. 변수
컴퓨터는 프로그램을 실행하는데 필요한 것들을 미리 올려놓고 사용하는 저장 공간이 있다.
우리는 그 공간을 메모리라고 부른다.
메모리에 값을 저장하기 위해 할당해 놓은 특정 공간을 변수라고 한다.
2. 변수 선언하기
변수를 사용하기 위해서는 먼저 변수를 선언해야한다.
변수를 선언하려면 메모리에 두가지 정보가 필요하다.
첫번째 변수에 담을 데이터의 형태
두번째 변수의 이름
변수에는 다양한 자료형을 담을 수 있다
알파벳, 정수, 실수, 문자열까지 담을 수 있는 자료형을 제공
package section02;
public class Variable{
public static void main(String[] args){
String name ; //무바열 변수 name을 선언
int age ; // 정수형 변수 age을 선언
char bloodTyoe; // 알파벳(문자1개) 변수 bloodType을 선언
}
}
3. 변수이름 정하기
제약조건 | 예시 |
영어 대소문자 구분 | Name 과 name은 서로 다른 변수 |
첫 글자는 숫자로 시작할 수 없으며, 일반적으로 영어 소문자로 시작 |
top10은 사용할 수 있으나, 10top은 사용할 수 없음 |
특수문자 '$', '_'만 사용 가능 | $dallar는 사용할 수 있으나, #Sarp는 사용할 수 없음 |
자바 예약어(키워드)는 사용 불가능 | Ture 는 사용할 수 있으나, true는 예약어라 사용할 수 없음 |
- 카멜 표기법
예)userName, phoneNumber
-팟홀 표기법
예) user_name, phone_numer
-파스칼 표기법
단어의 첫 글자 를 대문자로 시작
- 헝가리언 표기법
변수명 앞에 자료형을 붙여 표기
-스테이크 표기법
모두 소문자로 작성하되 단어 간의 구분을 언더바로 표기
4. 변수에 데이터 입력하기
변수에 데이터를 입력, 저장하는 방법은 대입 연산자(=)를 사용해서 한다
수학에서는 오른쪽과 왼쪽이 같다
프로그래밍에서는 오른쪽 값을 왼쪽에 대입한다.
package seciton02;
public class EX02_07{
public static void main(Strign[] args){
int studnetAge; // 학생의 나이를 저장할 수 있는 변수 선언
studnetAge = 20; // 변수에 값을 대입(저장)
System.out.println(StudentAge); // 20
}
}
'초기화'
변수를 선언하고 처으으로 값을 대입하는 것
int myAge =20;
정수를 담을 수 이쓴ㄴ 변수 myAge에 20이 저장
int yourAge = myAge;
myAge 에 저장된 '20'이 복사되어 yourAge에 저장
===> 변수를 이용해서 또 다른 변수에 데이터를 복사
package section02;
public clas EX02_10{
public static void main(String[] args){
int myAge = 20;
int yourAge = 30;
int tempAge;
tempAge = myAge; // 1.myAge에 저장된 데이터를 tempAge에 복사해둔다
myAge = yourAge; // 2.myAge에 yourAge의 데이터를 복사한다
yourAge = tempAge; // 3.tempAge에 저장해둔 myAge 데이터를 yourAge에 저장한다.
System.out.println(myAge); // 30
system.out.println(yourAge); //20
}
}
5. 변수의 사용 범위
모든 변수는 선언되는 중괄호{}안에서만 사용할 수 있다.
변수를 어디에 선언하느냐에 따라 변수의 '사용 범위'가 정해진다.
03. 자료형 (Data Type)
변수에 들어갈 자료형을 지정한다.
자료형(data tyoe)은 자바 언어가 처리할 수 있는 데이터의 종류를 의미한다.
모든 변수에는 자료형이 존재하며 자료형에 따라 저장할 수 있는 값의 형태와 크기가 정해진다.
- 기본 자료형(primitive type) : 실제 데이터 값을 저장한다. 정수, 실수, 타입으로 분류된 8개의 자료형이 있다. 각 각 저장 크기가 다르며 기본값이 정해진다
- 참조 자료형(reference type): 데이터가 저장되어 있는 메모리 번지를 저장한다. 기본 자료형을 제외한 나머지 사용자 정의 자료형을 말하며, 기본값이 정해져 있지 않기 때문에 null값이 존재
1. 기본 자료형 (primitive type)
분류 | 종류 |
정수형 | byte, short,int,long |
실수형 | float, double |
문자형 | char |
논리형 | boolean |
2. 정수형 byte, short, int, long
- 정수를 표현하는 byte형
byte형은 정수형 중에서도 가장 작은 범위로 8bit(1byte)의 공간이 할당되며 256개의 숫자를 저장할 수 있다
표현 범위는 -128 ~ 127
- 정수를 표현하는 short형
2byte, 즉 16bit를 저장할 수 있다
표현 범위는 -32,768 ~ 32,767
- 정수를 표현하는 int형
integer(정수)의 약자
4byte(32bit)의 크기를 가진 자료형으로 가장 많이 표현할 때 가장 많이 사용하는 자료형
표현 범위 - 2,147,483,648 ~ 2,147,483,647
- 정수를 표현하는 long형
정수를 표현하는 가장 큰 자료형
8byte(64bit)
int형의 허용 범위를 초과하는 경우
저장하는 값의 마지막에 식별자인 대문자'L'이나 소문자 'l'을 붙여 long형 임을 컴파일러에게 알려줘야 한다
long num = 2147483658 L;
3.실수형 float, double
-실수를 표현하는 float형
4byte(32bit) 부동 소수점 형식으로 소수점 7자리까지 표현
무한대의 값을 저장
대문자 'F'나 소문자'f'를 숫자 뒤에 붙여서 float 형임을 알려줘야한다.
float num= 100.0f;
-실수를 표현하는 double형
64bit(8byte)부동 소수점 형식으로 소수점 15자리까지 표현
double형은 float형에 비해 정밀도가 2배 높다 하여 붙여진 이름
정밀도가 높아 좀 더 정밀하게 실수를 표현할 수 있어 자바에서는 double형을 기본으로 사용
4.문자형 char
컴퓨터는 2진수 밖에 인식하지 못하므로
문자를 사용하기 위해서는 컴퓨터 내부에서
문자에 맞는 특정 정수 값으로 저장
문자형은 이 문자들을 저장할 수 있는 자료형
문자형은 각 문자를 저장할 수 있는 char가 유일
작은 따옴표 '' 로 감싸고 char 변수에 대입
char ga = '가';
char na = '나';
char alphabet1 = 'A';
char alphabet2 = 'B';
char형은 문자 그대로 저장하는 것이 아니라 , 유니코드 라는 숫자로 값을 변환하여 저장
그래서 우리는 char형을 문자형이기 전에, 정수형이라고 표현
package section02;
public class EX02_16{
public static void main(String[] args){
int ga = '가'; // 유니코드(정수)65 - 'A' 와 매핑됨
int na = '나';
int alphabet1 = 'A';
int alphabet2 = 'B';
System.out.println(ga); // 44032
System.out.println(na); //45208
System.out.println(alphabet1); //65
System.out.println(alphabet2); //66
}
}
5.논리형 boolean
-ture와 false 데이터를 저장하는 boolean형
0과 1로만 표현할 수 있기 때문에 실제 필요한 데이터는 1bit지만
데이터를 다루는 최소 크기인 1byte로 값을 저장
04. 참조 자료형
기본 자료형
프로그램이 실행될 때 사용되는 메모리에 직접 공간을 할당받고
그 할당 받은 공간에 데이터를 그대로 저장하는 것
참조 자료형
메모리상에 데이터가 저장된 주소를 저장하기 위한 공간으로,
대표적으로 문자열을 저장하는 String이라는 자료형이 있다
개발자가 직접 만들어 추가 할 수 있는 자료형으로
그 수가 정해져 있지 않다.
참조 자료형의 대표적인 형태로는 배열, 클래스, 인터페이스가 있다.
프로그램을 실행할 때 필요한 메모리는
stack 공간과 heap 공간이 있다.
기본 자료형은 stack에 자리를 할당 받고 데이터를 저장
참조 자료형은 heap에 데이터를 저장하고 그 주소를 stack에 저장
-참조 자료형 String
String 변수를 선언할 때, 단순하게 'apple'이라고 표현했던 구문은 함축적인 구문이다.
String a = "apple";
String b = "banana";
완전한 구문으로는
String a = new String("apple");
String b = new String("banana");
'a라는 "객체"를 생성하였다'라고 표현
05. 형 변환
1.형 변환
자료형을 다른 자료형으로 변환하는 것
모든 연산은 기본적으로 같은 자료형끼리만 수행 할 수 있다
서로 다른 자료형의 연산을 수행하기 위해서는 같은 자료형으로 변환해야한다
package section02;
public class EX02_21{
public static void main(String[] args){
int num1 = 11;
double num2 = 3.14;
double num1Change = (double)num1;
System.out.println("num1 : " + num1); // num1 : 11
System.out.println("num1Change : " + num1); //num1Change : 11.0
System.out.println("num1Change :" + num2); //14.14
System.out.println((int)1.23); //1
}
}
형 변환은 숫자를 담을 수 있는 기본 자료형 간에만 가능
기본 자료형에서는 boolea만 제외하고 서로 형변환이 가능
- 정수형 간의 형 변환
package section02;
public class EX02_22{
public static void main(String[] args){
int i1 = 10;
byte b1 = (byte)i1;
System.out.println(b1); //10
int i2 = 128;
byte b2 = (byte)i2;
System.out.println(b2);//-128
}
}
b2의 형변환을 살펴보면
128은 byte가 담을 수 있는 숫자의 해당 범위(-128~127)를 넘어선다
127을 넘어서면 다시 -128부토 넘은 만큼 숫자를 센다
-실수형 간의 형 변환
크기가 큰 자료형 double 에서 작은 자료형 float 으로 변환될 때
float 의 저장 범위를 넘어서는 값을 대입하면 무한대가 되거나 0이 된다
package section02;
public class EX02_23{
public static void main(String[] args){
double d1 = 1.0e100; // 1.0 x(10의 100승) - float의 최대 범위를 넘음
float f1 = (float)d1;
System.out.println(f1); // Infinity
double d2 = 1.0e-100;
float f2 = (float)d2; //1.0 x(10의 -100승) - float의 최대 범위를 넘음
System.out.println(f2); // 0.0
}
}
-실수형과 정수형 간의 형변환
From | To | 규칙 |
실수형 | 정수형 | 소수점 이하 값들은 버려짐 |
정수형 | 실수형 | 정수 뒤로 0이 붙음 단, int를 float로 변환했을 때 오차가 발생할 수 있다. - 정밀도 10자리에서 정밀도 7자리 |
package section02;
public class EX02_24{
public static void main(String[] args){
// 실수형 -> 정수형
double pie = 3.14;
int pieInt = (int)pie;
System.out.println(pieInt); // 3
// 정수형 -> 실수형(범위내)
int num = 100;
double numD = (double) num;
float numF = (float)100;
System.out.println(numD);//100.0
System.out.println(numF);//100.0
//정수형 -> 실수형(범위 밖)
int i = 999999999;
float f = (float)i;
System.out.println(f); // 1.0E8
}
}
2. 자동 형 변환(Promotion)
- 크기가 작은 자료형에서 큰 자료형으로 변환할때
-정수형이 실수형으로 변환될 때
기본 자료형을 크기 순으로 정리하면,
정수형 실수형
byte(1byte) - > short (2byte) -> int(4byte) -> long(byte) -> float(4byte) -> double(8byte)
char(2byte) -> int(4byte) -> long(byte) -> float(4byte) -> double(8byte)
만약 순서에서 역방향으로 형 변환이 필요할 경우에는 개발자가 직접 형 변환을 해야한다.
package section02;
public class EX02_25{
public static void main(String[] args){
int num1 = 14;
double num2 = 3.14;
int num4 = (int)num2;
System.out.println(num4); // 3
}
}
package section02;
public class EX02_26{
public static void main(String[] args){
int i = 100;
char c = 'a';
int j = c;
double d = i;
System.out.println("int형 변수 j의 값 : " + j); //97
System.out.println("double형 변수 d의 값 : " + d);//100.0
}
}
3. 강제 형 변환(Casting)
크기가 큰 자료형에서 작은 자료형으로 옮길 때 데이터의 손실이 발생할 수도 있고 아닐 수도 있다
package section02;
public class EX02_27{
public static void main(String[] args){
int i = 10;
byte b = (byte) i;
System.out.println("[int -> byte] i의 값 : " + i + " b의 값 : " + b); // 10 10
int j = 1000;
byte c = (byte)j; //강제 형 변환을 하지 않으면 에러 발생
System.out.println("[int -> byte] j의 값 : "+ j + "c의 값 :" + c); // 1000 -24
}
}
'JAVA > Mentor JAVA' 카테고리의 다른 글
Mentor JAVA - section06. 배열 (0) | 2024.07.17 |
---|---|
Mentor JAVA - section05. 제어문-2 (0) | 2024.07.16 |
Mentor JAVA - section04. 제어문-1 (0) | 2024.07.15 |
Mentor JAVA - section03. 연산자 (0) | 2024.07.14 |
Mentor JAVA - section01. 자바 프로그래밍의 기본 (0) | 2024.07.12 |