본문 바로가기
공부기록/사전학습

Java 사전학습_1

by 루팽 2022. 10. 25.

<Java 사전학습_1>

  1. 자바 프로그래밍 시작하기(1강)
  2. 변수와 자료형(2~4강)


1. 자바 프로그래밍 시작하기(1강)

패키지
소문자 시작

클래스
대문자 시작

프로그래밍
컴퓨터에게 일을 하도록 명령어를 만드는 것

컴파일
프로그램 언어를 컴퓨터가 알 수 있는 언어로 바꿔주는 일

컴파일러
기계어로 번역해주는 프로그램

자바의 장점
플랫폼 영향 x
다양한 환경에서 사용 가능(컴파일이 되면서 실행됨) //c언어는 윈도우, 리눅스 컴파일러가 있어서 윈도우용, 리눅스용 실행파일이 별개로 생성되지만, 자바는 한번 컴파일러에 컴파일하고 윈도우, 리눅스 가상 머신이 있으면 어디서든 돌아감
객체지향 언어이기에 유지보수 쉽고 확장성 좋다
안정적이다
풍부한 기능을 제공하는 오픈소스

2. 변수와 자료형(2~4강)

컴퓨터는 0,1로만 데이터 저장

bit
컴퓨터가 표현하는 데이터 최소 단위
2진수 하나의 값 저장할 수 있는 메모리의 크기
1byte=8bit

10진수-2진수
0-00000
1-00001
2-00010
3-00011
4-00100
5-00101

10진수-16진수
9-9
10-A
11-B
12-C
13-D
14-E
15-F
16-10

16진수를 쓰는 이유
길이(비트수)가 적기 때문에(편리성)

10을 표현할 때
2진수-00001010
16진수-0A

package binary;
public class BinaryTest {
    public static void main(String[] args) {
        int num = 10; //10진수 10
        int bNum = 0B1010; //2진수 10
        int oNum = 012; //8진수 10
        int hNum = 0XA; //16진수 10

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


음의 정수 표현
맨 앞이 0일 때 양수, 1일 때 음수
가장 왼쪽에 존재하는 비트는 부호 비트 MSB(Most Significant Bit)
마이너스를 표현하려면 보수를 만든다(합해서 0이 되는 수, 프로그램상 맨 앞의 수가 날아가서 0이 되도록)

0000 0101 //5 (원래 정수는 32bit로 표현)
1111 1010 //1의 보수
1111 1011 //-5, 1의 보수에 1을 더한다(2의 보수를 취한다)
	 //0000 0101과 합치면 0이 됨(1 0000 0000이 되고 맨 앞의 1이 날아감)

package binary;
public class BinaryTest2 {
    public static void main(String[] args) {
        int num1 = 0B00000000000000000000000000000101; //5
        int num2 = 0B11111111111111111111111111111011; //-5

        int sum = num1 + num2;
        System.out.println(num1);
        System.out.println(num2);
        System.out.println(sum);
    }
}


변수(variable)
프로그래밍에서 값을 사용하기 위해 선언하는 것을 변수라고함
할당받은 메모리 주소 대신 부르는 이름
변수 이름은 알파벳, 숫자, _, $로 구성, 대소문자 구별
키워드를 변수 이름으로 사용 x, 숫자로 시작 x, 공백 x
변수의 역할에 어울리는 이름으로 지을 것

package binary;
public class VariableEx {
    public static void main(String[] args) {
        int num; //변수 선언, 데이터타입은 int(정수)
        num = 10; //값을 대입
        System.out.println(num);

        int level = 20;
        System.out.println(level);
        
    	int ns; //변수이름이 이해하기 어렵다
        int numberOfStudent; //가독성 좋음
    }
}


변수가 저장되는 공간의 특성(자료형)
변수가 사용될 공간의 크기, 특성에 따라 자료형을 사용해 변수를 선언
(ex. int num;)

  정수형 문자형 실수형 논리형
1바이트(8bit) byte     boolean
2바이트(16bit) short char    
4바이트(32bit) int   float  
8바이트(64bit) long   double  


byte
1바이트 단위
동영상, 음악파일 등 실행파일 자료를 처리할 때 좋음

short
2바이트 단위
주로 c언어와 호환

package binary;
public class ByteVariableTest {
    public static void main(String[] args) {
        byte bData = -128;
        System.out.println(bData);

        byte bData2 = 127; //128부터는 표현x
        System.out.println(bData2);
    }
}


int
4바이트 단위
자바에서 사용하는 정수의 기본 자료형
프로그램에서 사용하는 모든 숫자(리터럴)는 기본적으로 int(4바이트)로 저장됨
32비트를 초과하는 숫자는 long으로 처리해야 함

long
8바이트 단위
가장 큰 정수 자료
숫자 뒤에 L을 써서 long형임을 표시해야 함

package binary;
public class VariableEx2 {
    public static void main(String[] args) {
    	long num = 12345678900L; //기본적으로 int(4바이트)로 저장, 8바이트로 저장하려면 뒤에 L을 붙여줘야함
    }
}


char
문자 자료형
컴퓨터에서는 문자도 내부적으로는 비트의 조합으로 표현
자바에서는 문자를 2바이트로 처리

인코딩
각 문자에 따른 특정한 숫자 값(코드값)을 부여

디코딩
숫자 값을 원래의 문자로 변환

문자 세트
문자를 위한 코드값을 정해놓은 세트

아스키(ASCII)
1바이트로 영문자, 숫자, 특수문자 표현

유니코드(Unicode)
한글과 같은 복잡한 언어를 표현하기 위한 표준 인코딩
UFT-8, UFT-16이 대표적(자바는 유니코드 UFT-16 사용)

float(4바이트)/double(8바이트)
실수 자료형
실수는 기본적으로 double로 처리
float로 처리하는 경우 숫자 뒤에 F명시

package binary;
public class DoubleEx {
    public static void main(String[] args) {
        double dNum = 3.14;
        float fNum = 3.14F;
    }
}


boolean
논리형
true, false로 표현

자료형이 필요한 이유
변수가 사용할 메모리 크기와 타입을 구분하기 위해 사용

지역 변수 자료형 추론(local variable type inference)
변수에 대입되는 값을 보고 컴파일러가 추론
(ex. var num = 10; >> int num = 10;)


상수
변하지 않는 값 (cf. 변수-변하는 값)
final 키워드로 선언
final로 선언된 상수는 다른 값을 대입할 수 없음
보통 대문자로 표현

package binary;
public class Constant {
    public static void main(String[] args) {
        final int STUDENT_NUM = 30;

        int num = 0;
        if ( num == STUDENT_NUM ) {}

        System.out.println(STUDENT_NUM);
    }
}


리터럴(literal)
프로그램에서 사용하는 모든 숫자, 값, 논리 값 (10, 3.14, true 같은 값들)
리터럴에 해당되는 값은 특정 메모리 공간인 상수 풀(constant pool)에 있어 필요한 경우 상수 풀에서 가져와서 사용
상수 풀에 저장할 때 정수는 int, 실수는 double로 저장
long, float값으로 저장하는 경우 식별자(L, F)를 명시해야 함

형 변환(type conversion)
자료형은 각각 사용하는 메모리 크기’ 방식이 다른데, 서로 다른 자료형 값이 대입되는 경우 형 변환이 일어남

묵시적 형 변환
작은 수에서 큰 수로, 덜 정밀한 수에서 더 정밀한 수로 대입되는 경우

long num = 3; //int값에서 long으로 자동 형 변환

package binary;
public class ImplicitConversion {
    public static void main(String[] args) {
        byte bNum = 10; //byte 1바이트
        int num = bNum; //int 4바이트
        System.out.println(num); //10

        long lNum = 10; //long 8바이트
        float fNum = lNum; //float 4바이트
        System.out.println(fNum); //10.0

        double dNum = fNum + num; //double 8바이트
        System.out.println(dNum); //20.0
    }
}


명시적 형 변환
묵시적 형 변환의 반대
변환되는 자료형을 명시해야 함
자료의 손실이 발생할 수 있음

double dNum = 3.14;
int num = (int)dNum; //int로 형 변환하겠다고 명시적으로 표시

package binary;
public class ExplicitConversion {
    public static void main(String[] args) {
        int iNum = 1000; //int 4바이트
        byte bNum = (byte)iNum; //byte 1바이트, 더 작은 수로 대입되기에 명시적으로 표시해줘야함

        System.out.println(iNum); //1000
        System.out.println(bNum); //-24

        double dNum = 3.14;
        iNum = (int)dNum; //명시적 형변환, dNum을 int값으로 표시하겠다
        System.out.println(iNum); //3

        float fNum = 0.9F;
        int num1 = (int)dNum + (int)fNum;
        int num2 = (int)(dNum + fNum);

        System.out.println(num1); //3, int 변환 후 더한 값 >>값의 손실
        System.out.println(num2); //4, 더한 후 int로 변환한 값
    }
}

'공부기록 > 사전학습' 카테고리의 다른 글

Java 사전학습_4  (1) 2022.11.02
Java 사전학습_3  (1) 2022.10.31
Java 사전학습_2  (1) 2022.10.28
Oracle  (1) 2022.10.22
DATABASE1~MySQL  (1) 2022.10.20

댓글