5 분 소요

변수의 초기화

  • 변수에 값을 저장하는 것
    • 특정 Data type값을 저장하는 저장소를 메모리에 생성
    • 초기화된 변수만 출력, 연산 등에 사용할 수 있다.
    • 멤버변수(필드)는 초기화 값을 지정하지 않는 경우 해당 데이터타입의 기본값으로 초기화된다.

    ex) 변수의 생성 및 초기화

      public class Main {
      		int mathScore; // mathScore == 0
        
      		public static void main(String[] args) {
      			int subScore = 100;
      //		int subScore; [에러]
      		}
      }
    

    mathScore - 저장소의 이름을 지정함

Data type

  • 주로 쓰이는 type

    boolean 1byte

    char 2byte

    short 2byte

    int 4byte

    long 8byte

    float 4byte

    double 8byte

type마다 range값이 있다.


Number type 🔢

  • DataType
    • byte
    • short
    • int
    • long
  • DataType
    • float
    • double

정수형 타입의 유의사항

정수는 무조건 int형이다.

  • byte, short 타입의 변수는 사용하는 경우가 극히 제한적이다.
    • byte는 바이너리 데이터를 다루거나, 입출력 등의 작업에서만 제한적으로 사용된다.
    • short는 정보시스템용 애플리케이션에서 거의 사용되지 않는다.
    • 국어점수, 수학점수 등의 값이 0~100 사이의 값이기 때문에 byte 타입의 범위(-128 ~ 127)

      내에 속하지만 절대로 byte 타입의 변수를 사용해서 국어점수, 수학점수를 저장하지 말자

  • long은 int의 범위를 초과하는 정수를 다룰 때만 선택한다.
  • int타입의 범위에 해당하는 정수값만 표현할 수 있다.
    • int형의 범위를 넘어 오류가 생김
    • 범위를 넘는 숫자는 뒤에 L를 붙여야 한다.
long value = ~~10_000_000_000~~  //**int의 최대값을 넘기므로 전혀 다른 값이 나온다.(오버 플로우)**
	                           //**따라서 제대로된** **값을 얻기 위해서 L을 붙여 형변환해야 100억 값이 나온다.**
long value = 10_000_000_000L //100억

Overflow 🌊

타입이 표현할 수 있는 값의 범위를 넘어서는 것


실수형 타입의 유의사항

실수는 무조건 double형이다.

  • float는 정보시스템용 애플리케이션에서 거의 사용되지 않는다.
    • double형의 실수값을 float형의 변수에 저장할 수 없다.
    • float형의 실수값으로 판단하도록 숫자 뒤에 F나 f를 붙인다. ex) 3.14f
    • 실수형 변수에 저장된 값으로 사칙연산을 수행하면 작은 오차가 발생할 수 있다.

Variable 📦

숫자의 DataType 결정

  • 숫자로 표현하는 것 : 사칙연산, 비교연산 가능
  • 문자열로 표현하는 것 : 사칙연산 안하는것
int age = 25;
String postCode = "03302";

Text type 🔡

String

  • 문자열(여러 글자)를 저장하는 변수 static

    자바는 문자열을 저장하는 데이터타입을 제공하지 않는다.

“A”는 String 타입의 변수에만 저장할 수 있다.

1. String value7 = "";
2. String value10 = "              ";
  1. 빈 문자도 저장할 수 있다.
  2. 한개 이상의 공백도 저장할 수 있다.
  • Primitive_기본자료형 타입의 변수 선언 및 초기화

    변수(저장소)에 실제값이 저장되어있다.

int score = 100;
double weight = 65.8;
char gender = 'F';
  • non Primitive_참조자료형 타입의 변수 선언 및 초기화

    변수에 주소값이 저장되어 있다.

    참조변수: 주소값을 저장하고 있는 변수

    주소값: 실제값을 가지고있는 객체의 위치를 나타내는 값

String name = "홍길동";

char

  • 한 글자를 저장하는 변수의 datatype

    정보시스템용 애플리케이션에서 한 글자로된 값은 거의 존재하지 않기 때문에, char는 거의 사용되지 않는다.

‘A’는 char 타입의 변수에만 저장할 수 있다.

char value1 = 'A';
2. char value2 = 65;
3. char value3 = '\u0041';
  1. 아스키코드표에서 65번째 글자가 저장
  2. 유니코드문자표에서 0x0041번째 글자가 변수에 저장된다.
    • 오류
    • 두 글자 이상을 저장할 수 없다.
    • 빈 문자를 저장할 수 없다. 공백이 아니다.
    • 공백 한 개는 저장할 수 있다. 공백도 글자기 때문에 공백 2개를 저장할 수 없다.

area.png


Boolean type 🌗

논리값

  • 두 가지 상태만을 가지는 값을 표현할 때 사용되는 값

    ex) 합격/불합격, 성공/실패, 미혼/기혼, 유/무 …

true/false : 참/거짓으르 표현하는 자바의 예약어.

true/false 둘 중 하나의 값만 저장.


Casting 🔁

기본자료형 타입의 형변환

definition

  • 값을 다른 타입의 값으로 변환하는 것

    숫자, char만 해당

    정수 → 실수

    double x = 10;

    정수 10이 실수 10.0으로 형변환된 후 x에 대입

    실수 → 정수

    int x = (int)3.14;

    형변환 연산자가 실수 3.14를 정수 3으로 형변환하고, x에 대입

    정수 → 정수

    int x = 10; byte y = (byte)x;

    4byte크기의 정수 10을 1byte크기의 변수 y에 대입하기 위해서 byte로 형변환한다.

    실수 → 실수

    double x = 3.14; float y = (float)x;

    8byte크기의 실수 3.14를 4byte크기의 변수 y에 대입하기 위해서 float로 형변환한다.

    문자 → 정수

    int x = 'A';

    문자 ‘A’의 아스키코드값 65가 정수 x에 대입된다.

    정수 → 문자

    char x = 65;

    아스키코드 65에 해당하는 문자 ‘A’가 x에 대입된다.


type

  • 자동형변환

    프로그램 실행시 JVM이 자동으로 처리.

    서로다른 type의 수 계산 시.

    • 크기가 작은 타입의 값을 크기가 큰 타입의 값으로 변환
    • 정밀도가 낮은 타입의 값을 정밀도가 높은 타입의 값으로 변환
    • process
      1. 크기가 큰 타입 or 정밀도가 높은 데이터 타입으로 형 변환
      2. 연산이 수행
      3. 변수에 저장
    • ex)

      1️⃣100 → 2️⃣ 100.0 → 3️⃣ value1에 저장

      100이 double형으로 형변환 후 value1에 저장

        int num = 100;
        double value1 = num;       //100.0
      

      3.0/10 → 1️⃣ 3.0/10.0 → 2️⃣ 0.3 → 3️⃣ value = 0.3

        double value = 3.0/10;
        System.out.println(value);
      
  • 수동형변환

    데이터의 손실이 발생하는 방향으로의 형변환

    JVM이 자동으로 형변환을 수행하지 않음

    개발자가 데이터 손실이 발생하더라도 형변환하겠다는 의사표시를 반드시 해야 한다.

    • 크기가 큰 타입의 값을 크기가 작은 타입의 값으로 변환
    • 정밀도가 높은 타입의 값을 정밀도가 낮은 타입의 값으로 변환
    • 위의 경우를 제외한 다른 경우도 가능
    • ex)

        int korScore = 100;
        int engScore = 80;
        int mathScore = 70;
        int subjectCount = 3;
        int totalScore = korScore + engScore + mathScore;
      

      ⬇️ 250/3 → 83 → 83.0 //정수와 정수끼리 나누면 소수점을 삭제

        double averageScore1 = totalScore/subjectCount;		
      

      ⬇️ (double)250/3 → 수동형 → 250.0/3 → 자동형 → 250.0/3.0 → 83.3333

        double averageScore3 = **(double) totalScore/subjectCount;**
      

      ⬇️ (double)(250/3) → (double)(83) → 자동형 → 83.0

      // 정확한 실수값을 알기 위해서는 하나의 정수를 먼저 형변환 해야 한다.

        double averageScore3 = **~~(double) (totalScore/subjectCount;)~~**
      
    • 해당 데이터 범위를 초과하는 값을 해당 타입으로 수동형변환하는 것은 잘못된 형변환

        int value1 = ~~(int) 10_000_000_000L~~;
        System.out.println(value1);			
        // value1에는 1410065408이 들어있음. 아무 상관관계가 없는 값이다.
      

Extra

  • 문자와 정수간 형 변환

    문자열은 해당되지 않음

    • ex)

        char value1 = 65;		// 문자타입의 변수에는 아스키코드표 65번째 **문자**가 대입된다.
        int value2 = 'B';		// 정수타입의 변수에는 아스키코드표에서 문자 'B'의 **순번**이 대입된다.
      

  • 유용한 메소드

    “3”.charAt(0); → ‘3’

    문자열을 문자로 변환

    ‘3’ - ‘0’; → 3

    문자를 숫자로 변환

    char(3 + ‘0’) → ‘3’

    숫자를 문자로 변환


16진수/8진수

  • ex)

    int value8 = 012; → 8진수 12 : 18^1 + 28^0 = 10

    int value9 = 0x12; → 16진수 12 : 116^1 + 216^0 = 16+2 = 18


변수의 범위

변수가 최초로 선언된 { }(블록) 이 자신의 범위이다.

자신과 같은 블록 범위내에 같은 이름의 변수가 중복 정의될 수 없다.

범위 밖에서 사용 불가

  • 주소값을 갖는 다는것은 참조한다는 뜻이다.
  • 변수는 초기값을 설정해야 연산가능
  • 참조변수는 기본값이 저절로 설정됨

  • ex)
    • orderPrice 변수는 정의된 파란 배경 범위 내에서 사용될 수 있다.
    • 외부 { } 인 빨간 배경 범위에서는 사용불가
    • { } 내부에 있는 다른{ }에서도 사용가능 하나 중복 정의될 수 없다.
    • if 문 안에 있는 point 변수의 경우 정의된 회색 배경 범위 내에서 사용가능
    • point는 orderPrice 변수가 선언된 { } 어서는 사용불가

이를 이용하여 더 코드를 생략

public class Sample4 {
	public static void main(String[] args) {      
                                                
		int orderPrice = 1_800_000;                 
		                                            
		if (orderPrice >= 1_000_000) {              
			int point = (int)(orderPrice*0.05);       
			System.out.println("적립포인트: " + point);
		} else if (orderPrice >= 500_000) {         
			int point = (int)(orderPrice*0.02);       
			System.out.println("적립포인트: " + point);
		} else if (orderPrice >= 300_000) {         
			int point = (int)(orderPrice*0.01);       
			System.out.println("적립포인트: " + point);
		}                                           
		                                            
	}	
}

	public void test(){                           
		system.out.println(orderPrice);             
	}
public class Sample4 {
	public static void main(String[] args) {

		int orderPrice = 1_800_000;
		int point = 0;                      // 0 가 저장
		
		if (orderPrice >= 1_000_000) {           
			point = (int)(orderPrice*0.05);  //90000가 저장
		} else if (orderPrice >= 500_000) {      
			point = (int)(orderPrice*0.02);
		} else if (orderPrice >= 300_000) {      
			point = (int)(orderPrice*0.01);       
		}                                     
		System.out.println("적립포인트: " + point);
	}	    // 90000이 출력
}

태그:

카테고리:

업데이트: