1주차를 달리며
데이터 자동, 강제 타입변환에 대해 배웠다. 작은 데이터타입을 큰 데 넣었을때 자동으로 변하는 거 정도는 알고 있었지만 byte->char로 변환 안되는것은 몰랐다. 이렇게 새롭게 알게됐다. 아스키코드도 'a','A','0','9'정도는 각각 외웠었는데 다시보니 새롭다. 나를 다시 점검해보는 수업이었다.
담임선생님이 학생들 한명한명 이름도 외우려고하시고 친절한설명을 해주신다. 조금 뒤쳐질 수 있는 학생들을 이끌어주신다. 선생님을 잘 만난 듯 하다. 동기들과 어느정도 친해졌다. 다들 성격이 좋고 착한 분들만 모인 것 같다. 학생 동료들도 잘 만난 듯 하다. 하루하루 수업을 진행하고, 정규 수업 후 카페가서 과제 및 각자 수업을 복습하는 스터디를 가진다. 다 들 열정 가득하시다. 나에게도 좋은 영향이 온다. 동료들과 시너지를 가지고 열심히 공부할 생각이다.
배운점
char 타입도 정수타입에 속함, 처음부터 숫자로 저장된다.
char c = 65 -> 'A'
char c = 0x0041; -> 'A' (16진수)
double이 float 보다 범위가 넓고 정밀도도 높다.
이스케이프 문자
\" \' \ \u(16진수) \t (탭) \n
\r(캐리지리턴: 커서를 행 가장 앞으로 가져온다)
예: "abc\rdef" -> def
자동타입변환: 작은데에서 -> 큰데로 변환
byte < short
char<int<long<float<double.
정수에서 -> 실수는 무조건 타입변환
byte -> char (X)
강제타입변환(캐스팅 연산자)
int에서 -> byte
연산식에서 int 타입 자동 변환
정수타입변수가 피연산자면 int 타입보다 작은 byte, short 타입 변수는 int로 자동 변환
byte + byte -> int(변수)
byte x = 10;
byte y = 20;
int result = x+y;
오퍼레이터: 연산자
오퍼랜드: 피연산자
업캐스팅(프로모션) ↑
캐스팅 ↓
String 에서 -> int 변환
Integer.parseInt
printf
printf(%[$순번][-,0][전체자리수].[소수자리수]변환문자);
상품가격: 123원 %d원
상품가격: 123원 %6d원
상품가격: 123 원 %-6d원
상품가격: 000123원 %06d원
반지름이 넓이: 314.16 %10.2f (소수 두째자리까지)
1|홍길동 | 표적 %10d|%-10s|%10s
java.lang 은 디폴트로 import되어 있다.
byte result = 10+20; <- 컴파일 단계에서 연산수행, 리터럴이기 때문에
byte a = 10;
byte b = 20;
int result = a+b; <- 실행단계에서 연산수행 변수+변수
스트링과 숫자 연산+은 스트링이 된다
String str1 = "1"+(2+3);
String + 숫자 -> String
System.out.println(str1) -> 15
숫자를 -> String으로 바꾸기
String value = String.valueOf(3.14)
final
final 변수: 상수
final 메소드: 오버라이딩 안됨
final 클래스: 상속 안됨
Scanner를 받으면 다 String, 숫자로 사용하려면 숫자로 변경해주어야 함
오버플로우 : 타입이 허용하는 최대값 벗어나는 것
언더플로우 : 타입이 허용하는 최소값을 벗어나는 것
byte b = 128; -> -127 (X)오버플로우
b = -128;
b--; -> 127 (X)언더플로우
b = 127;
b++; -> -128
나눗셈 연산 예외 방지
나눗셈(/) 나머지(%)연산에서 좌측 피연산자가 정수 우측이 0 (정수/0) ArithmeticExeption
좌측 피연산자가 실수이거나 우측 피연산자가 0.0또는 0.0f면 예외발생은 안하지만 Infinity, Nan(Not a Number) 발생
Double.isInfinite() , Double.isNan() 으로 예외 방지
int x = 5;
double d = 0.0;
double z = x/d;
if(Double.isFinite(z)||Double.isNan(z))
System.out.println("값 산출불가)
문자열 비교식
.equals , !equals (! : 다른곳도 쓰임, 부정)
XOR 둘다 다르면 true
NOT ~
main 메소드 제일먼저 메모리 할당되고 제일먼저 실행
부동소수점 처리하는 방식이 다름
float f1 = 0.1f;
float f2 = 0.1;
double f2 = (float)0.1; -타입을 맞춰 주어야 함
equals는 object 클래스에 있음, String은 object를 상속받고 equals를 기능 추가한 것
char 입력받을 때
char a = sc.next().charAt(0)
자바는 char를 입력받지 못함
아스키코드
'A' -> 65
'Z' -> 90
'a' -> 97
'z' -> 122
0 -> 48
9 -> 57
1의보수: 다 바꾸기
00001010 을
11110101 로
2의보수: 1의보수에 1더해주기
11110101 + 1
11110110
3항 연산자
String result = (score>=80) ? "pass" : "fail";
switch
int numLetters = switch(day){
case Mon, Fri, Sun -> 6;
case Tue -> 7;
case Thu , Sat -> 8;
case Wed -> 9;
};
람다식: 간단하게 '->'이용하여 함수를 표현한것
(int a, int b) -> a+b
Outer
for문에 별명을 붙여서 해당 조건이 되었을 때 별명 붙인 for문 종료
** outer**: for(int i=1; i<10; i++) {
for(int j=1; j<10; j++) {
if(i*j == 72) {
System.out.println(i + " x " + j + " = " + i*j);
**break outer;**
}
}
}
회고
분명 난 java를 배운 전공생인데 간단한 연산자 문법에도 기억이 가물가물한 개념들이 많이 존재한다. 항상 겸손하며 배워나갈 예정이다. 과제로 코딩문제도 많이 풀고 있다. 배운내용 바탕으로 문제에 적용해 나가며 풀고있다. 내가 푼 문제도 새로 알게 된 내용을 바탕으로 velog정리하면 이렇게 다시 복습,정리 하는 시간을 가질 수 있을 것 같다 다음주도 화이팅
'신세게 - Java 공부' 카테고리의 다른 글
2주차 배운점 느낀점 - 빌더패턴, 자바빈패턴, 점층적 생성자 패턴 (2) | 2024.09.24 |
---|---|
2주차 배운점 느낀점 - UML, 모델링, 객체지향, 객체, 생성자 (5) | 2024.09.24 |
2주차 배운점 느낀점 - String 메소드, api 확인법, ArrayList, StringBuilder (4) | 2024.09.24 |
2주차 배운점 느낀점 - 배열, String, 메모리영역 (3) | 2024.09.24 |
1주차 배운점 느낀점 - 자바, JVM, 변수, 자료형 (3) | 2024.09.24 |