Notice
Recent Posts
Recent Comments
Link
관리 메뉴

브래의 슬기로운 코딩 생활

JAVA 프로그래밍 4주차 정리 본문

2-1/JAVA 프로그래밍

JAVA 프로그래밍 4주차 정리

김브래 2023. 3. 28. 22:51

연산자


정의

언어 설계 시 특정한 연산을 수행하도록 예약된 단어 또는 기호


종류

산술, 관계, 논리, 증감, 비트, 배정, 동등 비교, 동종 비교


산술 연산자

결과값: 숫자형
피연산자 : 숫자형

컴파일러에 의한 광역화 형변환이 발생
- 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 클래스에 정적 변수로 선언되어 있음

http://docs.oracle.com/javase/7/docs/api/java/util/Formatter.html


예외 처리문

예외의 정의

- 실행시간에 발생하는 예기치 않은 상황


예외의 종류

예외(exception) : 프로그래밍 처리로 해결이 가능한 경우
- checked : 명시적으로 처리되거나 전파되어야 하는 예외
    - programmer-defined exception
    - java.lang.Exception으로부터 상속받은 클래스
-unchecked : 프로그램의 잘못으로 인하여 더 이상 프로그램 실행을 지속할 수 없을 때 자바 시스템에 의해 

자동적으로 발생

    - system-defined exception, predefined exception
    - java.lang.RuntimeException으로 확장된 클래스

 

오류(error) : 자바 가상머신상에서 처리되어야 하는 경우

 

• try {
    // 동작 처리 코드
    // 예외가 발생하면 catch 문으로 제어가 이동된다.
} catch ( 예외 매개 변수들) {
    // 예외 처리 코드
} finally {
    // 예외 발생 여부와 관계없이 꼭 실행되는 부분
}