수업 정리

2일차 수업 내용 정리

Vita500cc 2020. 4. 7. 21:24

** 환경 변수 설정
    => 운영체제에서 옵션을 설정
    => 윈도우 : 탐색기에서 [내PC] -> [속성] -> [고급시스템 설정] -> [고급탭] -> [환경변수]

1. Path(명령어를 편리하게 사용하기 위해)
    => 명령어만 입력해서 프로그램을 실행하고자 할때, 명령어를 찾는 디렉토리를 설정하는 환경변수
    => 자바 명령어는 자바가 설치된 디렉토리 안의 jdk/bin 디렉토리에 있음(C:\Program Files\Java\jdk1.8.0_221\bin)
    => 설정확인 : cmd에서 javac -version(jdk버전 확인) 입력

2. JRE_HOME
    => 자바 프로그램이 실행될 jre 버전 설정
    => 자바가 여러개 설치되었을 때, 실행할 버전을 지정하기 위해 사용(자바 1개일 경우 X)

3. ClassPath(현재는 Eclipse, Intelli J, NetBeans 등이 기본적으로 설정함 ==> 최근에는 불필요)
    => java 클래스 사용할 때, 찾는 순서를 지정하기 위한 환경변수
    => .;rt .jar 파일을 설정하는 경우가 있음


** Data Type(자료형)
1. Data 분류
 1) 일반적인 프로그래밍 언어에서의 분류(교재에서)
    => value(primitive), reference(non-primitive) 형으로 분류
    => 최근의 언어는 대부분 Reference 형만 지원
    // value type - 실제 데이터 값을 직접 전달(하드웨어의 발전에 따라 사용 감소추세)
    // Reference Type - 데이터의 위치 값을 전달(비슷한 여러개를 사용할 때, 이름을 1개만 사용하기 위해)
 2) 변경 여부에 따른 분류
    => 변경 가능 : Mutable(변수) , 동시사용 X 
    => 변경 불가 : Immutable(상수), 동시사용 O
 3) 저장 가능한 데이터 개수에 따른 분류
    => 1개 : scala , 0개 이상 : vector
 4) 데이터 모양에 따른 분류
    => 정형 : 틀이 존재(테이블 형태의 데이터, 이미지), 관계형 데이터 베이스(ex-RDBMS)
    => 비정형 : 틀이 비존재(텍스트, 음성등), MonggoDB, NoSQL도 여기 해당
    => 반정형 : 비정형 형태에서 정형으로 변경 가능한 데이터(JSON, XML등)
 5) 휘발성 여부에 따른 분류
    => Main Memory에 저장 : 휘발성으로 프로그램에서 만든 변수나 상수
    => 보조기억장치에 저장 : 비 휘발성으로 파일에 저장하는 것
 6) 저장 위치에 따른 분류
    => Client(Local) : 컴퓨터에 문제가 생기면 사용 불능
    => Server(Network상의 컴퓨터) : 내 컴퓨터에 문제가 발생해도 데이터 사용 가능

2. Java에서 수정 가능한 데이터와 수정 불가능한 데이터를 만드는 방법
 1) 수정 가능한 데이터 만들기(변수)
    => variable(변수)는 데이터를 메모리에 저장해 주고, 그 데이터를 사용할 수 있도록 이름을 붙인 것
    => 생성 : 자료형 + 변수이름 + ';'
    => 데이터 저장 : '변수이름 = 데이터' + ';'
    => 2가지 작업 동시 진행 : '자료형' + '변수이름 = 데이터' + ';'
    => 변수는 생성 할 때와 =의 왼쪽에 있을 때는 저장 할 수 있는 공간을 의미, 그 이외의 경우 저장한 데이터 의미
    => 하나의 영역에서 동일한 이름의 변수는 1번만 생성 가능
    => 자료형에 맞는 데이터만 저장 가능
 2) Java에서 데이터를 1개만 저장 할수 있는 자료형(Primitive Type)
    - boolean : True or False만 저장 가능
   
    - byte(1byte - 8bit) : 정수 저장
    - short(2byte - 16bit) : 정수 저장
    - char(2byte - 16bit) : 정수 저장 - 출력할 때는 정수에 해당하는 문자를 출력
    - int(4byte - 32bit) : 정수 저장 - 정수 자료형의 기본형
    - long(8byte - 64bit) : 정수 저장
    
    - float(4byte - 32bit) : 실수 저장
    - double(8byte - 64bit) : 실수 저장 - 실수형의 기본형, 수치보조 프로세서의 연산 단위, 실수연산시 double 계산
                                    실수는 예전에는 float, 최근에는 double을 사용
                                    실수는 지수 표기법으로 저장(31.4 -> +0.314E002)

    => bit : 0또는 1 둘중에 1개를 저장할수 있는 단위
    => 1byte -> 8bit : 통신의 단위
    => KB(1024byte) -> MB(1024KB)(Cache) -> GB(RAM) -> TB(HDD, SDD등) -> PB... 
    => WORD -> 컴퓨터나 운영체제가 한번에 사용할 수 있는 단위(32bit 64bit 운영체제)
 3) 변경 불가능(immutable)한 데이터 만들기
    => Literal : 개발자가 직접 입력하는 데이터
    => 정수 리터럴(17 : int형 정수 / 0x17 : 16진 정수, 0o17 : 8진 정수 / 17L : long형 정수(22억이상의 정수 표현시))
    => 실수 리터럴 : 일반적인 실수의 형태를 사용(실수 리터럴은 기본적으로 double)
          31.43 => +0.3143E+002로 변경해서 저장(지수표기법으로 표현 가능)
          float형 리터럴 : 뒤에 f추가(31.43f)
    => 문자 리터럴(문자는 글자 1개 - ' '안에 1개의 글자를 입력)
         컴퓨터는 숫자만을 저장하므로 문자 저장시 코드로 저장하고, 출력할 때 해당하는 문자 출력
         * ASCII Code : 미국에서 영문과 숫자를 코드화 한 것('0' = 48, 'A' = 65, 'a' = 97)
         * 제어 문자 : \다음에 영문자 1개를 추가하여 특별한 기능을 부여한 문자(모든 언어 공통)
           (\n : 줄바꿈 / \t : 탭 / \' : 작은 따옴표 / \" : 큰 따옴표 / \\ : \ / \0 : null)
    => boolean 리터럴 : true와 false
    => 참조 리터럴(null: 가리키는 데이터가 없음, 미지 값)
    => constant(상수) : 데이터에 이름을 만들고 값을 변경하지 못하도록 하는 것

                              (java - final(변수명은 모두 대문자 권장))
 Tip 
    - boolean은 다른 것과 구분하기 위해 이름(변수명) 앞에 is를 붙이는 것을 권장(boolean isPass = true;) 


3. 기본형 데이터 사용 규칙
 1) boolean 자료형의 변수에는 boolean 데이터만 대입 가능
 2) boolean을 제외한 나머지 자료형은 모두 숫자 데이터를 저장하는 자료형
 3) 자료형의 크기 비교
    => byte < short < char < int < long < float < double (메모리 크기 X, 표현 가능 숫자의 범위)
 4) 작은 자료형의 데이터는 큰 자료형의 변수에 대입 가능 (역은 불가능)

4. Type Casting(형 변환)
    => Data의 자료형을 변경하는 것
    => 기본형(1개를 저장하는 자료형)과 기본형이 아닌 데이터(0개 이상을 저장하는 자료형)끼리는 변환 X
 1) 자동 형 변환
    => 형 변환을 명시하지 않았지만 자동으로 데이터의 자료형이 변경되는 경우
    => 작은 자료형의 데이터를 큰 자료형의 변수에 대입시, 작은 자료형의 데이터는 큰 자료형 데이터로 자동 변환
         double d = 10; (d = double, 10 = int) //위의 문장은 double d = 10.0으로 변경되어 수행
    => 산술 연산(+, -, *, /, %)시 int보다 작은 자료형은 int로 변환하여 연산
    => 산술 연산시, 서로 다른 자료형끼리 연산하면 작은 자료형 데이터를 큰 자료형 데이터로 변환하여 연산 수행
    => 산술 연산의 결과는 2개의 데이터중 자료형이 더 큰 자료형으로 리턴 
 2) 강제 형 변환
    =>데이터의 자료형을 강제로 변경하는 것
    => 숫자 데이터는 숫자 데이터 자료형으로 변경 가능
    => boolean은 다른 자료형으로 변경이 불가능
    => 참조형(0개 이상의 데이터를 저장하는 자료형)은 상속관계인 경우에만 가능
    => 숫자 데이터의 강제 형 변환은 크기가 큰 데이터를 작은 변수에 저장하기 위해 or 원하는 연산 결과를 위해 사용
    => 참조형의 경우 원래의 자료형으로 돌아가기 위해 사용
    => 하는 방법 : (변경하고 싶은 자료형)데이터 - 데이터를 괄호안의 자료형으로 변경
         ex) (double) 20 = 20.0  /  (int) 10.7 = 10

5. Overflow / Underflow
    => Overflow : 저장할 수 있는 범위보다 큰 데이터를 강제 형변환하여 대입했을 때, 일어나는 현상
         ex) byte b = (byte)128; // byte는 -128~127까지 저장 가능 하므로 결과값은 -128이 나옴
    => Underflow : 저장 할 수 있는 범위 보다 작은 데이터를 강제 형변환 하여 대입했을 때, 일어나는 현상
         ex) byte b = (byte)-129; // 결과값은 +127이 나옴

6. 문자열 저장
    => 문자열은 0개 이상 문자의 집합 (" "가능)
    => 문자열 리터럴은 " " 안에 기재 ('A' : A라는 문자, "A" : A라는 문자열)
    => 문자열 자료형은 String
    => 문자열 저장 : String 이름 = "문자열";
    => 문자열 + 문자열 = 문자열 이어붙임  /  문자열 + 숫자 = 문자열로 변경하여 이어붙임

7. 리터럴을 저장하는 방법
    => 리터럴은 한번 저장하고 다음부터는 재사용
        int a = 10; //10이라는 값을 a에 대입 (X)
    //10이라는 데이터가 저장되어 있는지 확인, 저장되어 있으면 저장된 해시코드(위치)를 a와 매핑, 저장된 것이 없으          면 저장후 그 때의 해시코드를 a와 매핑
    *해시코드 : 구분하기 위한 유일무이한 것*

8. 진수 변환
 1) 2진법 - 개인 계산 : 10을 2로 나눈 몫과 나머지를 구함
             - 알고리즘 : 몫을 2로 나눔 -> 몫이 0이 될때까지 반복 -> 몫이 0이 되면 나머지를 역순으로 표기
 2) 보수(~표시)
    => 컴퓨터는 '-'가 없기 때문에 2의 보수를 취한다.
    => 9의 보수 : 모든 자리수를 더하여 9가 되게 하는 수 (ex - 23의 9의 보수는 76)
    => 1의 보수 : 모든 자리수를 더하여 1이 되게하는  수 (ex - 0110의 1의 보수는 1001)
    => 2의 보수 : 1의 보수 + 1 (ex - 0110의 2의 보수는 0110 + 1 )
         - 알고리즘 : 뒤에서 1을 만날때 까지 찾고, 1을 만나면 그 다음수부터 반대로 뒤집기
    => Overflow, Underflow의 원인은 자리수가 넘어가서 지워져서 발생
 3) Tip
    => 00000001의 2의 보수(=-1) -> 11111111 => 가장 큰수, 무한 
    => 위치 계산 중 -1을 리턴할 경우 없다는 의미이다.
    => -1은 1의 2의 보수