• 삼항 연산자 - ?:

    • 3개의 피연산자 필요

    • (조건식) ? (식1) : (식2)

    • 조건식이 true면 식1, false면 식2을 결과로 얻음

  • 대입 연산자 - =, op=

    • 변수에 값 or 수식의 연산결과를 저장하는데 사용

    • 왼쪽에는 반드시 변수가 위치해야 함

    • 변수 앞에 final을 붙이면 상수가 됨

op=

=

i += 3

i = i + 3

i -= 3

i = i - 3

i *= 3

i = i * 3

i /= 3

i = i / 3

i %= 3

i = i % 3

i <<= 3

i = i << 3

i >>= 3

i = i >> 3

i >>>= 3

i = i >>> 3

i &= 3

i = i & 3

i |= 3

i = i | 3

i ^= 3

i = i ^ 3

i *= (10 + j)

i = i * (10 + j)

△ 대입 연산자의 종류

  • 논리 연산자 - &&, ||

    • && : AND결합, 양쪽 다 true여야 true

    • || : OR결합, 양쪽 다 false여야 false

    • boolean과 boolean을 결과로 하는 조건식 사용 가능

    • &&가 ||보다 우선순위가 높음

    • ||의 경우 좌측의 피연산자가 true이면 우측의 피연산자 검사 X

    • &&의 경우 좌측의 피연산자가 false이면 우측의 피연산자 검사 X

      • 같은 조건식이라도 피연산자의 위치에 따라 연산속도가 달라짐

      • &, |는 위와 다르게 좌, 우 항상 둘 다 검사함

  • 비트 연산자 - &, |, ^

    • 이진 비트연산 수행

    • & : AND, 피연산자 중 양 쪽이 1이면 1을 결과로 얻음, 나머지는 0

      • 3 & 5 = 1

    • | : OR, 피연산자 중 한 쪽이라도 1이면 1을 결과로 얻음, 나머지는 0

      • 3 | 5 = 7

    • ^ : XOR, 피연산자 중 한 쪽만 1이면 1을 결과로 얻음, 나머지는 0

      • 3 ^ 5 = 6

    • 실수형을 제외한 기본형 변수에 사용 가능


  • 두 개의 리터럴, 변수를 비교할 때 사용, 연산결과는 true or false

  • 비교하는 피연산자의 자료형이 다를 경우 범위가 큰 쪽으로 형변환하여 자료형을 일치시킨 후 비교

  • 대소비교 연산자 - <, >, <=, >=

    • boolean을 제외한 기본형 변수에 사용 가능, 참조형에는 사용 불가

  • 등가비교 연산자 - ==, !=

    • 저장되어 있는 값이 같은지 다른지 비교함

    • 모든 자료형에 사용 가능(기본형, 참조형)

      • 기본형 : 저장되어 있는 값이 같은지

      • 참조형 : 가리키고 있는 주소가 같은지(같은 객체를 가리키는지)

      • 참조형 변수에 사용할 수 있는 연산자는 ==, !=, (타입), +

      • +는 문자열 결합 때만 허용, 문자열 비교는 == 대신 equal() 사용

    • 기본형과 참조형은 형변환이 불가능하므로 기본형-참조형 함께 사용 불가능

    • 실수형인 float와 double은 근사값으로 저장됨

      • float f = 0.1f, double d = (double)f 일 때 d ≠ f

      • f = 0.1, d = 0.10000000149011612 이므로 다름


  • 이항 연산자의 한 종류

  • 이항 연산자는 피연산자의 크기가 4byte이하면 4byte(int)로 변환 후에 연산 수행

  • 이항 연산자는 피연산자들의 타입을 서로 일치시켜야 함

  • 사칙 연산자 - +, -, *, /

    • int보다 작은 자료형은 int로 형변환 후에 연산 수행

    • 자료형이 다르면 표현범위가 더 큰 쪽에 맞춰 형변환 후에 연산 수행

    • 정수형 간의 나눗셈에서 0으로 나누는 것은 금지

    • 실수형은 부동소수점 값인 0.0f, 0.0d로 나누는 것이 가능하나 결과는 NaN(숫자 아님)으로 뜸

  • 자료형 변환의 예

    • byte + byte → int + int → int

    • byte + short → int + int → int

    • char + char → int + int → int


    • float + int → float + float → float

    • long + float → float + float → float

    • float + double → double + double → double

    • 사칙 연산자의 연산결과를 대입할 경우 int보다 작은 자료형에 대입할 시 에러가 발생 - 형변환 해줘야 함

    • 변수의 자료형에 따라 발생하는 오버플로때문에 원래의 결과값과는 다를 수 있음

    • 연산결과를 넣는 변수의 자료형과는 별개로 피연산자들의 결과값이 오버플로될 경우 오버플로된 값이 변수에 들어감

      • 변수의 자료형이 long일지라도 두 개의 피연산자가 int면 결과값은 int기 때문에 오버플로가 발생하여 이상한 값이 변수에 들어갈 수도 있음

      • 하나의 피연산자가 long이라면 결과값도 long이 되므로 오버플로 X

    • 오버플로 시 연산순서에 따라서도 값이 달라짐

    • 상수 or 리터럴 간의 연산은 실행과정동안 변하는 값이 아니기 때문에 형변환이 없어도 실행 가능

      • char c2 = ‘a’ + 1; //문제 없음

      • char c2 = c1 + 1; //문제 있음

    • 대문자와 소문자의 코드 차이는 32

      • ‘a’ - ‘A’ = 32

    • 숫자 0과 문자 0의 값은 차이가 있음

    • Math.round() : 매개변수로 받은 값을 소수점 첫째 자리에서 반올림하여 정수로 돌려줌

  • 나머지 연산자 - %

    • 나누고 난 나머지 값을 돌려줌

    • boolean을 제외한 기본형 변수에 사용 가능

    • 정수형인 연산에는 오른쪽에 0을 사용할 수 없고, 0.0d, 0.0f로 나누는 것은 허용

    • 결과값의 부호는 왼쪽에 있는 피연산자의 부호를 따름 - 부호를 무시한 나머지 연산 후, 결과에 부호를 붙임

  • 쉬프트 연산자 - <<, >>, >>>

    • 피연산자의 각 자리를 오른쪽 or 왼쪽으로 이동(2진수로 표현했을 때)

    • 정수형 변수에만 사용 가능

    • x << n : x * 2^n과 같음

    • x >> n : x / 2^n과 같음

    • n의 크기가 자료형의 bit보다 크면 n % bit 만큼만 이동시킴

    • << : 자리를 왼쪽으로 이동시키며 빈칸을 0으로 채움

    • >> : 자리를 오른쪽으로 이동시키는데 양수와 음수일 때 차이가 있음

      • 양수 : 빈칸을 0으로 채움

      • 음수 : 부호를 위해 빈칸을 1로 채움

    • >>> : 자리를 오른쪽으로 이동시키며 양수, 음수 관계없이 빈칸을 0으로 채움

    • 쉬프트 연산자가 사칙 연산자(*, /)보다 속도가 빠름

    • Integer.toBinaryString() : 매개변수를 2진수로 표현한 문자열 반환, 맨 앞의 0부분을 생략함

      • -8 >>> 1 = 1111111111111111111111111111100


  • 증감 연산자 - ++, --

    • 증가 연산자(++) : 피연산자의 값을 1 증가

    • 감소 연산자(--) : 피연산자의 값을 1 감소

    • 전위형 : 왼쪽에 사용, 변수의 값을 증가시킨 뒤 연산

    • 후위형 : 오른쪽에 사용, 연산한 후에 변수의 값 증가

    • boolean을 제외한 기본형 변수에 사용 가능

    • 다른 수식에 포함되거나 함수의 매개변수로 사용된 경우(단독사용) 전위형과 후위형의 결과가 달라짐

    • 증감 연산자가 사칙 연산자(+, -)보다 더 적은 명령으로 작업을 수행하므로 빠름

    • 사칙 연산자(+, -)는 필요에 따라 피연산자를 형변환하지만 증감 연산자는 형변환없이 피연산자 값을 변경

  • 부호 연산자 - +, -

    • 피연산자의 부호를 변경

    • boolean, char을 제외한 기본형 변수에 사용 가능

  • 비트전환 연산자 - ~

    • 피연산자를 2진수로 표현 시, 0은 1로, 1은 0으로 바꿈

    • 정수형과 char에만 사용 가능

    • 피연산자의 부호가 반대로 바뀜

    • int보다 작은 자료형은 int로 변환 후에 전환

    • ~의 연산결과를 담기 위해서는 int를 사용하거나 형변환해야 함

    • 어떤 양의 정수에 대한 음의 정수를 얻기 위해서는 ~정수+1 하면 됨(2의 보수?)

  • 논리부정 연산자 - !

    • true를 false로, false를 true로 변경

    • boolean에만 사용 가능


'JAVA' 카테고리의 다른 글

[Java의 정석] 3.4. 비교 연산자  (0) 2016.03.01
[Java의 정석] 3.3. 산술 연산자  (0) 2016.03.01
[Java의 정석] 3.1. 연산자 (operator)  (0) 2016.03.01
[Java의 정석] 2.2. 변수의 타입  (0) 2016.03.01
[Java의 정석] 2.1. 변수  (0) 2016.03.01


종류

연산방향

연산자

우선순위

단항 연산자

오른쪽 - 왼쪽

++    --    +    -    ~    !    (타입)

높음























낮음

산술 연산자

왼쪽 - 오른쪽

*    /    %

왼쪽 - 오른쪽

+    -

왼쪽 - 오른쪽

<<    >>    >>>

비교 연산자

왼쪽 - 오른쪽

<    >    <=    >=    instanceof

왼쪽 - 오른쪽

==    !=

논리 연산자

왼쪽 - 오른쪽

&

왼쪽 - 오른쪽

^

왼쪽 - 오른쪽

|

왼쪽 - 오른쪽

&&

왼쪽 - 오른쪽

||

삼항 연산자

왼쪽 - 오른쪽

?:

대입 연산자

오른쪽 - 왼쪽

=    *=    /=    %=    +=    -=    <<=    >>=    >>>=    &=    ^=    |=

△ 연산자의 종류와 우선순위

  • 연산자가 필요로 하는 피연산자의 개수에 따라 단항, 이항, 삼항 연산자로 나뉨


  • 기본형 변수 : 실제 값을 저장(Data)

    • boolean, char, byte, short, int, long, float, double 총 8개

  • 참조형 변수 : 값이 저장되어 있는 주소를 값을 저장

    • null, 4byte의 주소값

  • 참조형 변수는 변수의 타입으로 클래스의 이름을 사용


1byte

2byte

4byte

8byte

논리형

boolean




문자형


char



정수형

byte

short

int

long

실수형



float

double

△ 기본형의 종류와 크기

  • 논리형 : true/false, 조건식과 논리적 계산에 사용

  • 문자형 : 문자 저장에 사용, 문자를 내부적으로 정수 값 코드로 저장

  • 정수형 : 정수 값 저장

    • byte는 이진데이터

    • short는 C언어와의 호환을 위해

    • 주로 사용되는 것은 int, long

  • 실수형 : 실수 값 저장


boolean

char

byte

short

int

long

float

double

bit

8

16

8

16

32

64

32

64

byte

1

2

1

2

4

8

4

8

△ 8가지 기본형의 크기

  • 논리형을 제외한 나머지 자료형은 서로 변환이 가능(형변환)

  • 정수형의 값의 범위는 -2^(n-1) ~ 2^(n-1)-1 (n은 bit수)

  • 논리형 - boolean

    • 기본값은 false

  • 문자형 - char

    • 변수에 값을 저장할 때는 ‘’(작은따옴표) 사용

    • 문자의 코드를 저장하므로 음수가 필요 없음 - 첫 번째 자리에 부호를 사용 X

    • 어떤 문자의 유니코드를 알고 싶으면 int형 변수로 형변환

    • 변수에 저장되는 값은 부호없는 정수의 형태로 저장 - 모든 데이터가 숫자로 저장

    • 하나의 문자만 저장 가능하므로 문자열을 저장하고 싶으면 String 클래스를 사용해야 함

    • String str = new String(“New”); / String str = “New”; 둘 다 가능

    • 덧셈 연산자(+)를 사용하여 문자열 결합 가능

    • +는 왼쪽에서 오른쪽으로 연산 수행

    • 한쪽만 String일 경우 +를 사용하면 비String인 데이터를 String으로 변환한 뒤 결합시킴

    • int와 같은 기본형 타입 값을 문자열로 변환할 때는 아무 내용없는 빈 문자열(“”)을 더해주면 됨

    • 어떤 타입의 변수라도 문자열과 +를 수행하면 결과는 문자열

특수문자

리터럴

tab

\t

backspace

\b

form feed

\f

new line

\n

carriage return

\r

역슬래쉬(\)

\\

작은따옴표

\’

큰따옴표

\”

유니코드(16진수) 문자

\u유니코드

ex)char a = ‘\u0041’

△ 특수문자를 표현하는 방법


  • 문자열 결합의 예

    • “” + 7 → “” + “7” → “7”

    • 7 + “” → “7” + “” → “7”


    • 7 + “ “ → “7” + “ “ → “7 “

    • “ “ + 7 → “ “ + “7” → “ 7”


    • 7 + “7” → “7” + “7” → “77”


    • 7 + 7 + “” → 14 + “” → “14” + “” → “14”

    • “” + 7 + 7 → “7” + 7 → “7” + “7” → “77”


    • true + “” → “true” + “” → “true”

    • null + “” → “null” + “” → “null”

  • 정수형 - byte, short, int, long

    • 다른 3타입과 달리 long 타입은 뒤에 L or l 붙여야 함

    • 16진수는 “0x” or “0X”, 8진수는 “0”를 앞에 붙이면 됨

      • int oct = 010; int hex = 0x10;

    • 왼쪽에서 첫 번째 자리는 부호자리(0이면 양수, 1이면 음수)

    • 입력할 수 있는 범위를 넘어서면 오버플로 됨 - 2진수화 해서 생각

    • 오버플로되면 최소값부터 다시 반복됨

    • 변수의 범위를 넘는 값으로 초기화할 수 없음

  • 실수형 - float, double

    • 부동소수점 방식으로 저장

    • ±a * 10^n (a : 가수, n : 지수, 0 ≤ a < 1 범위의 실수)

    • float = 부호 1bit + 지수 8bit + 가수 23bit = 32bit = 4byte

    • double = 부호 1bit + 지수 11bit + 가수 52bit = 64bit = 8byte

    • float보다 double이 정밀도가 더 높음 - 더 높은 값 표현 가능

    • float는 뒤에 f or F를, double은 뒤에 d or D를 붙임(double은 생략 가능)

    • 값에 소수점, 10의 제곱을 나타내는 E or e, f, F, d, F를 포함하면 실수형

    • 10. = 10.0 / .10 = 0.10 / 3.14e3 = 3140.0 / 1e-3 = 0.001

  • 형변환(캐스팅)

    • 모든 연산은 같은 타입일 때만 수행

    • 형변환 : 변수의 타입을 다른 타입으로 변환하는 것 - (타입)피연산자

    • 기본형-기본형, 참조형-참조형 은 가능하나 기본형-참조형 은 불가능

    • 피연산자는 형변환 후에도 변화가 없음, 값이 바뀌지 않음

    • 기본형은 boolean을 제외한 나머지 간에 형변환 가능

    • 범위가 큰 자료형에서 작은 자료형으로 형변환 시 값 손실 발생할 수 있음

    • 작은 자료형에서 큰 자료형으로 형변환 시에는 값 손실이 없음 - 캐스트 연산자 생략 가능


byte → int

int → byte

10진수

10 / 10

300 / 44

값 손실

없음

있음

    • 실수형은 정수형과 값을 표현하는 방식이 다르므로 같은 크기라도 실수형이 정수형보다 더 큰 표현 범위를 갖음

    • char와 short는 같은 2byte지만 범위가 다르므로 어느 쪽으로의 형변환도 값 손실이 있을 수 있음



  • 변수 : 값을 저장할 수 있는 메모리상의 공간

  • 하나의 변수에는 하나의 값만 저장 가능

  • 변수를 선언하면 메모리에 변수 타입에 알맞은 크기의 저장 공간이 확보됨

  • 초기화 필요, 처음에는 쓰레기값이 들어 있음

  • 변수의 명명 규칙

    • 대소문자 구별 가능, 길이에 제한 없음

    • 예약어를 사용하면 안 됨

      • true, false, else 등

    • 숫자로 시작하면 안 됨

    • 특수문자는 _와 $만 허용

  • 권장 규칙(필수는 아니지만 하면 좋음)

    • 클래스 이름의 첫 글자는 항상 대문자

    • 여러 단어로 이루어진 이름은 단어의 첫 글자가 대문자

      • lastIndex, StringBuffer 등

    • 상수의 이름은 모두 대문자


  • 가상기계 : 소프트웨어로 구현된 하드웨어

  • JVM : 자바를 실행시키기 위한 가상 컴퓨터

  • 다른 언어와 다르게 자바는 JVM을 한번 더 거치고, 완전 컴파일 된 상태가 아니라 실행 시에 해석되기 때문에 속도가 느림


'JAVA' 카테고리의 다른 글

[Java의 정석] 3.2. 단항 연산자  (0) 2016.03.01
[Java의 정석] 3.1. 연산자 (operator)  (0) 2016.03.01
[Java의 정석] 2.2. 변수의 타입  (0) 2016.03.01
[Java의 정석] 2.1. 변수  (0) 2016.03.01
[Java의 정석] 1.1. 자바의 장점  (0) 2016.03.01

  • 운영체제에 독립적

    • JVM(자바가상머신)와 통신, JVM은 운영체제에 종속적

  • 객체지향언어

    • 상속, 캡슐화, 다형성

  • 배우기 쉬움

    • 기존의 객체지향 언어와는 달리 익히기가 쉬움

  • 자동 메모리 관리(Garbage Collection)

    • 메모리 관리를 수동으로 하지 않아도 됨

  • 네트워크와 분산처리 지원

    • API 사용

  • 멀티쓰레드 지원

    • 스케줄링은 자바 인터프리터가 담당

  • 동적 로딩 지원

    • 일부가 변경되어도 전체가 아닌 일부만 재컴파일 해도 괜찮음


+ Recent posts