티스토리 뷰
연산자
1. 오버플로우(Overflow)와 언더플로우(Underflow)
오버플로우는 데이터 타입이 표현할 수 있는 최대 값을 넘었을 때 발생한다.
언더플로우는 데이터 타입이 표현할 수 있는 최소 값보다 작은 값을 나타낼 때 발생한다.
예시:
- 오버플로우 예시:
int maxInt = Integer.MAX_VALUE; // 2147483647
int overflowInt = maxInt + 1; // -2147483648 (오버플로우 발생)
System.out.println(overflowInt);
- 언더플로우 예시:
int minInt = Integer.MIN_VALUE; // -2147483648
int underflowInt = minInt - 1; // 2147483647 (언더플로우 발생)
System.out.println(underflowInt);
2. NaN과 Infinity 처리
NaN (Not a Number)과 Infinity는 주로 실수 연산에서 발생한다.
- NaN은 연산 결과가 정의되지 않거나 무의미할 때 나타난다.
- Infinity는 수의 범위를 벗어난 무한대를 나타낼 때 사용된다.
나눗셈 연산 후 NaN과 Infinity 처리 예시:
public class Main {
public static void main(String[] args) {
double a = 0.0;
double b = 0.0;
double c = 1.0;
double nanResult = a / b; // 0.0 / 0.0 => NaN
double infinityResult = c / a; // 1.0 / 0.0 => Infinity
// NaN 처리
if (Double.isNaN(nanResult)) {
System.out.println("Result is NaN");
} else {
System.out.println("Result: " + nanResult);
}
// Infinity 처리
if (Double.isInfinite(infinityResult)) {
System.out.println("Result is Infinity");
} else {
System.out.println("Result: " + infinityResult);
}
}
}
NaN과 Infinity 메서드를 사용하지 않고 조건식을 이용해서 처리하는 경우의 예
public class Main {
public static void main(String[] args) {
double a = 0.0;
double b = 0.0;
double c = 1.0;
double nanResult = a / b; // 0.0 / 0.0 => NaN
double infinityResult = c / a; // 1.0 / 0.0 => Infinity
// NaN 처리
if (nanResult != nanResult) { // NaN은 자기 자신과 같지 않다.
System.out.println("Result is NaN");
} else {
System.out.println("Result: " + nanResult);
}
// Infinity 처리
if (a == 0.0) {
if (c > 0) {
System.out.println("Result is Infinity");
} else if (c < 0) {
System.out.println("Result is -Infinity");
} else {
System.out.println("Undefined result");
}
} else {
System.out.println("Result: " + infinityResult);
}
}
}
요약
- 오버플로우: 데이터 타입의 최대 값을 넘는 경우
- 언더플로우: 데이터 타입의 최소 값보다 작은 경우
- NaN: 연산 결과가 정의되지 않을 때
- Infinity: 수의 범위를 벗어난 무한대 값
- NaN, Infinity를 사용하지 않더라도 조건식을 통해서 처리가 가능
비교 연산자
- 비교 연산자는 동등(==, !=) 또는 크기(<, <=, >, >=)를 평가해서 boolean 타입인 true/false를 산출.
- 흐름 제어문인 조건문(if), 반복문(for, while)에서 실행 흐름을 제어할 때 주로 사용.
구분 | 연산자 | 설명 |
동등 비교 | 피연산자1 == 피연산자2 | 두 피연산자의 값이 같은지를 검사 |
피연산자1 != 피연산자2 | 두 피연산자의 값이 다른지를 검사 | |
크기 비교 | 피연산자1 > 피연산자2 | 피연산자1이 큰지를 검사 |
피연산자1 >= 피연산자2 | 피연산자1이 크거나 같은지를 검사 | |
피연산자1 < 피연산자2 | 피연산자1이 작은지를 검사 | |
피연산자1 <= 피연산자2 | 피연산자1이 작거나 같은지를 검사 |
문자열을 비교할 때는 동등(==, !=) 연산자 대신 equals()와 !equals()를 사용
- 동등연산자는 두 변수의 주소(참조)를 비교
- equals() 메소드는 두 문자열 데이터의 값이 동일한지 비교 (대소문자 구분)
주석
주석은 코드에 대한 설명을 추가하거나, 특정 부분을 주석 처리하여 컴파일러가 무시하도록 할 때 사용된다.
1. 한 줄 주석
한 줄 주석은 //로 시작하며, 주석 기호 뒤에 오는 내용은 해당 줄의 끝까지 주석으로 처리된다.
// 이 주석은 한 줄 주석입니다.
int a = 5; // 이 변수는 정수형 변수입니다.
2. 블록 주석
블록 주석은 /*로 시작하여 */로 끝난다. 여러 줄에 걸쳐 주석을 작성할 때 사용된다.
/*
이것은 블록 주석입니다.
여러 줄에 걸쳐 주석을 쓸 수 있습니다.
*/
int b = 10;
3.문서 주석
문서 주석은 /**로 시작하여 */로 끝나며, Javadoc 도구를 사용하여 API 문서를 생성할 때 사용된다. 주로 클래스, 메서드, 변수 등에 대한 설명을 작성할 때 사용한다.
/**
* 이 클래스는 예제 클래스로,
* 주석의 종류를 설명합니다.
*/
public class Example {
/**
* 이 메서드는 값을 더합니다.
*
* @param x 첫 번째 값
* @param y 두 번째 값
* @return 두 값의 합
*/
public int add(int x, int y) {
return x + y;
}
}
4. TODO 주석
TODO 주석은 아직 완료되지 않은 작업이나, 나중에 수정해야 할 부분을 표시할 때 사용한다. // TODO:로 시작하며, 개발 도중 기억해둬야 할 일을 기록한다. 대부분의 IDE에서는 TODO 주석을 특별히 표시해 준다.
// TODO: 나중에 이 메서드를 최적화해야 함
public void someMethod() {
// 현재 구현은 비효율적일 수 있음
}
형상버전관리
강제 케스팅 데이터 타입이 큰 타입에서 작은 타입으로 변환할때 사용
객체의 주소값 문자열의 내용은 같아도 리터럴로 선언하였는지,
new 연산자로 선언하였는지에 따라 주소(참조)값이 다를 수 있습니다.
String str1 = "strong"; //리터럴로 선언
String str2 = "strong";
String str3 = new String("strong"); //new 연산자로 선언
String str4 = new String("strong");
문자열 리터럴을 사용하는 경우,
자바 컴파일러는 String Constant Pool이라는 영역에 같은 값의 문자열을 공유하여 메모리 사용량을 최적화합니다.
따라서 str1과 str2의 주소값은 같습니다.
하지만 new 연산자를 사용하여 새로운 문자열 객체를 생성하는 경우에는
Heap 영역에 저장되며 다른 주소값을 할당받습니다.
str1과 str3의 주소값은 다르며, str3과 str4의 주소값도 다릅니다.
String 참조변수 타입 = 교유의 주소값이 부여됨
서로 다른 주소값을 객체가 생성되어도 데이터가 같다면 덮어 씌움
runtime data area
'개발자교육' 카테고리의 다른 글
24_07_15 오늘의 수업내용 (0) | 2024.07.16 |
---|---|
24_07_12 오늘의 수업내용 (0) | 2024.07.12 |
24_07_10 오늘의 수업내용 (0) | 2024.07.10 |
24_07_08 오늘의 수업내용 (0) | 2024.07.08 |
24_07_05 오늘의 수업내용 (0) | 2024.07.05 |
- Total
- Today
- Yesterday
- 가변 길이 매개변수와 리턴
- 조건문
- JavaScript
- 클래스의 구성 멤버
- resultsetimpl
- stored program
- 문자열비교메서드
- ㅎgroupbyvs윈도우함수
- jsp의 주요 태그
- Java
- 호이스팅(hoisting)
- 객체 지향 프로그래맹의 특징(캡슐화|상속|다형성)
- cte ( common table expression )
- 반복문
- 데이터변환함수
- 오버로딩vs오버라이딩
- 뷰(view)
- 배열(Array)
- 제어흐름함수
- jdbc
- 변수표기법
- 데이터베이스(mysql)
- 필드 초기화와 사용
- 테이터베이스 설계
- 참조타입vs기본타입
- 함수범위vs블록범위
- get한글인코딩
- let-const-var
- javascript자료형
- http 프로토콜:get vs post
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |