Language/Java

    [Java] 연산자(비교 연산자, 논리 연산자, 비트 논리 연산자)

    1. 비교 연산자 비교 연산자는 동등(==, !=) 또는 크기(=)를 평가해서 boolean 타입인 true/false를 산출한다. 비교 연산자는 흐름 제어문인 조건문(if), 반복문(for, while) 에서 실행 흐름을 제어할 때 주로 사용된다. 구분 연산식 설명 동등 비교 피연산자1 == 피연산자2 두 피연산자의 값이 같은지를 검사 피연산자1 != 피연산자2 두 피연산자의 값이 다른지를 검사 크기 비교 피연산자1 > 피연산자2 피연산자1이 큰지를 검사 피연산자1 >= 피연산자2 피연산자1이 크거나 같은지를 검사 피연산자1

    [Java] NaN과 Infinity 처리

    나눗셈(/) 또는 나머지(%) 연산에서 좌측 피연산자가 정수이고 우측 피연산자가 0일 경우 예외(ArithmeticException)가 발생한다. 무한대의 값을 정수로 표현할 수 없기 때문이다. 더보기 int x = 5; int y = 0; int result = 5 / 0; //예외 발생 하지만 좌측 피연산자가 실수이거나 우측 피연산자가 0.0 또는 0.0f이면 예외가 발생하지 않고 연산의 결과는 Infinity(무한대) 또는 NaN(Not a Number)이 된다. 더보기 5 / 0.0 → infinity 5 % 0.0 → NaN Infinity 또는 NaN 상태에서 계속해서 연산을 수행하면 안된다. 어떤 연산을 하더라도 결과는 계속해서 Infinity와 NaN이 되므로 데이터가 엉망이 될 수 있기 ..

    [Java] 정확한 계산 하는 방법

    정수 연산으로 계산하기 산술 연산을 정확하게 계산하고 싶다면 실수 타입을 사용하지 않는 것이 좋다. 아래의 코드 예제를 살펴보자. 사과 1개를 0.1 단위의 10조각으로 보고, 그 중 7조각(0.7)을 뺀 3조각(0.3)을 result 변수에 저장하는 코드이다. package ch03.sec04; public class AccuracyExample1 { public static void main(String[] args) { //산술 연산을 실수 타입으로 한 예시 int apple = 1; double pieceUnit = 0.1; int number = 7; double result = apple - number * pieceUnit; System.out.println("사과 1개에서 남은 양: " +..

    [Java] 오버플로우와 언더플로우

    오버플로우(overflow)란 타입이 허용하는 최대값을 벗어나는 것을 말한다. 반대로 언더플로우(underflow)란 타입이 허용하는 최소값을 벗어나는 것을 말한다. 정수 타입 연산에서 오버플로우 또는 언더플로우가 발생되면 실행 에러가 발생할 것 같지만, 그렇지 않고 해당 정수 타입의 최소값 또는 최대값으로 되돌아간다. 예를 들어 byte 타입일 경우 최대값 127에서 1을 더하면 128이 되어 오버플로우가 발생하여 연산 결과는 최소값인 -128이 된다. 마찬가지로 -128에서 1을 빼면 -129가 되어 언더플로우가 발생하는데, 연산 결과는 최대값인 127이 된다. byte value = 127; value++;//value 값에 1을 더함 System.out.println(value);//-128 va..

    [Java] 부호/증감/산술 연산자

    1. 부호 연산자 부호 연산자는 변수의 부호를 유지하거나 변경하는 역할이다. 연산식 설명 + 피연산자 피연산자의 부호 유지 - 피연산자 피연산자의 부호 변경 실질적으로 + 연산자는 잘 사용되지 않고, - 연산자는 변수값의 부호를 변경할 때 사용된다. 부호 연산자를 사용할 때 주의할 점은 부호 변경 후의 타입이다. 아래 코드를 살펴보자. byte b = 100; byte result = -b;//컴파일 에러 에러가 발생한 이유는 정수 타입(byte, short, int) 연산의 결과는 int 타입이다. 부호를 변경하는 것도 연산이므로 int 타입 변수에 대입해야한다. byte b = 100; int result = -b; 2. 증감 연산자 증감 연산자(++, --)는 변수의 값을 1 증가시키거나 1 감소시..

    [Java] 키보드 입력 데이터를 변수에 저장

    시작하기에 앞서 키보드로부터 입력된 데이터를 읽는 방법은 여러 가지가 있다. 이것은 나중의 글에서 다루기로 하고 이 글에서 사용하는 것은 기업체 코딩 테스트 문제에서 주로 사용하는 방법이다. 키보드에서 입력 받는 방법 키보드로부터 입력된 데이터를 읽고 변수에 저장하는 가장 쉬운 방법은 Scanner를 사용하는 것이다. 아래는 Scanner 타입 변수를 선언하고, 대입 연산자를 사용하여 new 연산자로 생성한 Scanner 객체를 변수에 대입한다. 더보기 Scanner scanner = new Scanner(System.in); scanner 변수 선언 Scanner 객체 생성 이후 다음과 같이 scanner.nextLine()을 실행하면 키보드로 입력된 내용을 문자열로 읽고 좌측 String 변수에 저장..

    [Java] 변수 사용 범위와 콘솔로 변수값 출력

    1. 변수 사용 범위 main() 메소드 블록에는 다른 중괄호 {} 블록들이 작성될 수 있다. 조건문에 해당하는 if, 반복문에 해당하는 for, while 등이 중괄호 블록을 가질 수 있는데, 이러한 중괄호 블록 내에서 선언된 변수는 해당 중괄호 블록 내에서만 사용이 가능하고 밖에서는 사용할 수 없다. 아래는 실제 코드에서의 예시들이다. public static void main(String[] args) {//메소드 블록 int var1;//메소드 블록에서 선언 if() { int var2;//if 블록에서 선언 //변수 var1과 var2 사용 가능 } for() { int var3;//for 블록에서 선언 //변수 var1과 var3 사용 가능 } //var1 사용 가능 //var2와 var3은 ..

    [Java] 타입 변환

    1. 자동 타입 변환 자동 타입 변환(promotion)이란 말 그대로 자동으로 타입 변환이 일어나는 것을 말하며, 보통 값의 허용 범위가 작은 타입이 허용 범위가 큰 타입으로 대입될 때 발생한다. 기본 타입을 허용 범위 순으로 나열하면 아래와 같다. 더보기 byte < short, char < int < long < float < double char 타입의 경우 int 타입으로 자동 변환되면 유니코드 값이 int 타입에 대입된다. char charValue = 'A'; int intValue = charValue;//65가 저장됨 자동 타입 변환에서 예외가 존재한다. byte 타입은 char 타입보다 허용 범위가 작음에도 불구하고 자동 변환될 수 없다. 왜냐하면 char 타입의 허용 범위는 음수를 포..

    [Java] 변수에 대한 이해_2 (논리, 문자열 타입)

    1. 논리 타입 논리 리터럴은 참과 거짓을 의미하며 true와 false로 이루어져 있다. 논리 리터럴은 boolean 타입 변수에 아래와 같이 대입이 가능하다. boolean t = true; boolean f = false; boolean 타입 변수는 주로두 가지 상태값을 저장할 필요가 있을 경우에 사용되며, 상태값에 따라 조건문과 제어문의 실행 흐름을 변경하는 데 사용할 수 있다. 또한 연산식 중에서 비교 및 논리 연산의 산출값은 true 또는 false이므로 boolean 타입 변수에 대입이 가능하다. 아래를 참고하자. int x = 10; boolena result = (x == 20);//변수 x의 값이 20인가? / False boolena result = (x != 20);//변수 x의 값..

    [Java] 변수에 대한 이해_1 (정수, 문자, 실수 타입)

    1. 변수란 무엇일까? 변수(variable)는 하나의 값을 저장할 수 있는 메모리 번지에 붙여진 이름으로 변수를 통해 프로그램은 메모리 번지에 값을 저장하고 읽을 수 있다. 변수가 존재하는 덕분에 데이터를 쉽게 저장하여 메모리 관리가 쉬워진다. 자바의 변수는 다양한 타입의 값을 저장할 수 없기 때문에 정수형 변수에는 정수값만 저장할 수 있고, 실수형 변수에는 실수값만 저장할 수 있다. 변수의 이름은 첫 번째 글자가 문자여야 하고, 중간부터는 문자, 숫자, $, _를 포함할 수 있다. 또한, 첫 문자를 소문자로 시작하되 캐멀 스타일로 작성하는 것이 관례라고도 한다. 캐멀(camel) 스타일: 여러 단어를 혼합하여 명명하는 경우, 대소문자가 섞여있도록 작성하는 스타일이다. 자바 소스 파일명과 변수명을 작성..