목차
1. 데이터 저장단위 & 데이터 표현방법
2. 변수
2-1. 리터럴
2-2. 변수
3. 데이터 타입(DataType)
-정수형, 실수형
1. 데이터 저장 단위와 표현방법
1-1. 데이터 저장 단위
1. 비트 Bit : 0 or 1. 가장 최소의 저장단위
2. 바이트 Byte : 8bit
- 1byte = character(영문자)
- 프로그램을 사용할 때 기본단위
- 숫자->영문자 변환 (ASCⅡ코드 사용해서)
3. 1KB = 1024byte
4. 1MB = 1024KByte
5. 1GB = 1024MByte
6. 1TB = 1024GByte
*bps(bit per second) : 1초동안 전달할수있는 비트의 수 ex) 1Gbps
1-2. 데이터 표현 방법
8비트 중 가장 앞에 있는 Bit = " sign bit " 라고 함. (0 : 양수, 1 : 음수)
맨 앞을 뺀 나머지 7비트 = " data bit " 라고 함.
Q. 정수 50 → 1byte(8bit)로 표현해보기
A.
50 → 0010010(2)
1의 보수화 → 11001101(2)
2의 보수화 → 11001110(2)
2. 변수 Variable
2-1. 리터럴
: 프로그램에서 값을 표현하는 방식
정수형(IntegerType) 리터럴 : 소수점이 없는 숫자값
=>java에서 정수형 리터럴은 기본적으로 4byte로 표현.
2-2. 변수 (Variable)
: 리터럴(값)을 저장하기 위해 메모리에 부여된 이름.
- 변수는 만들어서 사용.
- 변수명 : 리터럴을 저장해 메모리를 구분하기 위해 사용되는 식별자 (Identifier)
- 변수 선언 : 메모리에 변수 생성
- 형식 : 자료형 변수명;
[식별자 작성규칙]
1. 영문자, 숫자, 특수문자( _ or $ 사용가능)를 조합하여 작성
- java에서는 한글을 식별자로 사용가능(자바는 아스키코드가 아니라 유니코드로 인식하기 때문. but 권장은X)
2. 숫자시작X
3. 영문자 대소문자 구분하여 작성
4. 길이 제한X
5. 기존 사용단어(키워드(예약어), 이미 사용한 식별자)는 식별자 재선언 불가.
[Java에서 사용되는 식별자 작성 방법]
- 표기법 : 영문자의 소문자를 기본으로 식별자 작성
1. 파스칼 표기법(PascalCase) - 조합된 단어의 첫문자를 대문자로 작성 (클래스명, 인터페이스명, 나열형 등)
2. 카멜 표기법(CamelCase) - 첫번째 단어를 제외한 나머지 단어의 첫문자를 대문자로 표현하여 작성 (변수명, 메소드명)
3. 스네이크 표기법(SnakeCase) - 조합된 단어를 언더바(_)로 구분하여 작성 (상수constant :상수는 무조건 대문자로작성)
[정수값(Int)을 저장하기 위한 변수 선언(생성)]
1) 대입연산자(=)를 이용하여 값을 변수에 저장.
*대입연산자(=)는 같다가 아님. 같다는 (==) 이다.
2) 변수는 왼쪽. 값은 오른쪽에 작성해야만 한다. (안 지키면 error)
3) 읽을 때는 오른쪽에서 왼쪽으로. ["대입연산자, 단항연산자" 2개만 해당. 나머지는 왼->오 순서로 읽음.]
package basic;
public class VariableApp {
public static void main(String[] args) {
int su; // 정수값을 저장하기 위한 변수 선언(생성)
su = 100; // 대입연산자(=)를 이용하여 값을 변수에 저장. 변수는 왼쪽. 값은 오른쪽에 입력.
System.out.print("초기값 = ");
System.out.println(su); //변수에 저장된 값을 화면에 출력하겠다=> ()안이 공백이기 때문에.
//int su: //동일한 이름의 변수를 재선언 할 경우 에러 발생
su = 200; //기존에 변수 su에 저장되어 있던 100은 삭제됨. 새로운 값200 저장.
//새로운 변수가 선언되면 그 전에 저장되어있던 값은 삭제되고 새로운 값이 변수에 대입됨.
System.out.print("변경값 = ");
System.out.println(su);
}
}
<출력 결과>
초기값 = 100
변경값 = 200
*피연산자가 하나라도 문자열이면(문자열과 값 결합) 문자열 -> 결과값 : 문자열
- 프로그램을 읽을 때 왼쪽부터 오른쪽으로 읽기 때문에 맨 앞이 문자열이면 문자열로 인식한 이후로는 숫자가 와도 전부 문자열로 인식함.
- 앞에 문자열 없이 숫자가 오면 숫자자체로 인식하기 때문에 연산자가 있으면 연산을 진행. 그러나 그 이후에 문자열이 또 온다면 그 이후로는 숫자가 와도 문자열로 인식한다.
System.out.println("num = " + num);
System.out.println("올해는 "+2+0+2+3+"년입니다."); //올해는 2023년 입니다.
System.out.println(2+0+2+3+"년은 토끼띠해입니다.");
//7년은 토끼띠해입니다. =>실행오류.(잘못된 결과 발생) - 앞에 문자열 없이 숫자만 있기 때문에 더해짐.
//프로그램을 읽을 때 왼쪽부터 오른쪽으로 읽기 때문에 맨 앞이 문자열이면 문자열로 인식한 이후로는 숫자가 와도 전부 문자열로 인식함.
//앞에 문자열 없이 숫자가 오면 숫자자체로 인식하기 때문에 연산자가 있으면 연산을 진행. 그러나 그 이후에 문자열이 또 온다면 그 이후로는 숫자가 와도 문자열로 인식한다.
System.out.println(""+2+0+2+3+"년은 토끼띠해입니다.");
//디버깅 완료. ("" : NullString 비어있는 문자열- 추가) => 2023년은 토끼띠해입니다.
<출력 결과>
올해는 2023년 입니다.
7년은 토끼띠해입니다.
2023년은 토끼띠해입니다.
* 동일한 자료형의 변수는, 기호를 사용하여 나열선언 가능
int num1 = 100, num2 = 200;
System.out.println("연산결과 = "+num1+num2); // 잘못된 결과 발생. 더하기가 안됨. 문자열로 인식.
System.out.println("연산결과 = "+(num1+num2)); // 디버깅. 원하던 결과. 300. 계산 우선순서 : () → *,/ → +,-
System.out.println("연산결과 = "+(num1*num2));
System.out.println("연산결과 = "+num1*num2);
<출력 결과>
error
300
20000
20000
* other 예시
int kor = 88, eng = 90;
int tot = kor + eng;
//연산 결과를 변수(tot)에 저장. 국어점수+영어점수(88+90이지만 점수가 바뀌면 변수에 들어가는 값도 바뀔 수 있도록)
// 값은 무조건 변수에다가 저장해서 사용하기~
System.out.println("점수 합계 = " + tot);
<출력 결과>
점수 합계 = 178
* 변수의 값이 저장되어 있지 않은 상태에서 변수를 사용할 경우 에러 발생
int count; //변수 값 저장 안 된 상태
System.out.println("count = "+count); //에러0
int count = 10;
System.out.println("count = "+count); //에러X
int count = 10.0;
System.out.println("count = "+count); //에러0. count값이 정수가 아닌 실수값이라서.
<출력 결과>
error
count = 10
error
3. 데이터 타입
- 자료형, 실수형, +(추가)
<자료형(DataType)>
: 값을 표현하기 위한 키워드 또는 특정대상을 표현하기 위한 식별자
=> 값이나 특정 대상을 저장하기 위한 변수를 선언하기 위해 사용
- 변수에 저장될 리터럴의 형태(원시형, 참조형)
public class DataTypeApp {
public static void main(String[] args) {
System.out.println("<<정수형(IntegerType)>>");
System.out.println("정수형(10진수 100) = "+100); //10진수 정수형 리터럴 출력
System.out.println("정수형(8진수 100) = "+0100);
//10진수 앞에 0 붙이면 => 8진수 정수형 리터럴 출력
//println() 메소드는 정수값을 무조건 10진수로 변환하여 출력하기 때문에 진수변경시 0 or 0x 를 붙여야함.
System.out.println("정수형(16진수 100) = "+0x100);
//10진수 앞에 0x 붙이면 => 16진수 저수형 리터럴 출력
System.out.println("정수형(10진수 100) = "+100L);
//숫자값L - 정수형 리터럴(8Byte - LongType)
System.out.println("정수형(10진수 100) = "+2147483647);
// 4Byte로 표현 가능한 정수값 : -2147483648~2147483647
// 4Byte로 표현 불가능한 정수값을 사용할 경우 에러 발생
// System.out.println("정수형(10진수 100) = "+2147483648); //에러발생.
// 따라서 이럴때는 Long(L)type을 사용 - 정수값 뒤에 L(소문자l도 가능)을 붙여 8byte의 LongType으로 작성하여 사용한다.
System.out.println("정수형(10진수 100) = "+2147483648L);
}
}
<출력 결과>
<<정수형(IntegerType)>>
정수형(10진수 100) = 100
정수형(8진수 100) = 64
정수형(16진수 100) = 256
정수형(10진수 100L) = 100
정수형(8진수 100) = 2147483647
정수형(8진수 100) = 2147483648
* 정수값을 표현하기 위한 자료형(키워드) : byte (1Byte), short (2Byte), int (4Byte), long (8Byte)
byte (1Byte) : 네트워크 프로그램 만들 때 사용
short : C언어 때문에 만들어졌지만 거의 사용X
public class DataTypeApp {
public static void main(String[] args) {
byte a1 = 127; //1Byte : -128~127
short a2 = 32767; //2Byte : -32768~32767
int a3 = 2147483647; //4Byte : -2147483648~2147483647
long a4 = 2147483648L;
System.out.println("a1 = "+a1);
System.out.println("a2 = "+a2);
System.out.println("a3 = "+a3);
System.out.println("a4 = "+a4);
//int a5 = 100L; //값에 대한 손실이 발생할 수 있으므로(가능성임) => 에러발생. error
long a6 = 100; //숫자에 비해 그릇이 크므로 에러발생X(공간이 남아도는 것이라 효율은 떨어짐. 가독성떨어짐)
System.out.println("a6= "+a6);
}
}
<출력 결과>
a1 = 127
a2 = 32767
a3 = 2147483647
a4 = 2147483648
a6 = 100
<실수형(DoubleType) 리터럴>
: 소수점이 있는 숫자값
=> Java에서 실수형 리터럴은 기본적으로 8Byte(Double)로 표현 >> 부동 소수점 형식으로 숫자값 표현
public class DataTypeApp {
public static void main(String[] args) {
System.out.println("<<실수형(DoubleType)>>");
System.out.println("실수값(4Byte) = "+12.3F); //실수값F >> 4Byte 실수형 리터럴(FloatType)
System.out.println("실수값(8Byte) = "+12.3); //실수값 >> 8Byte 실수형 리터럴(DoubleType)
//println() 메소드는 실수값이 아주 작거나 큰 경우 지수형태로 변환하여 출력
System.out.println("실수값(8Byte) = "+0.000000000123);
//실수값을 지수형태로 표현하여 사용 가능
System.out.println("실수값(8Byte) = "+1.23E+10);
}
}
<출력 결과>
<<실수형(DoubleType)>>
실수값(4Byte) = 12.3
실수값(8Byte) = 12.3
실수값(8Byte) = 1.23E-10 //1.23*10의-10승
실수값(8Byte) = 1.23E10
* 실수값을 표현하기 위한 자료형 - float(4Byte), double(8Byte)
public class DataTypeApp {
public static void main(String[] args) {
float b1=1.23456789F;//가수부를 표현하기 위한 크기(정밀도) : 7자리
double b2=1.23456789;//가수부를 표현하기 위한 크기(정밀도) : 15자리
System.out.println("b1 = "+b1);
System.out.println("b2 = "+b2);
}
}
<출력 결과>
b1 = 1.2345679
b2 = 1.23456789
복습 후 느낀점
변수까지는 천천히 나가다가 마지막에 데이터타입에서 빠르게 진행되었다. 훅훅 지나가는 바람에 놓쳤지만 옆자리분과 강사님의 친절한 대답덕분에 이해할 수 있었다.
중간중간 비는 완벽하지 않은 복습이지만, 앞으로 공부하면서 더 정확하고 자세한 지식을 가질 수 있도록 노력해야할 것 같다.
정확하지 않은 정보는 정말,,, 쓸모도 없고 바보로 보이게 만드는... 절레절레다.
그리고 깃이랑 깃허브는 따로 공부 많이 해야 할 것 같았다. 와 진짜 우주세계다. 이리저리 제대로 사용하려면 제대로 공부해야 할 것 같은 느낌... 걍 소스 공유랑 저장만 할 거 아니니까.
양 옆으로 한 분은 전공자고, 한 분은 예습을 많이 해 온 상태라 혼자서도 뚝딱뚝딱 만드시는데 괜히 의기소침해지지만 오히려 나도 놀지만 말고 공부해야겠다는 생각이 많이 들었다. 따라가려면 힘들 것 같다ㅠㅠ
이번주는 무난해도 다음주부터는 좀 힘들겠다는 생각이 많이 들었다.
아무래도 이번 주말은 꼼짝없이 틀어박혀서 공부해야할 것 같다.
일단 자바의 정석 보면서 이번 주에 나간 분량 복습도 하면서 복습 노트 빈 부분과 부실한 부분 채워넣고, 나갈 부분 미리 예습 해 놓아야 겠다.
지하철 타고 다니는 시간이 많이 비던데 그 동안에 뭘 듣던가 해야할 것 같다.
팟캐스트나 영어듣기 연습해야할 듯.
열심히 공부하자!! 하다보면 실력은 는다!!!
'Language > Java' 카테고리의 다른 글
[Java] 범위 출력함수 / IntStream.range, rangeClosed (1) | 2023.10.12 |
---|---|
[Java] 분수 합 구하기 / 유클리드 호제법 (1) | 2023.10.10 |
[Java] 제곱 반환하기 / pow() (2) | 2023.10.10 |
[Java] Java 버전 확인하기(명령 프롬프트) (0) | 2023.05.16 |
Java와 Eclipse 설치 (0) | 2023.03.29 |