2일차 수업 내용 정리
** 환경 변수 설정
=> 운영체제에서 옵션을 설정
=> 윈도우 : 탐색기에서 [내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의 보수