1. 데이터 타입

기본 자료형 - primitive Type

  • 실제 값을 저장한다

참조 자료형 - Reference Type

  • 객체에 대한 메모리 주소를 갖고 있다

데이터 저장 범위

  • 각 데이터 타입마다 다른 bit 수를 갖는다
  • bit 수가 2의 진수가 된다

2. 기본 자료형

정수형문자형실수형논리형
1바이트byte--boolean
2바이트shortchar--
4바이트int-float-
8바이트long-double-

1바이트는 8비트

  • 실습
public class BinaryTest {
	public static void main(String[] args) {
		
		int num = 10; //10진수
		int bNum = 0B1010; //2진수
		int oNum = 012; //8진수
		int xNum = 0XA; //16진수
		
		System.out.println(num);
		System.out.println(bNum);
		System.out.println(oNum);
		System.out.println(xNum);

	}
}

결과
10
10
10
10

기본 자료형 - 정수

일반적으로 int를 가장 많이 사용한다
긴 정수를 사용할 때 long

long lnum = 123456789000L;
숫자 뒤에 L붙여야함
  • 실습
public class VariableTest {

	public static void main(String[] args) {
		byte bnum = 127;
		System.out.println(bnum);
		
//		int num = 1234568789000;
		long lnum = 12345678900L;
		//long 했는데 숫자가 작으면 int에서 long으로 바뀜
		System.out.println(lnum);
	}

}

결과
127
12345678900

기본 자료형 - 실수

  • 부동 소수점 방식
    가수와 지수로 표현

정규화를 하기 위해서
1.m * 2^(-n)으로 표현

  • 실습
public class DoubleTest {
	public static void main(String[] args) {
		double dnum = 3.14;
		float fnum = 3.14f;
		
		//실수는 기본적으로 더블이기 때문에 float에는 f를 명시해야함
		
		System.out.println(dnum);
		System.out.println(fnum);
	}
}

결과
3.14
3.14

기본 자료형 - 문자

  • 문자도 정수로 표현한다
    특정 정수의 값을 정의해둠
    = 문자 세트 (아스키코드 등)

ex) A가 65로 = 인코딩
65가 A로 = 디코딩

  • 전세계 언어를 표시하기 위해 유니코드 사용
    2바이트, utf-16
    자바에서 유니코드 사용

  • 데이터 타입은 char

char ch = 'A';

'A'는 2바이트짜리 문자
"A"는 문자열
다른것이다
"A"는 문자열이기 때문에 A뒤에 문자열의 끝을 나타내는 \n이 있다

char에 숫자로 음수는 넣을 수 없다
2바이트 이상의 숫자는 넣을 수 없다

  • 실습
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((char)ch2);
		
		int ch3 = 67;
		System.out.println(ch3);
		System.out.println((char)ch3);
		
		char han = '한';
		char ch = '\uD55C';
		
		System.out.println(han);
		System.out.println(ch);
	}

}

결과
A
65
B
B
67
C

기본 자료형 - 논리형

  • 논리형
    true/false
    1바이트

지역변수 자료형 없이 사용하기

추론 가능한 변수에 대한 자료형을 선언하지 않아도 되는 것
지역변수는 한 블럭 안에서 사용하는 변수를 말한다

var i = 10;
var j = 10.0;
var str = "hello";

이미 string으로 선언된 str을 뒤에서 숫자형으로 바꾸는 등의 형변환은 안됨!

  • 실습
public class LocalVariableInter {

	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);
		
		var str2 = str;
		
		System.out.println(str2);
		

	}

}

기본 자료형 - Overflow

  • 자신이 저장할 수 있는 범위를 벗어나면 최소 값부터 다시 반복하는 구조이다
  • 변수의 범위를 벗어나서 초기화 하는 것은 허용되지 않는다

변수 선언 방법

  • 자료형 변수명

명명 규칙

  • 첫번째 문자는 영문 대소문자, 한글, 특수문자(_, $)만 가능

  • 대소문자 구분

  • 예약어는 사용할 수 없음

  • 권장사항
    시작 문자는 소문자(상수 제외), 문자 간의 공백은 없게
    카멜 케이스 사용
    상수의 이름은 모두 대문자, 단어 사이 구분은 _

상수와 리터럴

  • 상수는 변하지 않는 수, 한 번 할당하면 변경할 수 없음
  • final 예약어를 사용하여 선언
  • 상수를 사용하면 변하지 않는 값을 반복하여 사용할 때 의미있는 문자로 인식하기 쉽고
    혹, 변하더라도 선언한 부분만 변경하면 된다

상수는 대문자로 주로 표현한다

  • 리터럴은 프로그램에서 사용하는 숫자, 문자, 논리값
    상수 풀에 있음
    정수리터럴은 int
    실수리터럴은 double
    정수의 범위가 넘어가는 경우 L,l
    float로 사용하려는 경우 F, f 식별자를 써줘야함

    • 실습
public class ConstantTest {

	public static void main(String[] args) {
		
		final int MAX_NUM = 100;
		final int MIN_NUM;
		
		MIN_NUM = 100;
		System.out.println(MAX_NUM);
		System.out.println(MIN_NUM);
	}

}

결과
100
100

기본 자료형의 메모리

  • Primitive Type의 변수들이 생성되면 JVM의 stack area에 저장된다
  • 상수는 Method area의 Constant Pool에 저장된다

변수의 형변환

서로 다른 자료형 간의 연산 등의 수행을 위해 하나의 자료형으로 통일하는 것


1. 묵시적 형변환
바이트 크기가 작은 자료형에서 큰 자료형으로의 형 변환은 자동으로 이루어짐 (자동 형변환)
= 덜 정밀한 자료형에서 더 정밀한 자료형으로의 형 변환을 자동으로 이루어짐

  1. 명시적 형변환 크기가 큰 자료형을 강제로 작은 크기의 자료형으로 형 변환을 한다면 데이터의 유실이 발생할 수 있음 (강제 형변환)
  • 실수형을 정수형으로 변환하면 소수점이 버려진다

  • 정수형은 연산자를 사용하게 되면 primitive type들은 정수형의 기본형인 int 타입으로 자동 형변환된다
    long 타입은 자동으로 up-casting 된다

  • 부동 소수접은 double 타입이 기본형이다. float 타입으로 할당할 경우 f나 (float) 형변환이 필요하다

    • 실습
public class TypeConversionTest {

	public static void main(String[] args) {
		
//		int iNum = 255;
//		byte bNum = (byte)iNum;
//		
//		System.out.println(bNum); // 이상한 값이 나온다
//		
//		double dNum = 3.14;
//		int inum = (int)dNum;
//		
//		System.out.println(inum);
		
		double dnum = 1.2;
		float fnum = 0.9f;
		
		int inum1 = (int)dnum + (int)fnum; //1과 0의 합이 됨
		int inum2 = (int)(dnum + fnum); //2.1이 먼저 되고 0.1 탈락
		
		System.out.println(inum1);
		System.out.println(inum2);
	}

}

결과
1
2

3. 연산자

  • 우선순위는 괄호가 제일 높다
  • 산술 > 비교 > 논리 > 대입
  • 단항 > 이상 > 삼항
  • 단항, 대입 연산자는 오른쪽에서 왼쪽으로 연산

대입 연산자

int a = 10

산술 연산자

증가 감소 연산자

관계 연산자(비교 연산자)

연산의 결과가 true/false로 반환됨
조건문 반복문의 조건식으로 많이 사용됨

논리 연산자

결과가 true/false

논리 연산에서 모든 항이 실행되지 않는 경우 - 단락 회로 평가

  • 논리 곱은 두 항의 결과가 모두 true일 때만 결과가 true
    앞이 false이면 뒤를 평가하지 않음
  • 논리 합은 두 항의 결과가 모두 false일 때만 결과가 false
    앞이 true이면 뒤를 평가하지 않음
  • 실습
public class LogicalTeat {

	public static void main(String[] args) {
		int num1 = 10;
		int i = 2;
		
		boolean value = ((num1 = num1 + 10) > 10) || ((i = i + 2) < 10);
		System.out.println(value);
		System.out.println(num1);
		System.out.println(i);
	}

}

결과
true
20
2

삼항 연산자(조건 연산자)

조건항 ? 항1 : 항2 - 조건항이 true이면 결과는 항1이 되고 false이면 결과는 항2가 된다

if를 간단히 표현할 때 사용할 수 있다

비트 연산자

대입연산자와 다른 연산자가 함께 쓰임

  • 마스크 : 특정 비트를 가리고 몇 개의 비트 값만 사용할 때

  • 비트켜기 : 특정 비트들만을 1로 설정해서 사용하고 싶을 때
    예) & 00001111 ( 하위 4비트 중 1인 비트만 꺼내기)

  • 비트끄기 : 특정 비트들만을 0으로 설정해서 사용하고 싶을 때
    예) | 11110000 ( 하위 4비트 중 0 인 비트만 0으로 만들기)'

  • 비트 토글 : 모든 비트들을 0은 1로, 1은 0으로 바꾸고 싶을 때

  • 연산자 우선순위

  • 실습

public class BitOperationTest {

	public static void main(String[] args) {
		int num1 = 5;
		int num2 = 10;
		
		System.out.println(num1 | num2);
		System.out.println(num1 & num2);
		System.out.println(num1 ^ num2);
		System.out.println(~num1);
		
		System.out.println(num1 << 2);
		System.out.println(num1);
		System.out.println(num1 <<= 2);
		System.out.println(num1);
		
	}

}

결과
15
0
15
-6
20
5
20
20

profile
안녕하세요. Chat JooPT입니다.

0개의 댓글