본문 바로가기
[JAVA]/[자바 기초]

[자바 기초] 변수와 자료형

by 북방바다코끼리표범 2023. 7. 25.

복습

https://shins99.tistory.com/2

 

[자바 기초] 자바란 무엇인가? - (프로그램 설치부터 기초 cs상식)

학습 노트 💡 반드시 기억해야 될 것 인지하지 않고 반복하지 않으면 프로그래밍 실력은 늘지 않는다. 자바 처음 학습에 앞서 💡 학습 목표 1. 어떤 부분을 학습하고 있는지 반드시 인지하기 프

shins99.tistory.com

 


변수와 자료형

 💡 학습 목표

data 라는 의미를 이해하자

1. 변수란 무엇일까?
2. 변수에 선언, 초기화, 선언과 동시에 초기화에 대해 알아보자

data란? 

더보기
  • 사실을 나타내는 수치입니다.  기온, 습도, 날씨, 문자, 문자열 등등 각각의 수치들이  데이터가 됩니다. 

 

변수(Variable)란?

  • 값(Value)을 저장할 수 있는 메모리의 공간을 의미합니다.
  • 이름에서 유추할 수 있듯이 변수는 말 그대로 '변하는 수' 입니다.

 

변수는 언제 쓰나요?

  • 프로그램에서는 항상 변하는 값을 나타낼 필요가 있음 ( ex. 학생의 성적, 합계, 게임의 레벨, 회원 주소 등등...)
  • 표현하려는 수에 맞는 데이타 타입(자료형)을 이용하여 변수를 선언
public class Variable{

	public static void main(String[] args){
		// 선언
		int age;
        int count;
		// 초기화
		age = 20;

		// 선언과 동시에 초기화
		int level = 10;
		
		
		// 화면에 출력 
		System.out.println(age);
		System.out.println(level);
		//System.out.println(count);

	}
}

 

변수의 이름 규칙

  • 대소문자가 구분되며 길이에 제한이 없다. 
     - Name과 name은 서로 다른 것으로 간주된다. 
  • 자바에서 사용하는 예약어는 사용할 수 없다.
    - while, break, for, if 
  • 자로 시작해서는 안 된다. 
    - top10은 허용하지만, 7up은 허용되지 않는다.
  • 특수문자는 '_',  '$'만을 허용한다. 

※ 예시코드

package ch01;

public class Variable {

	
	// <-- 주석 - 컴파일러가 무시 하는 코드 
	// 1. 자바에서 중괄호(블록)에 범위는 절대적이다. 
	
	// main 이란 : 프로그램에 시작 점 
	public static void main(String[] args) {
		
		// ** 변수를 사용하는 방법 ** 
		int age; // 문장에 끝은 세미콜론을 통해서 컴파일러에게 알려 주어야 한다. 
		int count; // <-- 변수 선언 - 메모리 공간만 일단 할당 해둔 상태 !! 
		
		
		age = 1; // 초기화 한다(값을 넣다) 
		// age2 = 10; 메모리 공간을 할당 해야 사용할 수 있다. age2 공간은 없는 상태 
		count = 100; // 100으로 초기화 
		
		// 화면에 xxx를 출력 하라 ! 
		System.out.println(age); // 개발자 도구에서 만들어 둔 명령어 
		// 단축키 ctrl + f11 (실행) 
		System.out.println(count);
		
		// 변수란 메모리 공간도 의미 하지만 변하는 수 이기도 하다. 
		age = 500; 
		// int age; 먼저 할당한 변수 이름을 똑 같이 하나더 만들 수 없다. (공간 할당 의미) 
		
		System.out.println(age);
		
		// 변수에 선언과 초기화 (한번에 사용) 
		int myAge = 30;
		System.out.println(myAge);
		System.out.println("====================");
		// 화면에 바로 숫자도 입력, 문자도 바로 입력 할 수 있다. 
		System.out.println(700);
		System.out.println("문자열");
		
	} // end of main 

} // end of class

코드 복습하기

package ex_01;

// 자바 파일은 무조건 대문자로 시작
// 클래스 이름 첫 글자도 대문자로 시작
public class Variable{

	// 코드의 시작점
	public static void main(String[] args){

		String a1 = "자바";
		int a = 1313;
		double b = 14.5;
		float c = 134;
		long d = 12312421241212414L;
		System.out.println(a);
		System.out.println(b);
		System.out.println(c);
		System.out.println(a + b);
		System.out.println(a + c + d + a1);

		System.out.println("=====================");

		System.out.print("가나다라마바사아자차카타파하");
		System.out.println("파타카차자아사바마라다나가");
		System.out.println("sdfgsfdssd \n sdgsdgsdgsd");

	} // end of main

} // end of class

// ctrl + shift + f = 자동정렬

자료형(data type)

변수를 선언하면 해당되는 자료형의 크기 만큼 메모리가 할당

변수는 할당된 메모리를 가리키는 이름 int level = 10;

// 4바이트 정수형 메모리가 level 이라는 이름으로 할당 됨

 

기본 자료형(primitive data type)의 종류와 크기

크기 정수형 문자형 실수형 논리형
1 byte byte - - boolean
2 byte short char - -
4 byte int - float -
8 byte long - double -

long

  • 8바이트 자료형
  • 숫자의 뒤에 알파벳 L 또는 l 을 써서 long 형임을 표시 함
  • 예) int num = 12345678900; // 오류  
  • long lnum = 12345678900; //오류
  •  long lnumber = 12345678900L; // ok
// 2. 정수 22억을 name2 이름으로 변수에 담아 보세요
		
		long name2 = 2200000000L;
  • :Long 데이터 타입을 다룰 때 R value 쪽에는 접미사를 사용해야 한다.

실수 자료형의 종류와 크기

 

float형과 double형 사용방법

public class DoubleTest {

	public static void main(String[] args) {
		double dnum = 3.14;
		float fnum = 3.14F;

		System.out.println(dnum);
		System.out.println(fnum);
	}
}

문자 자료형

문자를 저장하기 위한 변수를 선언할 때 사용.

char 타입의 변수는 단 하나의 문자만을 저장할 수 있다.

char ch = 'A'; // 문자 'A'를 char 타입의 변수 ch에 저장

사실은 문자의 유니코드(정수)가 저장된다.

어떤 문자를 컴퓨터 내부에서 표현하기 위해 특정 정수 값을 정의해 둔다.

A 는 65

 

문자세트 : 각 문자를 얼마로 표현할 것인지 코드 값을 모아둔 것을 문자세트(charater set)라 함

(ex. ASKII, euc-kr, utf-8, utf-16)

자바는 문자를 나타내기 위해 전세계 표준인 UNICODE를 사용

utf-16 인코딩을 사용 (모든 문자를 2바이트로 표시)

문자형 변수 선언과 사용하기

문자를 위한 데이터 타입 char ch1 = 'A'; ( 문자와 문자열은 완전 다른 타입 입니다 "ABCD" )

내부적으로 숫자료 표현되므로 숫자를 넣어도 문자가 출력될 수 있음

char ch2 = 65;

public class CharacterTest {

	public static void main(String[] args) {

		char ch1 = 'A';
		System.out.println(ch1);
		System.out.println((int) ch1);

		char ch2 = 66;
		System.out.println(ch2);
		System.out.println((int) ch2);

		char ch3 = 67;
		System.out.println(ch3);
		System.out.println((int) ch3);

		// char ch4 = -68; 음수는 대입 불가

		char ch5 = '한';
		System.out.println((int) ch5);

	}

}

참고

● character set: 문자를 숫자로 변환한 값의 세트 encoding: 문자가 숫자로 변환되는 것

● decoding: 숫자에서 다시 문자로 변환되는 것

● ASKII code: 알파벳과 숫자 특수 문자등을 1바이트에 표현하는데 사용하는 문자세트

● UNICODE: 전 세계 표준으로 만든 문자 세트

● UTF-8: 1바이트에서 4바이트까지 다양하게 문자를 표현할 수 있음

● UTF-16: 2바이트로 문자를 표현

논리형 자료형

  • true(참), false(거짓) 두 가지만 나타냄
  • 1바이트를 사용 함
  • 값이 존재하는지, 결과가 참인지 거짓인지등을 표현
  • 자바에서는 대소문자가 구별되기 때문에 TRUE와 true는 다른 것으로 간주된다는 것에 주의 합시다.
public class BooleanTest {

	public static void main(String[] args) {
		
		boolean isMarried = true; 
		System.out.println(isMarried);
	}

}

32비트를 기준으로 한 자료형의 크기 및 범위.

32 비트를 초과하는 숫자는 long 자료형으로 처리 (+,- 약 21억)

(다른 OS(16비트, 64비트)나 컴파일러에서 자료형의 크기가 조금씩 다르다는점 기억해 두자.)

구분 자료형 크기 범위
기본형 viod - -
문자형 (signed) char 1 byte -128 ~ 127
unsigned char 1 byte 0 ~ 255
wchar_t 2 byte 0 ~ 65,535
정수형 bool 1 byte 0 ~ 1
(signed) short (int) 2 byte -32,768 ~ 32,767
unsigned short (int) 4 byte 0 ~ 65,535
(signed) int 4 byte -2,147,483,648 ~ 2,147,483,647
unsigned int 4 byte 0 ~ 4,294,967,295
(signed) long (int) 4 byte -2,147,483,648 ~ 2,147,483,647
unsigned long (int) 4 byte 0 ~ 4,294,967,295
__int8 1 byte -128 ~ 127
__int16 2 byte -32,768 ~ 32,767
__int32 4 byte -2,147,483,648 ~ 2,147,483,647
__int64 8 byte -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
실수형 float 4 byte 3.4E-38(-3.4*10^38) ~ 3.4E+38(3.4*10^38) (7digits)
(long) double 8 byte 1.79E-308(-1.79*10^308) ~ 1.79E+308(1.79*10^308) (15digits)

 

 

char type

package ch01;

public class DataType2 {

	public static void main(String[] args) {
		
		// 변수에 선언 
		char name; // 2byte 공간에 하나의 문자를 담아 둘 수 있다. 
		char a; 
		char initial; 
		
		// 값을 넣다 
		name = 'A'; // 홑 따옴표를 사용해야 한다. 하나의 문자만 담을 수 있다.
		// name = 'AB'; 불가능   
		
		// 문제 
		// 1. name 변수에 값을 화면에 출력 하시오 
		System.out.println(name);
		// 2. 문자 H 를 화면에 출력 하시오 
		System.out.println('H');
		// 3. 문자 b 를 화면에 출력 하시오 
		System.out.println('b');
	}
}
package ch01;

public class CharacterTest {

	public static void main(String[] args) {
		
		char ch1 = '가';
		System.out.println(ch1);
		System.out.println((int)ch1);
		System.out.println((int)'가');
		
		// 문제 1
		// 대문자 A는 정수값 얼마 인가?
		System.out.println((int)'A');
		
		// 소문자 a는 정수값 얼마 인가?
		System.out.println((int)'a');
		
		// 주의 char 데이터 타입에는 음수값을 대입 할 수 없다. (양수만 사용)
		char ch2 = 97;
		System.out.println(ch2);
		
		// 문제 2
		// 개발자 라는 단어는 한글자 한글자 정수값이 얼마인지 알아보자.
		System.out.println((int)'개' + '발' + '자');
		System.out.println((int)'개');
		System.out.println((int)'발');
		System.out.println((int)'자');
		
		// 본인이 알고 싶은 단어에 정수값이 얼마인지 알아보자.
		System.out.println((int)'배' + '고' + '파');
		System.out.println((int)'배');
		System.out.println((int)'고');
		System.out.println((int)'파');
		
	} // end of main

} // end of class

인코딩과 디코딩의 개념

 

인코딩(encoding)이란

정해진 규칙에 따라 코드화, 암호화, 부호화 하는 것을 의미하며 인코딩을 하는 이유는 표준화, 보안, 저장 공간 절약 등을 위함입니다.


문자 인코딩

문자 인코딩은'문자'를'bytes,바이트'로 인코딩 하는것을 말합니다.

 

문자 인코딩의 종류

HTML 인코딩
HTML 인코딩은 HTML 페이지를 올바르게 나타내기 위해서 사용되는 인코딩

URL 인코딩
URL인코딩은 인터넷을 통해 전송될 수 있는 포멧으로 문자를 변환시키는 인코딩 방식입니다. ASCII character-set을 사용해 인터넷으로 URL을 보내는데 사용됩니다. URL에 한글이 있으면 에러가 나는 경우가 있어 URL인코딩을 사용해 글자를 인코딩해주면 %~퍼센트 기호+16진수 숫자로 인코딩됩니다. 

UNICODE 인코딩
유니코드 인코딩은 많은 인코딩 방법 중 기준이되는 인코딩이라고 보면 됩니다. 전 세계 대부분의 언어를 인코딩할 수 있고 표현하고 다룰 수 있습니다. 유니콛는 글자를 나타내기 위해 8,16,32비트를 사용하고 그 중 UTF-8이 가장 많이 알고있는 인코딩 방식입니다.

ASCII 코드
컴퓨터 공학을 전공하면 처음으로 배우는 코드 중 하나로, 로마자 알파뱃과 아라비아숫자, 그리고 일부 특수문자들을 1byte로 표현할 수 있는 간단한 코드


디코딩이란?

인코딩된 코드를 사람이 인지할 수 있는 문자로 변환하는 것을 디코딩이라고 합니다.


연습 문제

package ch01;

public class DataTypeTest {

	public static void main(String[] args) {

		// 1. 정수 550을 name1 이름으로 변수에 담아 보세요.
		
		int name1 = 550;

		// 2. 정수 22억을 name2 이름으로 변수에 담아 보세요
		
		long name2 = 2200000000L;
		
		// 3. 문자 A를 name3 이름으로 담아 보세요
		
		char name3 = 'A';

		// 4. 실수 float 타입으로 0.12345678 을 name4 이름으로 담아 보세요
		
		float name4 = 0.12345678F;
		
		// --> 접미사를 알고 있는가? (연산단위)
		 // 강제형변환

		// 5. 실수 double 타입으로 200.0012을 name5 이름으로 담아 보세요
		
		double name5 = 200.0012;
		
		// 6. 논리 자료형 isOk 라는 이름으로 변수를 선언해 보세요.
		
		boolean isOk;

		// 7. isOk 변수에 리터럴 값 false 로 초기화 해보세요.
		
		isOk = false;
		
		// 8. isOk 변수 값을 true로 변경해 보세요
		
		isOk = true;
		
		// 9. 변수란 무엇인지 서술해 보세요
		
		// 변하는 수. 값(주소값)을 자장할 수 있는 메모리 공간을 의미.

		// 10. 기본 데이터 타입 종류 8가지와 크기를 서술해 주세요.
		
//		 정수형 (byte, short, int, long) 1, 2, 4, 8
//		 실수형 (float, double) 4byte, 8byte
//		 문자형 (char) - 2
//		 논리형 (boolean) - 1

	} // end of main

} // end of class