근데 뭐 2일차인게 중요한것도 아니고 다음부터는 배운 내용을 제목으로 해야겠다.
일단 오늘은 배운 내용을 정리해보자면
데이터 형과 변수에 대해서 배웠다.
당연히 다 아는 내용일거라 생각했지만
내가 대충 알고 넘긴것보다 훨씬 자세하게 배워서 좋았다. 특히 데이터 타입별로 저장될 수 있는 크기가 다르기 때문에
변수를 지정할 때 꼭 데이터 형을 써주는거란걸 알게 됐다.
그냥 정수는 int, 실수는 double이라고 외우는 것 보다 훨씬 깊게 알게된 느낌.
/*
* 프로젝트 명칭 (문법 X) => 본인이 찾기 쉽게 설정
* 변수, 클래스명 명칭법
* 1. 알파벳, 한글로 시작 (알파벳 사용시 => 대소문자 구분)
* 웹프로그램에서는 한글 사용시 인식을 못할 수 있다 (권장사항 : 알파벳)
* 2. 이름의 길이는 제안하지 않는다 (5~10)
* 의미를 줘서 저장하기
* 3. 숫자 사용 가능 (맨 앞에 오는 것은 불가능)
* 2a, 3a (X)/ a1, a1b (O)
* 4. 특수문자 : $, _만 사용가능
* 5. 키워드 (자바에서 이미 사용중인 단어)는 사용할 수 없다 (색상이 빨간색)
*
* ~오늘의 목표~
* 1. 변수
* 2. 데이터형
* 3. 연산자 일부 (단항, 이항, 삼항) : 보류
*
* 책 page 20
* 1. 09시-13시 => 기본 문법 (책)
* 2. 14시-17시 => 응용
* 3. 18시 (문제풀이)
*
* 변수 : 변하는 수 (값을 변경해서 사용할 수 있다.)
* => 한개의 데이터 저장할 수 있는 공간
* => 저장 : 컴퓨터에 명령을 내린다
* 1. 데이터 저장 크기를 설정
* (1byte, 2byte, 4byte, 8byte 중에서 어디에 저장할지 설정해야함)
* 2. 어디에 저장되는지 알 수 없음
* -> 저장된 위치에 이름을 부여함
* 3. 값을 첨부 (초기화)
* 4. 가공
* => 메모리 크기(데이터형, 자료형)
* 사용법 : 데이터형 (메모리 크기), 변수형 = 값
* ex) int a = 100
*
* 자바에서 제공하는 데이터형 (한 개의 데이터만 저장이 가능 -> 저장 메모리의 위치 : 변수)
* - 기본 데이터형
* 정수형
* byte (1byte) : -128 ~ 127
* short (2byte) : -32768 ~ 32767
* int (4byte) : 24억까지 (default)
* long (8byte) : 24억 이상의 숫자 / 데이터를 저장할떄 'L'자를 붙여야함
* long, int -> 숫자(l, L)
* 실수형
* float (4byte) : 10.5F(f)
* doulbe (8byte) : 10.5 / defualt 값 /10.5(d) (생략하고 씀)
*
* 문자형
* char (2byte) : 한 글자만 저장, 0~65535번까지 번호가 매겨질 수 있음
* 외국어 전체, 영문, 한글, 특수문자 사용가능
* 논리형
* boolean (1byte) : true, false만 저장이 가능
*
* - 참조형 데이터형
* 클래스 (원하는 데이터형이 없는 경우 : 20byte->사용자 정의) class
* 배열
*
*
* */
public class 변수_1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//1byte 메모리 공간에 정수 100을 저장한다
byte a = 100;
//byte : 메모리 크기, a : 변수, =100 : 초기화
/*
* 변수를 설정
* 메모리 크기결정 (데이터형 중에 한 개 설정)
* 변수명 설정
* 초기값 부여
*
* 왼쪽편에 있는 데이터형이 크거나 같으면 대입이 가능
* long = int 값, byte 값, short 값, long 값
* int = int, byte, short
* short = short, byte
* byte = byte
*
* int가 디폴트 (데이터형을 설정하지 않은 상태에서 정수를 사용하면 모든 숫자는 int로 인식한다)
*
*/
/*실수 : 평균, 통계, 건축 등의 분야에서 사용됨 (float, double) -> 일반 실수는 double을 인식
* 100.5(double), 모든 실수는 double이 default 값
*/
// 실수(4byte) 메모리 공간을 만들고 10.5를 저장해라
float floatValue=10.5f;
//문자 저장 : 문자한개 저장, 문자 여러개 저장
char charValue = 'A';
String stringValue="ABCDEFG";
//논리형 -> 조건문, 반복문
//true/false 저장하는 방법
boolean booleanValue = true;
//선언하는 방식, 초기값을 설정 -> 변수 (변경해서 사용하는 방법)
//변수 : 변경해서 다시 사용이 가능
//상수 : 변경할 수 없는 값
char c = 'B'; // 변수
c = 'D';
final char d = 'C'; // 상수
}
}
수업들을땐 이렇게 정리했는데 정말 가독성이 떨어지는 관계로 그냥 다시 정리겸 타자를 쳐보겠다.
변수 : 변하는 수 (값을 변경해서 사용할 수 있다.)
-> 한개의 데이터를 저장할 수 있는 공간
-> 저장 : 컴퓨터에 명령을 내리는 것
1. 데이터 저장 크기 설정
- 1byte, 2byte, 4byte, 8byte 중에서 어디에 저장할지 설정해야한다.
2. 어디에 저장될 것인지
- 저장된 위치에 이름을 부여한다.
3. 값을 첨부한다. (초기화)
ex) int a = 100; 이라고 한다면 a 변수는 100이라는 초기값을 갖게 된다.
4. 가공
메모리 크기 (데이터형, 자료형)
사용법 : 데이터형 (메모리 크기), 변수형 = 값
ex) int a = 100;
자바에서 제공하는 데이터형 (한 개의 데이터만 저장이 가능 -> 저장 메모리의 위치 : 변수)
- 기본 데이터형
정수형
byte (1byte) : -128 ~ 127
short (2byte) : -32768 ~ 32767
int (4byte) : 21억까지 (default)
long (8byte) : 21억 이상의 숫자 / 데이터를 저장할떄 'L'자를 붙여야함
long, int -> 숫자(l, L)
실수형
float (4byte) : 10.5F(f)
doulbe (8byte) : 10.5 / defualt 값 /10.5(d) (생략하고 씀)
문자형
char (2byte) : 한 글자만 저장, 0~65535번까지 번호가 매겨질 수 있음
외국어 전체, 영문, 한글, 특수문자 사용가능
논리형
boolean (1byte) : true, false만 저장이 가능
- 참조형 데이터형
클래스 (원하는 데이터형이 없는 경우 : 20byte->사용자 정의) class
/*
* 정리
* 기본형 데이터
* 1byte 2byte 4byte 8byte
* =======================================
* 정수 byte short int long
* default
* System.out.println(100)
* 컴퓨터에서는 int로 인식
* -> int와 long구분 l(L) 붙이기
*============================================
* 실수 float double
* default
* System.out.println(10.5)
* 컴퓨터에서는 double로 인식
* ->float와 double구분 f(F) 붙이기
* ===========================================
* 문자 char
* ===========================================
* 논리 boolean
* ===========================================
*
* */
public class 변수_2 {
public static void main(String[] args) {
/* 변수 설정
* 정수 (4byte)를 저장한 100으로 저장 */
int x = 100; // 초기값
//왼쪽으로 5만큼 이동
x=95; //값이 변경됨
x=90; //값이 또 변경됨
System.out.println("x="+x);
/* 변수의 값을 변경 (가공-> character가 이동 ->x,y)
* 변경된 값을 출력
* */
char c = 'A';
// 'A'를 저장 -> 'A'를 'B'로 바꾼다
c='B'; // c라는 메모리 공간에는 최종값이 저장된다.
System.out.println("c="+c);
//변수는 반드시 초기값을 대입한다.
//4byte 정수를 3개 만들고 100, 200, 300을 저장
int a = 100;
int b = 200;
int d = 300;
//이렇게 한 번에 선언도 가능함
int e=100, f=200, g=300;
/*
* 1. 선언(변수설정)
* - 선언과 동시에 초기값을 대입
* int a = 100; // default
* - 선언을 하고 나중에 초기값을 대입
* int a; //입력값을 받거나 외부에서 데이터를 가지고 올때. 난수발생
* a=100;
* */
int k;
k=500;
//설정된 데이터를 출력
System.out.println("a="+a+"b="+b+"d="+d+"k="+k);
//실수
float F = 10.9F; // float f = (float) 10.9; -> 형변환
// UP Casting (데이터형 커짐), Down Casting (데이터형 작아진다)
// 프로그램이 어려워짐 , 결과는 같지만 개발자마다 소스코딩이 다르기 때문에
//기억
double w = 100;
// 100 -> 자동으로 100.0
int u ='A'; // u = 'A' (X) u=65 (정수로 변경한 결과)
System.out.println("u="+u);
System.out.println("w="+w);
/* 데이터형의 크기
* ==========
* byte < short, chat < int < long < float < double
* 정수보다는 실수가 크다
* = 메모리 크기로 설정하는 것이 아니라 숫자를 표현할 수 있는 갯수
* 1
* 1.000000
* 1.0000000000000
* */
System.out.println("byte의 최소값 : "+Byte.MIN_VALUE);
System.out.println("byte의 최대값 : "+Byte.MAX_VALUE);
System.out.println("int의 최소값 : "+Integer.MIN_VALUE);
System.out.println("int의 최대값 : "+Integer.MAX_VALUE);
System.out.println("long의 최소값 : "+Long.MIN_VALUE);
System.out.println("long의 최대값 : "+Long.MAX_VALUE);
귀찮은 관계로... 그냥 이렇게 첨부하겠다.
결국 핵심은 변수에 지정해줄 데이터의 크기에 따라 데이터 형이 달라지고 (byte, short, int long/ float, double)
정수와 실수의 default 값은 각각 int/double 이라는거.
이게 내가 int 와 double만 알고 있었던 이유라는걸 오늘에서야 알게 됐다.
public class 변수_3 {
public static void main(String[] args) {
//두개의 변수 x=10, y=20
int x = 10;
int y = 20;
x=y; // y가 가지고 있는 정수값을 x에 대입 , x=20
System.out.println(x); // 20
System.out.println(y); // 20
y=x;
System.out.println(y); // 20
//국어점수, 수학점수, 영어점수 -> 점수를 저장한 후에 출력
// 국어, 영어, 수학, 총점, 평균 출력한다.
int kor = 90;
int eng = 99;
int math = 100;
System.out.println("총점 : "+(kor+eng+math)); // 괄호를 쓰면 먼저 계산됨
System.out.println("평균 : " + (kor+eng+math)/3);
// 정수/정수 = 정수 -> 5/2 -> 2
System.out.println(5/2);
char c = 'A'; //65
char d = 'B'; //66
System.out.println(c+d); //131
String s = "A";
String s1 ="B";
System.out.println(s+s1); // "AB"
/*
* any타입+문자열 = 문자열 -> 10+"a" === "10a"
* "a"+10.0 === "a10.0"
* : 어떤 데이터형이든 상관 없이
*/
System.out.println((float)(10/3.0));
System.out.printf("%.2f", 10/3.0); // 소수점 2자리 수만 출력됨
System.out.printf("%.1f\n", 10/3.0); // JDK 1.5 이상에서 새로 등장한 기능, C언어에서 가져옴
//exe파일 -> 배포
/*
* 서식이 있는 출력
* 사용기호
* %d : 정수
* %c : 문자
* %s : 문자열
* %f : 실수
*
*
* 특수기호
* \n : new Line (다음줄에 출력)
* \t : tab (일정 간격 띄움)
*
*/
System.out.printf("%d\n", 100);
System.out.printf("%s\n", "Hello");
System.out.printf("%c\n", 'C');
System.out.printf("%5d%5d%5d", 100,80,70);
/*
* %5d (오른쪽부터)
* 다섯 칸을 가져오고, 오른쪽에서부터 입력된 숫자가 채워지게 해줌
* 000000000000000
* 100 80 70
* %-5d (왼쪽부터)
*
*/
}
}
역시 이미 알고 있었던 부분도 있었고, 새로 알게된 부분도 있었다.
sysout + ctrl + space 를 치면 자동으로 뜨던 System.out.println 도 사실은 많은 출력 메소드 중에 default 였다는것
ln - > new line 이라는 뜻이라서 이렇게 쓰면 결과값이 한간 띄우고 떴던것.
System.out.printf 도 있다.
printf 는 서식이 있는 출력으로, ( ) 안에 ("서식", 값)을 써줘야 한다.
ex) System.out.printf("%..2f", 10/3.0); // 3.33
라고 써주면 소수점 두자리 까지만 출력된다
* 줄바꿈 하고 싶으면 역슬래쉬+n 붙여 줘야함
사용기호
%d : 정수
%c : 문자
%s : 문자열
%f : 실수
특수기호
\n : new Line (다음줄에 출력)
\t : tab (일정 간격 띄움)
특히나 숫자를 써줄때 %6, %5 와 같은 표시는
만약 %5라면은 다섯 칸을 가져오고, 오른쪽에서부터 입력된 숫자가 채워지게끔 지정하게 한다.
%-5는 왼쪽부터 지정된다.
5칸을 가져온다는걸 세련된 언어로 바꾸면 '5개의 출력공간을 확보한다' 라고도 쓸 수 있다.
다음은 Scanner 기능
// Scanner : 키보드 입력값을 받아서 메모리에 저장
//BufferedReader : 예외처리
// Scanner를 사용하기 위해서는 반드시 클래스를 불러 온다
// 이미 만들어진 클래스를 읽어올때 사용 : import
import java.util.Scanner;
/*
* import : 자바
* include : C
* using : C#
* Kotlin : import (자바)
*/
public class 변수_4 {
public static void main(String[] args) {
//Scanner를 사용하는 방법
Scanner scan = new Scanner(System.in);
// new : 메모리 할당, System.in - 키보드 입력값
// System.out.print("정수 입력 : ");
// 키보드로 입력한 정수를 저장
// int input = scan.nextInt();
// System.out.println("키보드 입력값 : "+input);
// 뭔가 엑스형 명대사 기능에 쓸 수 있을 듯한?
int kor, eng, math;
System.out.print("국어 점수 입력 : ");
kor=scan.nextInt();
System.out.print("영어 점수 입력 : ");
eng=scan.nextInt();
System.out.print("수학 점수 입력 : ");
math=scan.nextInt();
//결과값을 출력
System.out.println("총점 : " + (kor+eng+math));
System.out.printf("평균 : %.2f", + (kor+eng+math)/3.0);
// 사용자로부터 입력값을 받아서 처리 Scanner
// 초기값 -> 임의로 지정 int kor = 80, 입력값을 받아서 사용 Scanner, 난수
/*
* System.out.println : \n 포함 (기본)
* System.out.print : \n 미포함
* System.out.printf : 소수점 출력이 필요할때
*/
/*
* 2.입력
* Scanner - 키보드 입력값을 받는 경우에 주로 사용
* //Scanner - 클래스
* =import java.util.Scanner
* : Scanner 를 저장
* *** 클래스를 저장할 시에는 반드시 new를 사용해서 저장
* Scanner scan = new Scanner(System.in)
* - 입력후
* **scan.nextInt() -> 정수를 입력 했을때
* **scan.next() -> 문자열을 입력했을 경우
* scan.nextDouble() -> 실수를 입력했을 때
* scan.nextBoolean() -> true/false
*/
}
}
Scanner는 화면으로 부터 값을 입력받는 기능이다. 정말 처음봤다.
그래서 배울때 신기했는데, 다 배우고나니 처음본 이유가 있었다.
별로 필요가 없는 기능이었다....!!
****아니다 내가 java 프로젝트에서 수익금 계산기를 만들려고 애를 썼을때 값을 직접 입력해주고 싶었었는데, 이 Scanner를 이용하면 괜찮은 계산기를 완성할 수 있을 것 같다.
=> 반드시 오늘 안에 수정하겠다.
여튼 Scanner를 사용하기 위해서는
import java.util.Scanner 를 써줘야한다.
그 다음엔 Scanner 클래스의 객체를 생성한다.
Scanner scan = new Scanner (System.in)
// new : 메모리 할당, System.in 은 키보드 입력값을 받겠다는 뜻이다.
값은 scan.nextInt() - 정수, scan.next() - 문자열 , scan.nextDouble() - 실수, scan.nextBoolean() - 논리연산자
의 형태로 입력해 주면 된다.
***내 수익금 정산기의 경우에는
달러와 원화를 동시에 입력 받아야 하기 때문에 int, double의 값을 둘다 사용해야한다.
지정후에는 println 이나 printf를 사용해서 값을 출력하면 끝이다.
오늘의 복습 끝
'programming > Gukbi' 카테고리의 다른 글
국비 교육 5일차 - 조건문 (0) | 2020.12.31 |
---|---|
국비 교육 4일차 - 연산자, 제어문 (0) | 2020.12.28 |
국비 교육 3일차 - 연산자 (0) | 2020.12.26 |
국비 교육 3일차 - 형 변환 (0) | 2020.12.26 |
국비 교육 1일차 (0) | 2020.12.22 |