HAZEL

[ CH01. 기초자바 ] 자바 자료형, 변수, 리터럴, 형변환 본문

PROGRAMMING/Java

[ CH01. 기초자바 ] 자바 자료형, 변수, 리터럴, 형변환

Rmsid01 2021. 3. 26. 14:26

CH01. 기초 자바

: 패스트 캠퍼스 강의를 공부하고 정리한 내용입니다.

 

01. 자바 기본


1. hellojava ✨

: 한 패키지 안에 여러 클라스가 들어갈 수는 있지만, 메인은 하나여야한다 (?)

: java의 package 는 소문자, class는 대문자로 시작하는것이 원칙(?) 이라고 한다.

 

 

2. 컴퓨터에서 자료 표현하기

 

: 2진수, 8진수, 16진수를 표현할 수 있다.

- 맨 앞의 비트는 부호를 의미한다!

 

// 2 진수, 8진수, 16진수를 프로그램에서 사용하는 예제

package ch04;

public class BinaryTest {
    public static void main(String[] args) {
        int num = 10;
        int bNum = 0B1010;
        int oNum = 012;
        int xNum = 0XA;


        System.out.println(num);
        System.out.println(bNum);
        System.out.println(oNum);
        System.out.println(xNum);
    }
}

 

 

3. 변수 ( Variable )

: 프로그램에서 항상 변하는 값을 나타낼 필요가 있음

: 표현하려는 수에 맞는 데이타 타입 ( 자료형 ) 을 이용하여 변수를 선언

: 표현하려는 자료가 숫자, 문자, 문자열 등 다양할 수 있으므로 그에 맞는 자료형을 사용

// 변수 선언과 사용하기 : 자료형과 변수 명으로 변수를 선언함. 선언과 동시에 초기화 할수 있음
package ch05;

public class VariableTest {
    public static void main(String[] args) {
        int age, count ;
        age = 10;

        int level = 10000;
        System.out.println(age);
        System.out.println(level);
    }
}

 

변수 이름을 만들 때,

1. 숫자를 쓸 수 없음

2. 예약어는 사용할 수 없음

 

 

02. 자료형


1. 기본 자료형 ( data type ) 의 종류

  • 정수형 : byte , short , int , long ( 8 )
  • 문자형 : char
  • 실수형 : float , double
  • 논리형 : boolen

* 참조 자료형 : 객체를 만들고, 그 객체가 데이터 타임으로 사용하는 것 

 

2. 정수형

 

1) int

: 프로그램에서 사용하는 모든 숫자 ( 리터럴 ) 은 int 로 저장함

: 4 바이트로 단위의 자료형 

 

2) long 

: 숫자의 뒤에 알바펫 L 또는 l 을 써서 Long 형임을 표시함

  - 소문자로 쓰면 1이랑 헷갈려서, 보통 대문자를 많이 사용함 

 

* 자바에서는 정수형은 int , 실수형은 double 로 잡힌다! 

< 파이썬에서는 float 형식을 쓰기 때문에, 실수형을 사용할 때 주의할것  > 

 

* 만약 , 자료형보다 더 작은 값을 선언한다면 상관없다. 하지만 선언한 자료형보다 더 큰 값이 들어가게 되면 오류가 발생하게 된다. 따라서 자바를 할때 자료형을 주의해야한다.

 

 

3. 실수형 - 부동 소수점 방식

: 지수부와 가수부로 표현 함 - 컴퓨터에서는 밑수를 2로 사용

: 정규화 - 가수가 밑수보다 작은 한 자리까지 가수로 표현 되는 것

 

package ch07;

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

// 부동 소수점 방식의 오류
// 지수와 가수로 나타내는 부동 소수점 방식에서는 지수부가 0 을 표현할 수 없기 때문에 약간의 오차가 발생할 수 있다.
package ch07;

public class DoubleTest2 {
    public static void main(String[] args) {
        double dnum = 1 ;

        for ( int i = 0 ; i < 10000; i++) {
            dnum = dnum + 0.1;
        }

        System.out.println(dnum);
    }
}

 

 

4. 문자형

  • 문자도 정수로 표현 가능함
  • 문자를 나타내기 위해 전세계 표준인 UNICODE 를 사용하며, utf-16 인코딩을 사용 (모든 문자 2바이트 표시)
  • 문자형 변수 선언

char ch = 'A'; OR char ch2 = 66;

character set: 문자를 숫자로 변환한 값의 세트

encoding: 문자가 숫자로 변환되는 것

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

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

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

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

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

 

package ch08;

import java.sql.SQLOutput;

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);

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

        //char ch4 = -66; 음수는 대입할 수 없음

        char ch5 = '한';
        char ch6 = '\uD55C';

        System.out.println(ch5);
        System.out.println(ch6);
    }
}

 

5. 논리형 

 

- true ( 참 ) , false ( 거짓 )  두가지만 나타냄. 

- 1바이트를 사용함 

- 값이 존재하는지, 배열이 비었는지, 결과가 참인지 거짓인지 등을 표현

package ch09;

public class BooleanTest {

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

 

6. 지역변수 자료형 없이 사용하기 ( 자바 10 지원 됨 - 파이썬 같은 느낌 ) 

: 추론 가능한 변수에 대한 자료형은 선언하지 않음

- 한번 선언하여 추론 된 변수는 다른 타입의 값을 대입할 수 없다. 

- 지역 변수만 사용가능하다.

 ** 지역변수 : 지역에서만 사용가능한 변수 

 package ch09;

public class LocalVariableType {

	public static void main(String[] args) {

		var i = 10;
		var j = 10.0;
		var str = "hello";
		
		System.out.println(i);
		System.out.println(j);
		System.out.println(str);
		
		str = "test";
		//str = 3;  -- 중간에 int 로 바꾸는 행위는 java는 안된다. 
	}
}

 

 

03. 상수 , 리터럴, 변수의 형 변환


1. 상수 ( constant )

  : 변하지 않는 수 ex, 원주율 , 1년 12개월 등

  - final 예약어를 사용하여 선언 : 선언하고 assign 하게 되면 바꿀 수 없다. 

  - 선언과 동시에 대부분을 초기화 함 ex, final int MAX_NUM = 100 ; 

    물론, 선언만 할 수 있음 

  - 다른 것과 차이를 두기 위해서 보통 대문자로 표현함 .

 

 * 상수의 장점 

 a. 변하지 않는 값을 반복하여 사용할 때 의미있는 문자로 인식하기 쉬움 -> 가독성이 좋음 

 b.  변하더라도 선언한 부분만 변경하면 되기때문에 여러 부분을 수정할 필요가 없음 

package ch10;

public class ConstantTest { 

	public static void main(String[] args) {

		final int MAX_NUM = 100; # 선언과 동시에 초기화
		final int MIN_NUM;
		
		MIN_NUM = 0; // 만약 초기화를 하지 않은 채 출력을 한다면, 오류가 남 
		
		System.out.println(MAX_NUM);
		System.out.println(MIN_NUM);
		
		//MAX_NUM = 1000; 상수이기 때문에 값을 변하게 할 수 없다. 
	}
}

 

 

2. 리터럴 ( literal )

: 프로그램에서 사용하는 숫자, 문자, 논리값을 뜻함

: 리터럴은 상수 풀에 있음 

- 정수 리터럴은 int , 실수 리터럴은 double 로 저장하되 정수의 범위가 넘어가면 L, F 식별자를 씀

 

** 상수풀 : 

하드에서 메모리로 로드가 될때, 프로그램 안의 자료중의 일부는 메모리를 차지함 ( 실행과 상관없이 , 로드만으로 ) - 상수, static 변수 가 있는데, 그중에서 상수를 의미함 . 이때, 메모리에서 차지하는 공간을 상수풀이라고 함.

 

3. 형변환 ( type conversion )

: 서로 다른 자료형 간에 연산을 위해서 하나의 자료형으로 통일함

 

* 형변환의 종류 

- 묵시적 형 변환 ( = 자동형 변환 ) : 프로그래머가 개입하지 않아도 알아서 변환하는 것

 - > 바이크 크가 작은 자료형 -> 큰 자료형, 덜 정밀한 자료형 -> 더 정밀한 자료형 

- 명시적 형 변환 ( = 강제형 변환 ) : 프로그래머가 개입하여 강제적으로 변환하는것 

 -> 위와 반대의 경우에는 강제적으로 변환해줘야함 

 -> 자료가 유실될 수 있음 

package ch10;

public class TypeConversion {

	public static void main(String[] args) {
		
        byte bNum = 125;
		int iNum = dNum;
        
        System.out.println(iNum);  // 자동으로 변환 
		
		double dNum = 1.2;
		float fNum = 0.9F;
		
        // 명시적으로 넣어주는 것 
		int iNum1 = (int)dNum + (int)fNum; 
		int iNum2 = (int)(dNum + fNum);  // 2.1 
		
		System.out.println(iNum1);  // 1
		System.out.println(iNum2);  // 2 
	}

}