브래의 슬기로운 코딩 생활
JAVA 프로그래밍 4주차 정리 본문
연산자
정의
언어 설계 시 특정한 연산을 수행하도록 예약된 단어 또는 기호
종류
산술, 관계, 논리, 증감, 비트, 배정, 동등 비교, 동종 비교
산술 연산자
결과값: 숫자형
피연산자 : 숫자형
컴파일러에 의한 광역화 형변환이 발생
- 3 + 5.0은 3.0 + 5.0 = 8.0으로 계산됨
- System.out.println("" + ch1 + ch2);
▪ 이 때 +는 좌측결합하는 연결(concatenation) 연산자ch1을 문자열로 변환하여 연결함
종류
✓+, -, *(곱하기), /(나누기), %(나머지)
overflow
- 제공되는 자료형으로 표현할 수 없는 큰 수
underflow
✓제공되는 유효자리수로 표현할 수 없는 수
자바는 infinite arithmetic을 지원함
- java.lang.Float, java.lang.Double에서 제공하는 기호상수 POSITIVE_INFINITY, NEGATIVE_INFINITY
- NaN (Not a Number)
- 이 경우 정보를 상실하게 되더라도 예외는 일어나지 않음
관계연산자
결과값 : 논리값(true, false)
- 조건문과 반복문에 주로 사용
- 좌측이 기준이 됨
피연산자 : 비교 대상이 될 수 있는 숫자, 논리값, 문자, 객체
종류
>, >=, <, <=, ==(equality), !=(inequality)
우선순위
- x > y + z는 x > (y + z)와 동일
- x == y < z는 x == (y < z)와 동일
논리연산자
결과값 : 논리값(true, false)
피연산자 : 논리값
종류
- && (둘다 만족), || (둘중의 하나 만족), !(부정)
우선순위
- x == y || x > y && y > z
증감연산자
결과값 : 정수형
피연산자 : 정수형
- 변수가 아닌 식에서 사용불가, 실수형에도 적용 안 됨
- 잘못된 예) (x + y)++
우선순위
x = 1;
y = ++x;
// x = 2, y = 2
w = 1;
z =w++;
// w = 2, z = 1
비트연산자
비트 단위로 연산 실행
결과값 : 정수형
피연산자 : 정수형
종류
~ (1의 보수), <<, >>(부호로 채움), >>>(부호에 무관, 0으로 채움), & (bitand), ^(exclusive-or), | (bit or)
우선순위
~ , <<, >>, >>>, &, ^, |
높음 ---------------- 낮음
배정 연산자(assignment)
오른쪽 식을 연산하여 연산 결과를 왼쪽 변수에 배정
결과값
- 기본형 변수인 경우 변수에 저장되는 값이 변경
- 참조형 변수인 경우 참조하는 대상이 변경
구문
- <변수> = <식>;
- <참조형 변수> = <객체>;
축약형 배정 연산자
=, +=, -=, *=, /=, %=, &=, ^=, |=, <<=, >>=, >>>=
조건 연산자 - 삼항 연산자, (조건식)?(참):(거짓)
결과값 : 식을 만족하면 참 영역을 반환
• 예)
public class ConditionalOperatorTest {
public static void main(String[] args) {
String result;
int fop1 = 10, fop2 = 15;
result = (fop1 >= fop2)?"true":"false"; // 10 >= 15 : false
System.out.println(fop1 + " >= " + fop2 + " : " + result);
result = (fop1 < fop2)?"true":"false"; // 10 < 15 : true
System.out.println(fop1 + " < " + fop2 + " : " + result);
}
}
instanceof, 동종 비교
같은 종류 또는 같은 상위 클래스로부터 생성된 경우, true를 반환
equality, 동등 비교
- obj1 == obj2
- 참조 변수의 비트 패턴을 비교, 비트 패턴이 동일한 경우 같은 객체를 참조하므로 true를 반환
연산자 우선 순위와 결합 방향
문장(statement)
정의
알고리즘을 프로그래밍 언어로 기술한 것으로 제어 흐름 관련 예약어 와 식과 세미콜론(;)으로 구성
종류
배정문
혼합문
제어문 : 조건문, 반복문, 분기문
표준입출력문
예외처리문
동기화문
배정문(assignment statement)
새로운 값 또는 수정된 값을 변수(=기억장소)에 저장하는 문장
구문
<변수> = <식>;
우측에 있는 식을 연산한 결과의 자료형과 좌측 변수의 자료형이 다른 경우
- 광역화 형변환을 묵시적으로 수행
- 협소화 형변화의 경우 캐스팅 연산자로 형변환해야 함
✓예)
short sType; int iType;
iType = sType;
sType = (short) iType; // 명시적 형변환
혼합문(compound statement)
여러 문장을 하나의 문장으로 다루기 위한 방법, 실행 블록이라고도 함
구조
{
[선언문];
[문장];
} // [ ]은 선택적으로 0 ~ N개가 나타날 수 있음
혼합문(블록)안에서 선언된 변수는 혼합문 안에서만 유효하다
- 지역변수의 유효범위를 제한할 수 있음
- 블록 밖에서 선언된 변수 이름과 블록 내 지역 변수 이름은 달라야 한다
제어문(control statement)
프로그램의 실행 순서나 실행 여부를 제어하는 문장
종류
• 조건문(conditional statement)
- 조건에 따라 실행되는 부분이 다른 경우에 사용되는 문장
- if, if ~ else, if ~ else if ~ else, switch
• 반복문(loop statement)
- 조건에 따라 반복적으로 실행해야할 경우에 사용되는 문장
- for, while, do ~ while
• 분기분(jump statement)
- 프로그램 내 특정한 위치로 실행 제어를 옮길 때 사용되는 문장
- continue, break, return
if 문
조건식을 만족하는 경우 블록을 실행하고자 할 때 사용한다.
구문
- if(조건식) {
// 조건1이 true인 경우 실행
}
- 조건식은 식의 결과값이 논리값을 반환하는 식으로 관계식, 논리식등 이 사용될 수 있다.
if ~ else if ~ else문 - 구문
if(조건식1) {
// 조건식1이 true인 경우 실행
}
else if(조건식2) {
// 조건식2가 true인 경우 실행
}
else {
// 조건식1과 조건식2가 모두 false인 경우 실행
}
switch 문- 구조
switch(수식) {
case 정수형리터럴1:
<블록1>; break;
case 정수형리터럴2 :
<블록2>; break;
case 정수형리터럴3:
<블록3>; break;
default:
<블록n>;
}
- 수식의 값이 정수형 리터럴과 동등한지를 확인한다.
- if(수식 == 정수형리터럴1) 처럼 동등 연산(==)의 경우만 사용이 가능함.
개선된 switch 문 - 구조
switch(수식) {
case "문자열1":
<블록1>; break;
case "문자열2":
<블록2>; break;
case "문자열3":
<블록3>; break;
default:
<블록n>;
}
- 수식이 문자열 객체의 값과 equals()한지를 비교한다.
- jdk1.7부터 사용 가능함
for 문 - 구조
for(<식1>;<식2>;<식3>) {
<블록>
}
- <식1> : 제어변수 초기화
- <식2> : 제어변수 검사
- <식3> : 제어변수 수정
개선된 for 문
배열, 컬렉션 또는 Iterator 인터페이스로 부터 상속을 받은 클래스들을 대상으로 순차적인 접근을 수행하고자 할 때
구문
for(<식1>:<식2>) {
<블록>
}
✓식1 : 컬렉션의 요소, 배열의 요소
✓식2 : 컬렉션 객체, 배열 객체
while - 구문
<식1>
while(<식2>) {
<블록>
<식3>
}
✓<식1> : 제어변수 초기화
✓<식2> : 제어변수 검사
✓<식3> : 제어변수 수정
- 반복 조건을 먼저 확인하기 때문에 블록이 한 번도 실행되지 않을 수 있다.
do ~ while - 구문
<식1>
do {
<블록>
<식3>
} while(<식2>);
- <식1> : 제어변수 초기화
- <식2> : 제어변수 검사
- <식3> : 제어변수 수정
반복 조건을 뒤에 확인하기 때문에 최소한 블록을 한 번 실행한다.
break
- while, for, switch문의 제어블록 밖으로 제어를 옮기는 문장
구문
- break [레이블]; // []은 0 또는 1번 나타남
continue
- for, while문에서 제어를 제어변수 검사 부분으로 제어를 옮기는 문장
구문
- continue [레이블]; // []은 0 또는 1번 나타남
return
- 호출된 메소드의 실행을 종료하고 호출한 메소드로 제어를 넘겨주는 문장
구문
- return [식]; // []은 0 또는 1번 나타남
표준 입출력
시스템에서 미리 지정한 표준 파일에 입출력을 행하는 방법
- 프로그래머가 특별하게 열기 또는 닫기를 할 필요가 없음. 다른 입출력의 경우 자원을 프로그래머가 관리해야 함
표준 파일의 종류
System.in (standard input) : 표준 입력 파일
System.out (standard output) : 표준 출력 파일
System.err (standard error) : 표준 에러 파일
- java.lang.System 클래스에 정적 변수로 선언되어 있음
예외 처리문
예외의 정의
- 실행시간에 발생하는 예기치 않은 상황
예외의 종류
예외(exception) : 프로그래밍 처리로 해결이 가능한 경우
- checked : 명시적으로 처리되거나 전파되어야 하는 예외
- programmer-defined exception
- java.lang.Exception으로부터 상속받은 클래스
-unchecked : 프로그램의 잘못으로 인하여 더 이상 프로그램 실행을 지속할 수 없을 때 자바 시스템에 의해
자동적으로 발생
- system-defined exception, predefined exception
- java.lang.RuntimeException으로 확장된 클래스
오류(error) : 자바 가상머신상에서 처리되어야 하는 경우
• try {
// 동작 처리 코드
// 예외가 발생하면 catch 문으로 제어가 이동된다.
} catch ( 예외 매개 변수들) {
// 예외 처리 코드
} finally {
// 예외 발생 여부와 관계없이 꼭 실행되는 부분
}
'2-1 > JAVA 프로그래밍' 카테고리의 다른 글
JAVA 프로그래밍 6주차 정리 (0) | 2023.04.11 |
---|---|
JAVA 프로그래밍 5주차 정리 (0) | 2023.04.04 |
JAVA 프로그래밍 3주차 정리 (0) | 2023.03.21 |
JAVA 프로그래밍 2주차 정리 (0) | 2023.03.14 |
JAVA 프로그래밍 1주차 정리 (0) | 2023.03.07 |