22.3.4
본격적으로 뭔가 배우고 머리쓰는 느낌의 시작
- 이거시 Java 다 -
3장. 연산자
1) 이항연산자(2)
- 정수타입의 나눗셈 : 두 피연산자가 모두 정수일 경우 결과도 int 타입(따라서 소수점은 표현불가)
- 소수점을 표현하기 위해서는 제수 or 피제수 중 하나를 실수타입으로 강제변환 필요( ex) num1 / (double)num2)
- %(나머지 연산자) : 우측 피연산자로 0사용 불가. 음수인 경우 절대값으로 연산
- int로 계산할시 최대값 or 최소값을 넘긴 상태로 계산결과가 나오게되면 쓰래기 값이 나옴
- 그래서 long 타입으로 변환해야 올바른 값을 얻을 수 있음
2) 메소드
- 객체간의 데이터 전달 수단
- 변환타임 : void(반환 타입 없음) / int, long, double 등등 참조타입(은 반드시 return이 나와야함)
- 매개변수 : 외부로 부터 전달받는 데이터, 없을수도있고, 1개 이상도 가능
- 메소드 호출 : 메인 메소드 밖에서 메소드를 선언하고 메인메소드 안에서 호출
- 메인메소드에서 선언한 변수값 혹은 문자열을 외부 메소드로 가져갈 수 있고, 다시 반환도 됨
- 외부메소드에서 데이터를 전달받아 메인 메소드에서 변수에 저장 혹은 바로 출력이 가능함(getMessage로 저장됨)
- 메소드를 선언할 때 타입변환은 상위로 맞춰서 변환해줘야 쓰래기값이 생기지 않음
3) OverFlow
- int 타입선언 후 계산했을시 최대 혹은 최소값을 넘어서는 결과가 나올 경우 오버플로우가 일어남
- 이럴 경우 Try ~ catch 문 + if문을 써서 오버플로우가 나오는 경우 데이터 처리를 멈출 수 있음
- boolean 타입으로 참 거짓을 판별(and는 &&로 표현)
- if문으로 오버플로우가 발생할 경우 진행이 불가함을 선언 할 수 있음
- 실수타입은 정확한 연산을 보장하지 않음(서로 처리하는 소수점 자리가 다름)
- 정확한 연산을 할떄는 정수타입으로 변환시켜 처리
- 실수타입을 0.0(double) , 0.0f(float)타입으로 나누는 경우 : 무한대(infinity)가 나옴
- 실수타입을 0.0(double) , 0.0f(float)타입으로 나머지 연산 : NaN(Not a Number)가 나옴
- 둘다 제대로 연산이 된상태가 아님
- 그러므로 해당 래퍼클래스에 저장된 isInFinite(), IsNaN()을 사용해 해당 연산을 수행하지 않게 함
(똑같이 try ~ catch, if문으로 조건을 걸어서 처리)
4) 입력값 받기(Scanner)
- Scanner 객체를 이용하여 사용자로부터 입력 값을 받을 수 있음
- Scanner 객체를 사용하려면 반드시 import 문이 필요
- Scan 이라는 이름으로 Scanner 객체생성, 이때 변수 scan을 객체의 참조변수라고 함
- 참조변수 scan을 통해 Scanner 객체에 저장된 메소드를 사용가능
- 문자열 입력값을 숫자형 타입으로 변환 : 래퍼 클래스에 있는 valueof()메소드는 문자를 해당 타입으로 변환
- String으로 지정된 타입을 double 등으로 변경 가능
- 문자열 + 숫자 연산 타입의 연산의 경우는 뒤에 숫자연산이 문자열로 자동처리
- 숫자연산 + 문자열은 숫자연산이 먼저 처리되고 뒤에 문자열이 붙는형태로 처리
5) 비교연산자
- 대소(>, <, >=, <=) 또는 동등(==. !=)을 비교해 boolean인 ture/false로 산출
- 동등 비교 연산자는 모든 타입에 사용
- 크기 비교 연산자는 boolean 타입제외 모든 기본타입에 사용
- 흐름 제어문인 조건문(if), 반복문(for, while)등에서 주로 사용
- 서로 다른 타입의 비교연산 : 더 큰 타입으로 변환 후 비교하면 됨. 다만 float와 double은 다르게 뜸(소수점처리가 다름)
- String 타입의 비교 : 동등비교연산자만 사용 가능(문자가 크고 작음이 없으니까)
- ex) String var1 = "고길동" / var2 = "고길동"
- 이렇게 2가지의 변수를 비교하면 같다고 나오지만, 이거는 실제 변수에 저장된 값을 비교하는 것이 아님
- 이것은 참조변수의 값을 비교한것
- var1 과 var2은 고길동이라는 값을 가지고 비교하는게 아니라 001이라 적힌 주소를 비교한것(
- 이렇게 변수선언 하는것은 리터럴방식
- ex) String var3 = new String("홍길동") : 이렇게 하는 것은 생성자 방식
- 생성자 방식으로 생성된 var3와 리터럴방식으로 생성된 var1,2를 비교하면 다르다고 나온다
- 생성자 방식은 항상 새로운 객체가 생성됨(그에 따른 참조변수 값도 달라짐)
- 리터럴 방식으로 문자열을 생성하는 경우 같은 문자열이 있으면(ex) "홍길동") 더이상 새로운 객체 생성 안함
------
여기까지! 주말동안 복습 및 이후 과정 예습할 것.
이제야 제대로 논리적 흐름의 세계가 시작되거 같음.
6) Java - 참조 타입 (0) | 2022.03.08 |
---|---|
5) Java - 조건문과 반복문 (0) | 2022.03.07 |
3) Java - 연산자 (0) | 2022.03.03 |
2) Java - 변수 (0) | 2022.03.02 |
1) 2.28 Day 1 - 어색함의 첫날 (0) | 2022.03.01 |
댓글 영역