[JAVA] 21.05.18
능력단위명 : 응용 SW 기초 기술 활용
능력단위요소 : 데이터베이스 기초 활용하기
* eclipse 자바프로젝트 생성 시 module은 꼭! don't create 해준다
* 만들 땐 자바 프로젝트 > class로 생성!
[데이터 타입]
/* 자바에서는 변수, 상수 값을 담기 위해서
* 반드시 그 값의 타입에 맞는 변수를 사용해야 한다.
* 이를 데이터 타입 이라고 한다.
*
* 데이터 타입 2가지
* Reference (참조타입)
* Primitive (기본타입)
*
* 자바의 데이터타입은 P와 R로 크게 두가지로 나뉜다.
*
* 1. p타입은 수치형, 문자형, 논리형
* 각각의 타입들은 메모리 크기가 엄격히 제한된다.
*
* (1)수치형
* 정수형
* byte
* short
* int (기본)
* long
* 실수형
* float
* double (기본)
*
* (2)문자형 = 한 글자 = A, 가, 羅, $
* char
*
* (3)논리형 = 참/거짓 = true or false
* boolean
*/
<크기>
byte < short < int < long < float < double
long longNum = (long) pi; //크기와 상관 없이 실수를 더 크게 본다. 따라서 이것은 프로모션이 안됨
longNum = (long) fNum; //크기와 상관 없이 실수가 더 크기 때문에
<표식자>
longNum = 9223372036854775807L; //표식자. 숫자 뒤에 L을 붙이면 임시로 long타입으로 본다.
<데이터 타입의 캐스팅>
// 작은 타입과 큰 타입 계산시엔 기본 타입 이하이면 기본타입으로 변환, 계산된다
// 기본타입 이상일 경우에는 무조건 큰 타입으로 변환 후 계산된다.
byteNum = (byte) -13000; // byte는 -128~127, 넘어가면 다시 돌아감 (-128 다음은 127)
//타입이 = 를 기준 양쪽이 달라 대입이 안되니 억지로 (byte) 캐스팅해준다
byteNum = (byte) ((short) ((int) (longNum)));
float fNum = 3.14; 이렇게 하면 3.14를(기본)인 double로 보기 때문에 타입이 달라 오류!
<실수형>
/* 실수형
* float과 double이 있음
* double이 기본 타입이다.
* float에 값을 실수로 초기화 할 때는 표식자(f, F)를 넣어줘야 한다.
* (안 그러면 double을 넣는게 되어 컴파일 에러)
* 이유는 실수 값 자체가 double 메모리로 만들어지기 때문에
* float에 대입하는 것이 불가능
*
* 주의2
* 같은 값이라도 실수는 무조건 정수보다 큰 타입으로 인지
* 또한 float은 4byte 라고 하더라도 long(8byte)보다 큰 타입으로 인지
* 따라서 값을 대입할 때는 캐스팅 해야 한다.
*
*
*/
<문자형>
//char 문자형
//문자 하나를 저장합니다.
/* 반드시 값으로는 문자 하나가 와야 합니다. a A 가 羅 ^
* 하나 이상일 경우에는? String으로 저장
* 정수형 타입 0~65,535 = 2byte 음수는 X
*
* 문자형을 저장할 때는?
* 반드시 홀따옴표로
*
* 정수형이기 때문에 int에 프로모션 가능
* 반대로 int 값 또한 문자로 바뀔 수 있다. (cast)
*
*/
str = "" + char1 + char2 + char3; // ""를 빼면 char로 인식하지만 ""를 끼면 가장 큰 "", string을 기본타입으로~
<기본형식>
public class Hello{//클래스
public static void main(String[] args) {//메소드
int number = 10; //명령문장(변수 선언); 메소드 밖으로 나갈수 있음;
System.out.print("Hello");//명령문장; 메소드 밖으로는 못나감
//불러오기 = 호출 = 메소드 이름을 적어준다.
print();
}
}
<상수> : 모두 대문자로 표기
final int PAGE_NUMBER = 10;
//PAGE_NUMBER : 에러
final : 값 수정 불가. 고정된 값이므로 상수 앞에 붙여주세요
<변수> : var
/*
* 변수를 사용하는 주 목적은 같은 타입(type)의 값이
* 프로그램 실행 시 자주 변경되어야 할 때
* 이를 변수에 담아서 활용하기 위함.
* 변수는 정말 많이 사용됨.
*
* 1. 변수의 선언(초기화) 규칙 (★★★★★)
* (1) 변수는 특정 블럭{중괄호} 내부 어디에서건 선언 가능
* 만약 메소드 바디 내부에서 처음 선언되면 = 지역(local)변수
* 클래스 바디 내에서 선언되면 = 객체(인스턴스) 변수
* ex. public class Variable {
* int number2; //인스턴스 변수
* public static void main(String[] args) { //main메소드
* int number, num1, num2; //변수선언 = 지역변수
*
* 2. 변수가 처음 선언되면 그 변수를 포함하고 있는 블럭 내에서
* 절대로 재선언 불가능!! (★★★★★)
* = 같은 이름으로 선언 불가, 이름이 겹칠 수 없음
*
* 3. 변수가 처음 선언될때는 반드시 변수 좌측에
* 변수의 타입(type) 일명 데이터 타입이 선언되어야 합니다.
* (데이터 타입은 변수 이후에..)
*
* 4. 같은 타입의 변수는 한 라인에 ; 없이 계속 선언되어질 수 있으며
* , 로 구분하여 마지막 변수 끝에 ; 를 붙여줍니다.
*
* 5. 지역변수는 반드시 사용 전에 값이 초기화 되어야 합니다!
* ?초기화는 값을 처음으로 넣는 것.
* ex. int num = 1000; //변수선언 + 초기화
*/
<print문>
//문자열 + 문자열 ======== 연결
System.out.println("제 이름은 " + name + "입니다.");
//계산
System.out.println(10 + 10);
System.out.println("제 이름은 홍길동입니다.");
int age = 34;
//문자열 + 숫자 ======== 연결
System.out.println("제 나이는 " + age + "입니다.");
//숫자 + 문자열 =======연결
System.out.println(20 + "입니다.");
//숫자 + 숫자 + 문자열 ====== 계산 + 연결
System.out.println(20 + 10 + "입니다.");
//문자열 + 숫자 + 숫자 + 문자열
System.out.println("문자열" + age + 10 + "입니다."); // 출력 : 문자열3410입니다
//문자열 다음이면 무조건 문자로 연결한다고 생각하면 편함
System.out.println("문자열" + (age + 10) + "입니다.");
<캐스팅과 프로모션>
/* 캐스팅 / 캐스트
* 큰 타입을 작은 타입에 대입할 때 반드시 해야 하는 연산
* (type)을 명기해서 값을 대입시킨다.
* 이때 주의할 점! ★★★
* 상위 비트를 대입할 때 작은 타입에 맞게 잘라내기 때문에
* 값의 변화가 올 수 있음!!! ★★★
*/
//프로모션
/* 큰 타입에 작은 타입이 대입되는 것
* 작은 타입이 큰 타입에 자동으로 들어가는 것
* 캐스팅의 반댓말!! 값 변화? 없음
* 왜냐 byte타입은 short타입에 모두 들어갈 수 있으니까
* 또, 양쪽 타입이 달라도 좌측에서 허용 범위일 경우 프로모션 가능
* ex) byte bNum = 3 + 100; 에서 3+100은 int이지만 바이트에서 표현 가능!
* 따라서 프로모션으로 (byte) 3 +100으로 들어간다
*/
int result = code % 2; //모듈러(%) = 나머지 값
<숙제>?
리터럴 이란?
MIN_VALUE = 0x80000000;
MAX_VALUE = 0x7fffffff;
아스키 코드, 유니코드 표
utf-8, euc-kr, ms949
<번외>
sNum = 3+100일때 3+100은 무조건 기본타입인 int로 본다고 하셨는데
그럼 int값인 103이 더 작은 byte에 들어가려면
bNum = (byte) 3 +100; 이렇게 되어야 하는게 아닌가요??
SeungHyun YOON에서 나에게: (DM) 02:53 PM
103은 바이트에서 표현할 수 있지요?
그럼 캐스팅 없이 들어가는것 = 프로모션이 되요
나에서 SeungHyun YOON에게: (DM) 02:53 PM
넵
SeungHyun YOON에서 나에게: (DM) 02:53 PM
자신의 범위를 넘어갔다면 그때 캐스팅이 있어야 해요
나에서 SeungHyun YOON에게: (DM) 02:55 PM
아하 양쪽 타입이 달라도 좌측에서 허용할수 있는 범위이면 프로모션이 되는건가요?? 감사합니다!! 이해됐어용 b
SeungHyun YOON에서 나에게: (DM) 02:57 PM
감사합니다