상세 컨텐츠

본문 제목

4) Java - 연산자(2)

Today's Study/Academy

by Hello-Melo 2022. 3. 4. 14:49

본문

Chu~

 

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) "홍길동") 더이상 새로운 객체 생성 안함

 

 

------

여기까지! 주말동안 복습 및 이후 과정 예습할 것.

 

이제야 제대로 논리적 흐름의 세계가 시작되거 같음.

'Today's Study > Academy' 카테고리의 다른 글

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

관련글 더보기

댓글 영역