변수와 데이터 타입

hovi·2023년 5월 30일
0

JAVA

목록 보기
4/36

자료형

정수형 타입

부호를 가지며, 소수가 없습니다.

정수형 데이터 타입을 결정 할 때는 사용하고자 하는 데이터의 최대크기를 고려해서 결정해야 합니다.

해당 타입이 표현 할 수 있는 범위를 벗어아면 오버플로우가 발생해 전혀 다른 값이 저장 됩니다.

public static void main(String[] args) {
        byte num1 = 127;
        byte num2 = -128;

        num1++; // 127 + 1
        num2--; // -128 - 1

        System.out.println(num1); // -128
        System.out.println(num2); // 127
    }

실수형 타입

float형과 double형이 있으며, double형이 실수형의 기본 타입 입니다

컴퓨터에서 실수를 표현하는 방법은 정수에 비해 훨씬 복잡 합니다.

현재 부동 소수점 방식을 사용하며, 고정 소수점 방식에 비해 훨씬 더 많은 범위까지 표현 할 수 있습니다.

하지만, 컴퓨터에서 실수를 표현하는 방법은 정확한 값이 아니라 언제자 근사치를 표현하므로 오차가 발생 합니다.

public class Float {
    public static void main(String[] args) {
        double num1 = 0.1;
        for(int i = 0; i < 1000; i++) {
            num1 += 0.1;
        }
        System.out.println(num1);
    }
}

변수란?

변수란? 값을 저장할 수 있는 메모리 공간에 이름을 붙여 놓은 것.

프로그램은 변수를 통해 특정 번지에 값을 저장하고 일을 수 있습니다.

대부분의 프로그래밍 언어는 메모리 공간에 저장할 위치를 운영체제가 결정하지만 자바는 JVM이 합니다.

(JVM이 운영체제로 부터 대량의 메모리를 미리 할당 받아두고 이를 재 할당)

자바는 데이터형이 존재하는 언어 이기 때문에 선언시 사용 데이터에 맞는 자료형을 선언해야 합니다.

변수의 선언

변수를 사용하기 위해서는 먼저 변수를 선언해야 합니다. 변수의 선언은 어떤 타입의 데이터를 저장할 것인지 그리고 변수 이름이 무엇인지를 결정해야 합니다.

int age; // 정수값을 저장할 수 있는 age 변수 선언
double value; // 실수값을 저장 할 수 있는 value 변수 선언

변수의 생성 규칙

자바에서는 변수 뿐만 아니라 클래스, 매소드 등의 이름을 짓는데 반드시 지켜야 하는 공통된 규칙이 있습니다.

  1. 변수의 이름은 영문자(대소문자), 숫자, 언더스코어(_), 달러($)로만 구성할 수 있습니다.
  2. 변수의 이름은 숫자로 시작할 수 없습니다.
  3. 변수의 이름 사이에는 공백을 포함할 수 없습니다.
  4. 변수의 이름으로 자바에서 미리 정의된 키워드(keyword)는 사용할 수 없습니다.
  5. camel 표기법을 따른다.

변수의 이름은 해당 변수에 저장될 데이터의 의미를 잘 나타내도록 짓는 것이 좋습니다.

[참고] 자바의 키워드

abstract  continue  for         new        switch
assert    default   goto        package    synchronized
boolean   do        if          private    this
break     double    implements  protected  throw
byte      else      import      public     throws
case      enum      instanceof  return     transient
catch     extends   int         short      try
char      final     interface   static     void
class     finally   long        strictfp   volatile
const     float     native      super      while

[참고] 변수명을 잘못 사용한 경우

int 1st;   // 변수명은 숫자로 시작할 수 없다.
int a#;    // 변수명에 특수문자를 사용할 수 없다.
int class; // 키워드를 변수명으로 사용할 수 없다.

변수의 종류

자바에서는 다음과 같이 8가지 종류의 기본형 변수를 제공하고 있습니다.

  • 정수형 : byte, short, int, long
  • 실수형 : float, double
  • 문자형 : char (음수값을 가질 수 없습니다.)
  • 논리형 : boolean

변수의 선언과 초기화

자바에서는 변수를 사용하기 전에 반드시 먼저 변수를 선언하고 초기화해야 합니다.

변수를 선언하는 방법에는 다음과 같이 두 가지 방법이 있습니다.

  1. 변수의 선언만 하는 방법
  2. 변수의 선언과 동시에 초기화하는 방법
  3. 값 대입 하기

선언 예시

int num1, num2;                  // 같은 타입의 변수를 동시에 선언함.
double num3 = 3.14;              // 선언과 동시에 초기화함.
double num4 = 1.23, num5 = 4.56; // 같은 타입의 변수를 동시에 선언하면서 초기화함.

int hour = 3;
int minute = 5;
System.out.println(hour + "시간" + minute + "분");

int test;
System.out.println(test); // 선언 이후 초기화 없이 사용하였으므로 에러 발생

사용자 정의 자료형

  • class는 대표적인 사용자 정의 자료형 입니다.
  • 내부에 다양한 메소드를 포함 할 수 있습니다.
class NameCard{
	String name;
	int age;
	String addr;
	String eMail;
	String phoneNum;
}

값 저장

변수에 값을 저장 할 때는 대입연산자(=)를 사용 합니다.

수학에서 등호(=) 같다는 표시이지만 프로그래밍 언어에서는 오른쪽 값을 왼쪽 변수에 저장 한다는 의미 입니다.

int score = 90;

변수의 사용 범위

  • 변수는 중괄호 {} 블록 내에서 선언되고 사용 됩니다. (변수는 선언된 블록 내에서만 사용이 가능 합니다.
public static void main(String[] args) {
		int value = 10;  // 로컬 변수 { }
		int sum = value + 20;
		System.out.printf("%d\n", sum);
}
  • int m이라는 변수가 블록 내에서 선언되어 사용되었으면 블록 밖에서는 존재 할 수 없으므로 에러 발생
public static void main(String[] args) {
		int n = 20;
		if (n > 10) {
			int m = 30; // 조건문 내의 지역 변수
			m = n - 10;
		}
		int k = n + m;
	}

상수(constant)

상수(constant)란 변수와 마찬가지로 데이터를 저장할 수 있는 메모리 공간을 의미합니다.

하지만 상수가 변수와 다른 점은 프로그램이 실행되는 동안 메모리에 저장된 데이터를 변경할 수 없다는 점입니다.

자바에서는 final 키워드를 사용하여 선언

final int AGES = 30;
import java.util.Scanner;

public class Final {
    public static void main(String[] args) {
        final double taxRate = 0.10;
        Scanner sc = new Scanner(System.in);
        System.out.print("수입을 입력 하세요 : ");
        int income = sc.nextInt();
        System.out.println("당신의 내야 할 세금은 " + income * taxRate);
    }
}

타입 변환

하나의 타입을 다른 타입으로 바꾸는 것을 타입 변환이라고 합니다.

자바에서는 다른 타입끼리 연산의 경우 모두 같은 타입으로 변환이 후 수행이 됩니다.

자동 타입 변환은 유리한 방향으로 일어 납니다.

int num1 = 1, num2 = 4;
double result1 = num1 / num2;  // 묵시적 형변환
double result2 = (double) num1 / num2;  // 명시적 형변환

System.out.println(result1);
System.out.println(result2);

System.out.println(""+ result1 + 10); // 연산자 우선순위에 의해서 문자열로 간주 됩니다.
System.out.println(result1 + 10 + "10"); // 먼저 숫자형 타입이 계산되고 문자열이추가 됩니다.

타입 변환 메소드

`Integer.parseInt(test);` 문자열을 정수 int 타입으로 변환 합니다.

`Double.parseDouble(test);` 문자열을 실수 double 타입으로 변환 합니다.

진수 표현

public class IntLiteral {
    public static void main(String[] args) {
        int var1 = 0b1010;  // 2진수
        int var2 = 0206;   // 8진수
        int var3 = 365;    // 10진수
        int var4 = 0xB3;   // 16진수

        System.out.println("var1: " + var1);
        System.out.println("var1: " + var2);
        System.out.println("var1: " + var3);
        System.out.println("var1: " + var4);
    }
}
profile
풀스택 예비 개발자

0개의 댓글