The Debugging Chronicles : "코드의 미학"

Mentor JAVA - section02. 변수와 자료형 본문

JAVA/Mentor JAVA

Mentor JAVA - section02. 변수와 자료형

sweetseonah1004 2024. 7. 13. 13:05

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
        
    }
}