<어제 검색해서 찾은 것들>
: 없을 무
<데일리 루틴>
내배캠 공부
밥 잘 먹기
운동
1. 아스키코드
: Java의 기본적인 문자 저장(=표현) 규칙
1) import : 해당 코드 안쪽으로 바깥으로부터 리소스를 가지고 들어온다
2) Scanner : 코드를 실행시키면 콘솔 창에서 입력한 값을 받고 저장하는 메서드.
//숫자 >> 문자
import java.util.Scanner; //자바 하위요소인 util 하위에 있는 Scanner라는 메소드
public class Type_to_type_ascii {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int i = 0;
while (i == 0) {
//숫자 >> 문자
int asciiNumber = sc.nextInt();
char ch = (char) asciiNumber; // int 타입의 asciiNumber의 값을 문자로 형변환 한다.
//문자 >> 숫자
char ch = sc.nextLine().charAt(0); //첫번째 글자만 받아오기 위해 chartAt(0) 메소드를 사용한다.
int asciiNumber = ch; // char타입의 ch의 값을 int타입으로 형변환한다.
System.out.println(ch);
System.out.println(asciiNumber);
}
}
}
콘솔창에 입력한 문자(파랑)에 할당된 아스키코드의 숫자를 보여줌.
콘솔창에 입력한 숫자(파랑)에 할당된 아스키코드의 문자를 보여줌
2. 문자와 문자열
1) 문자 : 'ㄱ', 'A', '감' 홑따옴표를 사용, 문자 한 개만 저장하는 데이터 타입.
저장하는 관점에서 문자 타입은 시작과 끝이 명확하기 때문에(=1byte만 씀) \0(널문자)가 없다.
2) 문자열 : "ㄱ", "A", "감나무", "ABCD" 큰따옴표를 사용, 문자 혹은 문자 여러 개를 저장하는 데이터 타입.
저장하는 관점에서 문자열 타입은 문장의 끝이 명확하지 않아(=N byte를 사용) \0(널문자)와 함께 저장된다.
3) \0 널문자 : 구분을 하기 위한 문자
3. 참조형 심화
1) 좀 복잡하다 싶으면 참조형 변수이다. 그래서 데이터를 별도의 영역에 저장을 하고 그 주소를 get 해서 주소값을 저장하는 방식이다. 그래서 '참조형 변수 = 주소형 변수' 라고도 한다. 즉 참조형 변수는 실제 값이 아닌 '원본값의 주소값'을 저장한다.
Heap 영역 = 현 수준에서 참조형 변수를 위한 별도의 공간이라고 정의한다. 동적으로 할당된 메모리 영역이다. '동적'이라는 말은 유동적으로 변하기에 그 길이(값의 크기)를 모르는 것을 표현하는 말이다. 참조형 변수는 유동적으로 변한다.
Stack 영역 = 정적으로 할당된 메모리 영역이다. 기본값은 길이(값의 크기)가 정해져 있다. ex) int = 4byte, char = 1byte
4. 입력 & 출력
1) 입력 : Java에서는 기본적으로 Scanner.in 객체의 next( ) 명령을 사용해서 입력받는다.
Scanner sc = new Scanner(System.in); // Scanner 객체를 new 명령어로 생성한다
String input = sc.next(); // sc(Scanner)의 .next(); 를 실행하면
//input 변수에 입력한 글자를 받을 수 있습니다.
2) 출력 : Java에서는 기본적으로 System.out 객체의 println( ) 명령을 사용해서 출력한다.
Scanner sc = new Scanner(System.in);
String input = sc.next();
System.out.println("입력값 : " + input); // 입력한 글자를 출력한다.
// 실행 결과
{입력}
입력값 : {입력}
5. 형변환
1) 실수를 정수로 변환
public class Note {
public static void main(String[] args) {
//실수 >> 정수
double Dnum = 1010.10101;
float Fnum = 10.10101015F;
int Inum;
Inum = (int)Dnum; //double >> int
System.out.println("double형 : " + Dnum);
System.out.println("double >> int : " + Inum); // double >> int 한 것 출력
Inum = (int)Fnum; //float >> int
System.out.println("float형 : " + Fnum);
System.out.println("float >> int : " + Inum); //float >> int 한 것 출력
}
}
결과 창
코드는 위에서 아래로 순서대로 된다는 사실 또한 알 수 있다.
2) 정수를 실수로 변환
public class Note {
public static void main(String[] args) {
//정수 >> 실수
int Inum = 10;
double Dnum = (double) Inum;
float Fnum = (float) Inum;
System.out.println(Inum);
System.out.println("int >> double : " + Dnum);
System.out.println("int >> float : " + Fnum);
}
}
3) 변수 타입별 크기에 따른 변환
가) 작은 타입 값을 큰 타입으로
public class Note {
public static void main(String[] args) {
//변수 타입별 크기 순서
//byte(1) >> short(2) >> int(4) >> long(8) >> 정수/실수 >> float(4) >> double(8)
//char(1)
//자동 형 변환
byte bnum = 10;
int inum = bnum;
System.out.println(bnum + " byte >> int 자동 형 변환 가능");
char cAlpha = 'A';
inum = cAlpha;
System.out.println(inum + " 'A'의 유니코드(=아스키코드 상위버전)");
inum = 100;
long lnum = inum;
System.out.println(lnum + " int >> long 자동 형 변환 가능");
inum = 200;
double dnum = inum;
System.out.println(dnum + " int >> double 가능, 뒤에 .0이 붙음");
}
}
나) 작은 타입과 큰 타입의 계산
public class Note {
public static void main(String[] args) {
//작은 크기의 타입이 큰 크기의 타입과 '계산'될 때,
//자동으로 큰 크기의 타입으로 형 변환이 된다.
int inum = 10;
double dnum = 5.5;
System.out.println(inum + dnum + " : 자동으로 큰 크기의 타입으로 형 변환");
int iResult = inum / 4; // 1)정수로 나누기
double dResult = inum / 4.0; // 2) 실수로 나누기
System.out.println(iResult + " / int는 소수점 저장 못함. 결과값에서 소수점을 버림");
System.out.println(dResult + " / double은 소수점을 저장. 표현할 수 있음");
}
}
4) 자동 형 변환 vs 강제 형 변환
가) 자동 형 변환(=작은 타입 >> 큰 타입) : 값의 손실이 없다. 그림을 더 큰 도화지에 옮겨 그린다.
나) 강제 형 변환(=큰 타입 >> 작은 타입 = 캐스팅) : 값의 손실이 생긴다. 큰 도화지 그림을 작은 도화지로 옮겨 그린다. 개발자가 타입을 선택해야 한다.
<TMI. 요즘 피식대학 재밌다.>