본문 바로가기

신세계 국비과정/신세게 - Java 공부

1주차 배운점 느낀점 - 데이터 타입, 연산자, 출력문

728x90
반응형

 

 

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정리하면 이렇게 다시 복습,정리 하는 시간을 가질 수 있을 것 같다 다음주도 화이팅

반응형