Develop growth diary/JAVA

자바 기반 구조적 프로그래밍 03 - 라이브러리 활용, 조건문 if

pponyo 2022. 9. 29. 16:28
728x90
반응형

드디어 목요일! 이번주만 잘 이겨내면 3일 휴일이다아아아아~~~~~~~

 

오늘 수업의 시작은 실수 타입의 연산에서 Infinity 와 NaN :)

정수 타입의 연산에서 0으로 나누었을 때, 나머지 연산을 수행했을 때

오류가 발생하여 예외 처리를 해야하는 것과 동일할 것이라고 예상했는데 신기방기!

Infinity (무한대)
실수를 0.0 또는 0.0f로 나누었을 때 무한대로 발산

 

정수 타입의 연산에서 정수를 0으로 나누었을때는 예외가 발생했지만

실수 타입의 연산에서 double 타입의 0.0 또는 float 타입의 0.0f로 나누는 경우에는

무한대라는 뜻을 지닌 Infinity가 결과값으로 출력된다.

 

▶ 래퍼클래스 (Wrapper Class)
데이터 타입.POSITIVE_INFINITY  → 양의 실수 연산에서의 Infitiny ( 결과값: Infinity)
데이터 타입.NEGATIVE_INFINITY  → 음의 실수 연산에서의 Infinity (결과값: -Infinity)

boolean 변수명 = 데이터 타입.isInfinite();  → 해당하는 값이 Infinity이면 true 반환
boolean 변수명 = 데이터 타입.isFinite();  → 해당하는 값이 Finite이면 true 반환

 

NaN (Not a Number)
실수를 0.0 또는 0.0f로 나머지연산을 수행했을 때 숫자가 아닌 것으로 인식

 

다음은 실수를 double 타입의 0.0 또는 float 타입의 0.0f으로 나머지연산을 수행했을 때

Not a Number(숫자가 아니다)라는 뜻의 NaN이라는 결과값을 출력한다.

 

Infinity와 동일하게 '데이터 타입.NaN', 'boolean 변수명 = 데이터타입.isNaN'으로 활용이 가능하다.

 

Infinity & Nan 발생 시
연산을 수행하지 않도록 별도의 블록을 생성하여 블록 내 실행문 수행

 

이처럼 연산의 결과값이 Infinity 또는 NaN일 경우 예외 처리하여 예외 처리 블록을 수행할 수 있다.

별도의 블록을 생성하여 결과값을 확인하고, 그 결과값에 따라 실행문을 출력할 수 있도록 한다.

 

블록 내 조건문 if 구문을 활용하여 연산을 수행하였을 때 결과값이 Infinity 또는 NaN이라면

if문 내 실행문을 출력하고, 이후의 Line을 수행하지 않기 위해 'return;'으로 블록 메소드를 종료한다.

 

만약 연산의 결과값이 Infinity 또는 NaN이 아니라면 블록 내 실행문을 출력하도록 한다.

 

그리고 메인메소드에서 블록이 호출된 Line에서 해당되는 실행문을 출력한다.

(블록 내부의 모든 내용은 메인메소드에서 호출이 되었을때 수행되어진다.)

 

Scanner
Scanner를 활용하여 입력받은 값을 출력

 

Scanner 라이브러리를 활용해 값을 입력받고, 입력값을 활용하는 방법을 알아보았다!

유용하게 사용할 수 있고, 자주 활용하는 라이브러리이기 때문에 복습할 겸 기록해봅니다 :)

 

▶ Scanner 선언 및 활용
Scanner 변수명1 = new Scanner(System.in);

▶ 입력값이 문자열일 때 입력값의 활용 (참조 타입)
String 변수명2 = 변수명1.nextLine();

▶ 입력값이 정수일 때 입력값의 활용 (원시 타입)
Int 변수명3 = 변수명1.nextInt();

 

Scanner
예외 발생 처리

 

Scanner를 활용해 입력받은 값이 선언된 타입의 값이 아닐때 예외 발생 처리에 대한 예제이다.

 

ATM 기기라고 생각하고, int 타입의 값을 입력받아 현재 통장 잔액을 출력하는 과정이다.

 

try문 내에 if문을 활용하여 NaN이 아닐 경우(int 타입의 입력값일 경우) 잔액을 계산하고,

int 타입 이외 다른 데이터 타입의 값이 입력되었을 경우에는 예외 처리하여 catch문을 수행하며

NaN값이 입력되었을 때는 예외 발생으로 구분되지 않기 때문에 별도의 실행문을 수행하도록 한다!

 

 

반대로 try문 내 if문의 조건을 입력값이 NaN일 경우로 설정하여 수행할수도 있다!

두 가지 방법 모두 입력값에 따른 출력결과는 같다 :)

 

valueOf()
입력값의 타입을 변환하여 출력하는 방법

 

'데이터타입.valueOf(변수명)'를 활용하면 숫자로 구성된 String 또는 char 타입의 문자를

int, double, float 등의 숫자형 데이터 타입으로 변환하여 활용할 수 있다.

 

문자열로 구성된 String 또는 char 타입의 문자는 valueOf()를 활용하면 예외가 발생하여 수행되지 않는다.

 

+ 부호의 활용 비교

 

+ 부호는 산술연산자 또는 문자열의 연결, 2가지로 활용될 수 있는데

'숫자+숫자'는 산술연산자로 활용되어 숫자의 덧셈 결과값,

'문자열+숫자' 또는 '숫자+문자열'에서는 문자열의 연결로 수행되어 문자열의 결과값을 가진다.

(int 타입과 String 타입이 만나면 int 타입의 값이 String 타입으로 변환된다!)

 

산술연산자는 왼쪽에서 오른쪽으로 수행되어지므로 순서대로 수행되어지면

위와 같이 str1과 str2의 결과값이 다르게 출력되는 것을 확인할 수 있었다.

 

문자열의 비교

 

String 타입의 문자열을 같은 값으로 입력하여 비교했을 때의 결과를 확인해보았다.
String 타입의 문자열에서는 실제 값의 비교가 아닌 참조변수의 값을 비교하여 결과를 출력한다.

 

예시를 통해 그 의미를 자세하게 살펴보면

str1과 str2에서는 생성자 new를 활용해 String 객체를 별도로 생성(생성자 방식)하였기 때문에

각자 다른 참조변수의 값을 가지게 되고, str1과 str2는 서로 다른 객체, 즉 서로 다른 값으로 인식한다.

 

이와는 다르게 str3에서 객체가 생성되고, 그 이후 생성자 new를 활용하지 않고

그대로 str4, str5에 같은 값을 대입(리터럴 방식)하게되면 str3, str4, str5는 모두 같은 객체로 간주되어져

같은 참조변수 값을 가지는 str3와 str4, str5는 모두 같은 값으로 인식한다.

 

그리고 참조값이 다른 두 문자열은 '변수명1.equals(변수명2)'를 활용하여 실제 값의 비교가 가능하다.

 

논리연산자 AND 연산자(논리곱)
논리연산자 OR 연산자(논리합)

 

논리연산자 AND(&&, 논리곱), OR(||, 논리합) 예제에서는

논리연산자와 if문을 활용하여 입력값의 유효성 검사에 활용해보았다.

 

'변수명.length()'를 활용하면 문자열의 길이를 int 타입의 데이터로 활용 가능!

 

복합대입연산자
+=, -=, *=, /=, %=

 

복합대입연산자는 간단하게 살펴보고 넘어가자!

 

'(변수) (복합대입연산자) (피연산자);'를 활용하면

'(변수) = (변수) (산술연산자) (피연산자);'의 값을 간단하게 표현할 수 있다.

 

if문에서 중괄호{ }의 생략

 

if문 내 실행문이 1줄일 경우에는 중괄호를 생략할 수 있다.

가독성을 위해서 중괄호를 생략할 경우에는 줄띄움으로 구분해주면 좋을 것 같다 :)

 

if~else if~else문

 

if~else if~else문에서는 if~else문보다 좀 더 세분화하여 조건과 실행을 수행할 수 있는데,

예제를 풀다보니 한 가지 궁금증이 생겼다!

 

 

이렇게 "각 구문을 모두 if문으로 작성하여 'return;'을 활용하는 것과 같은 것일까?"라는 의문이었는데,

'return;'은 메소드를 탈출할때만 사용이 가능하므로 메인메소드에서는 활용이 불가능하다는 것을 알게되었다 :)

 

대신 메인메소드 밖에 블록을 생성하여 호출하는 방식으로 코드를 작성하면 위와 같은 방식도 활용이 가능하다!

(휴일동안 집에서 직접 작성해보고 디버깅까지 살펴보기 목표!!!!!!!!)

 

Math.random()
0부터 1사이 임의의 수를 생성하는 메소드

 

 

'Math.random()' 메소드는 0부터 1사이의 모든 실수들을 임의로 생성하지만

산술연산을 통해 원하는 범위를 지정하여 int 타입으로 변환해주면 로또 번호 생성 등의 활용도 가능하다.

 

728x90
반응형