Part 2. 자바의 변수와 자료형

Hyunsu·2023년 2월 6일
0

국비 교육

목록 보기
2/36
post-thumbnail

📝 목차

  1. 변수 (Variable)
  2. 자료형
  3. 상수와 문자열
  4. 형변환
  5. 변수와 메모리 구조
  6. 입출력 메소드

1. 변수

변수를 공부하기에 앞서 데이터 처리 과정에 대해 생각해보자.
프로그램을 실행할 때 사용할 값 (Data) 이 있다면 그 값은 먼저 메모리에 기록 되어야 한다.

프로그램은 키보드나 마우스 또는 파일과 네트워크와 DB 서버 등에서 값을 입력받으면 그 값은 입력 버퍼 에 들어간다.

이후 메모리 에 입력 값을 기록한 뒤 메모리에 기록된 값을 CPU 가 읽어 연산을 처리한다.

출력도 입력과 같은 원리이다. 계산된 결과 값을 메모리에 기록하면 그 값이 출력 버퍼 에 들어가고 이후 출력 장치를 통해 출력되는 것이다.

메모리에 값을 기록하고 지속적으로 사용하려면 변수를 만들어야 한다.

변수

메모리에 값을 저장하기 위한 공간

변수의 장점

  • 코드 작성 용이 및 코드 길이 감소
  • 가독성 향상
  • 재사용성의 증가
  • 유지보수 용이

변수의 명명 규칙

  1. 대소문자가 구분되며 길이 제한이 없다.
  2. 예약어를 사용하면 안 된다.
  3. 숫자로 시작하면 안 된다.
  4. 특수문자는 _ 와 $ 만 허용한다.
  5. 여러 단어 이름은 단어의 첫 글자를 대문자로 한다.
    단 첫 시작 글자는 소문자로 하는 것이 관례이다. (camel 표기법)

변수의 선언

// 정수형 데이터를 저장할 공간으로, 4byte를 메모리에 할당 후 그 공간을 number1 라고 부르겠다.
int number1;

2. 자료형

데이터 저장 단위

  • 비트 (bit) : 데이터의 최소 저장 단위로서 2진수 값 하나를 저장할 수 있는 메모리공간

  • 바이트 (byte) : 데이터 처리 또는 문자의 최소 단위로서 8개의 비트가 모여 하나의 바이트가 구성

자료형 : 변수의 타입

논리형정수형실수형문자형문자열
boolean (1 byte)byte (1 byte)
short (2 byte)
int (4 byte 기본형)
long (8 byte)
float (4 byte)
double (8 byte 기본형)
char (2 byte)String (참조형)

리터럴 : 변수에 대입되는 값 자체

boolean = true 또는 false;
byte = 10;
short s = 32767; 
int i = 100;
long l = 10000L; // 리터럴 표기법
float f = 0.123f; // 리터럴 표기법
double d = 3.14;
char c = 'A';
String str = "ABC";

byte 와 short 는 옛날 코드와의 호환을 위해 만들어진 자료형이므로 사용 빈도가 낮아 별도의 리터럴 표기법을 제작하지 않는다.

자료형 예제

int iNum1 = 10;
int iNum2 = 4;
float fNum = 3.0f;
double dNum = 2.5;
char ch = 'A';
		
System.out.println( iNum1 / iNum2 ); // 2
System.out.println( (int)dNum ); // 2
System.out.println( iNum2 * dNum ); // 10.0
System.out.println( (double)iNum1 ); // 10.0
System.out.println( (double)iNum1 / iNum2 ); // 2.5
System.out.println( (int)fNum ); // 3
System.out.println( (int)(iNum1 / fNum) ); // 3
		
System.out.println( iNum1 / fNum ); // 3.3333333
System.out.println( (double)iNum1 / fNum ); // 3.3333333333333335
		
System.out.println( (int)ch ); // 65
System.out.println( ch + iNum1 ); // 75
System.out.println( (char)(ch + 10) ); // 문자 K

3. 상수와 문자열

상수 : 한 번만 저장할 수 있는 메모리로 초기화 이후 다른 값 대입 불가능

// 선언과 동시에 초기화
final int CONSTANT_NUMBER = 100;

// 선언 후 초기화
final int CONSTANT_NUMBER;
CONSTANT_NUMBER = 100;

모두 대문자로 표기하며 단어 구분 시 언더바를 사용한다.

문자열 : 단어나 문장을 문자열이라고 표현하며 쌍따옴표로 묶여있으면 문자열로 인식

String str = "기차";
String str = new String("기차");
String str = "기차" + "칙칙폭폭";
String str = new String("기차" + "칙칙폭폭");
String str = "기차" + 123 + 45 + "출발";
String str = 123 + 45 + "기차" + "출발";

// 사칙 연산 연산 순위 적용
System.out.println(100 + age + name); // 두 정수 합 + 문자열 = 이어쓰기

문자열과 다른 자료형이 합쳐져있으면 문자열로 출력된다.


4. 형변환

같은 종류의 자료형끼리만 계산이 가능하기 때문에 초월 번역가인 컴파일러를 통해 자료형을 바꾼다. boolean 연산은 제외하며 형변환은 변수 뿐만 아니라 리터럴 값에도 가능하다.

즉 같은 자료형끼리만 연산이 가능하며 결과도 같은 자료형에 대입해야 한다.
대입 연산 시 값의 범위가 작은 자료형을 큰 자료형에 대입하면 컴파일러가 자동으로 형변환을 진행하지만 값의 범위가 큰 자료형을 작은 자료형에 대입하면 데이터 손실로 인해 에러가 발생한다.

자동 형변환 (묵시적 형변환)

값의 범위가 서로 다른 두 값의 연산 시 컴파일러가 자동으로 값의 범위가 작은 자료형을 값의 범위가 큰 자료형으로 변환한다.

// 10.0 (double) + 2.34 (double) = 12.34 (double)
System.out.println(10 + 2.34); 

강제 형변환 (명시적 형변환)

값의 범위가 큰 자료형을 값의 범위가 작은 자료형으로 변환하기 때문에 데이터 손실이 발생할 수 있다. 또한 값의 범위에 상관없이 변수나 값을 원하는 형태의 자료형으로 강제 변환할 수 있다.

int test1 = 290;
byte test2 = (byte)test1;
	
System.out.println("test1 : " + test1); // 290
System.out.println("test2 : " + test2); // 34

5. 변수와 메모리 구조

RAM 구조

static

static 예약어로 선정된 필드로 메소드가 저장되는 공간이며 클래스 변수 등이 있다.

heap

new 연산자에 의해 동적으로 할당하고 저장되는 공간이며 객체 및 배열 등이 있다.

stack

메소드 호출 시 자동 생성되고 메소드 종료 시 자동 소멸되며 지역변수와 매개변수 및 메소드 호출 스택 등이 있다.


6. 입출력 메소드

출력 길이가 길어지면 printf 를 사용하는 것을 권장한다.

출력 메소드

System.out.print(); // 줄바꿈 X
System.out.println(); // 줄바꿈 O
System.out.printf("패턴이 포함된 문자열", 변수 또는 값); // 줄바꿈 X

// println 또는 print 활용
System.out.println(name + "님은 나이 " + age + "세, 키 " + height + "cm의 " + gender + "성입니다.");

// printf 활용
// %.1f 소수점 아래 한 자리까지 출력
// %3d 3칸 확보하고 오른쪽 정렬
System.out.printf("%s님은 나이 %3d세, 키 %.1fcm의 %c성입니다.", name, age, height, gender);

입력 메소드

import java.util.Scanner;

Scanner sc = new Scanner(System.in);

sc.nextInt(); // 정수 입력받기 (개행 문자 무시하고 숫자만 가져옴)
sc.nextFloat(); 또는 sc.nextDouble(); // 실수 입력받기 (개행 문자 무시하고 숫자만 가져옴)
sc.next(); // 한 단어 입력받기 (개행 문자 무시 및 띄어쓰기 불가)
sc.nextLine(); // 한 문장 입력받기 (개행 문자 포함 및 엔터 만나면 종료)

Scanner sc = new Scanner(System.in);

System.out.print("이름 : ");
String inputName = sc.next();
profile
현수의 개발 저장소

0개의 댓글