까마귀코딩.log
백기선 자바스터디 03주차 본문

<< 총 15주차 까지 진행되며 주어지는 키워드를 가지고 블로그에 정리하며 공부하는 스터디 입니다 ! >>
목표
자바가 제공하는 다양한 연산자를 학습합시다
03주차에서 학습할 것 ?
- 1. 산술 연산자
- 2. 비트 연산자
- 3. 관계 연산자
- 4. 논리 연산자
- 5. instanceof
- 6. assignment(=) operator
- 7. 화살표(->) 연산자
- 8. 3항 연산자
- 9. 연산자 우선 순위
- 10. (optional) Java 13. switch 연산자
1. 산술 연산자 ??
🍒 boolean 빼고 모든 기본 타입에서 사용가능하다 !
산술연산자의 타입변환 : 피연산자들의 타입이 동일하지 않을 경우??
자동 타입 변환 하여 피연산자들의 타입을 일치시킨 후 연산 수행 !!
1 ) 피연산자가 모두정수 ??
>> int 보다 크기가 작은 정수타입일때 ( byte, char, short )
→ 모두 int 타입으로 변환 !
>> int 보다 크기가 큰 정수타입일때 (long)
→ 모두 long 타입으로 변환 !
2 ) 피연산자가 모두실수 ??
( float, double )이 존재
→ 크기가 큰 실수타입으로 변환 후 연산 수행
long 타입을 제외한 정수의 산술연산은 어떻게하나 ???
== int 타입 변수에 산출값 대입한다
소수점 이하의 값까지 산출결과로 얻고싶을때 뭘쓰나?
1. 1.0을 곱하여 실수타입으로 만든 후 산술연산한다.
2. 피연산자를 실수타입으로 강제타입변환(캐스팅)한 후 산술연산한다.
주의할점?
1. 연산후의 산출값이 산출타입으로 표현 가능해야한다.
-연산후의 산출값이 데이터 타입의 범위를 벗어나 산출타입으로 표현할수 없을 경우,
오버플로우와 쓰레기값이 발생한다.
-산술연산전 오버플로우 탐지 메소드 호출해라 !!!
2. 정확한 계산은 정수사용해야한다.
- 부동소수점타입인 실수타입은 이진포맷의 가수를 사용하고
0.1을 근사치로 처리한다.
즉, 정확하게 표현하지 못한다 !!!
3. 0으로 나눌수 없다 !!
/ 또는 % 연산자 사용시 좌측 피 연산자가 정수타입일 경우 ??
우측 피 연산자는 0 사용불가하다 !!!
ArithmeticException 예외 발생 !!!
우측 피 연산자가 실수타입인 0.0 또는 0.0f 인 경우 결과 ??
/ == 무한대 infinity
% == NaN
- 연산결과 확인 메소드 이용할것
/ == Double.isIfinite()
% == Doublid.isNaN()
만약,
infinity 또는 NaN 일경우 true/ 아닐경우 false
리턴
4. 실수 입력받을경우 NaN 검사를 반드시 !! 실행할것 !!
- " NaN " 문자열은 Double.valueOf() 메소드에 의해
double 타입으로 변환되면 NaN이 된다 !!
- NaN 조사시 == 연산자를 이용하지 말것 !
왜?
NaN 은 != 만 true / 나머지 모든 비교연산자 사용시 false 값 리턴 !
반드시 반드시 Doublid.isNAN() 사용해라 ~!
2. 비트 연산자 ??
비트연산자는 뭘까요?
: 데이터를 비트단위로 연산하는것입니다 ~
0과 1로 표현이 가능한 정수타입이나
정수형으로 캐스팅이 가능한 자료형만 비트연산이 가능합니다.
비트연산자는 기능에 따라서 2가지 !
비트이동연산자,
비트논리연산자로 구분합니다.
또한 비트단위로 왼쪽이나 오른쪽으로 전체비트를 이동하거나,
1의보수를 만들때도 사용됩니다.
비트 & 연산자
비트 and 연산자는 딱 한가지 경우만 1을 반환하는 데 언제일까???
- 대응되는 두쪽이 모두 1이어야 1을 반환한다 !
나머지는 모두 0을반환 !
비트 | 연산자
비트 or 연산자는 언제 1을 반환할까 ??
- 대응되는 두 쪽 비트중 하나라도 1이면 1을 반환한다 !!
언제 0을 반환할까 ??
- 두 비트가 모두 0이어야 0을 반환한다 !
비트 ^ 연산자
비트 xor 연산자는 ?
- 대응되는 두 비트가
서로 다를경우 1을 반환한다 !!
서로 같을경우 0을 반환한다 !!
비트 ~ 연산자
비트 not 연산자는 ?
- 해당 비트가 1이면 0을 반환하고, 0이면 1을 반환합니다.
3. 관계 연산자 ??
비교 연산자
우리가 수학시간에 배웠던 부등호를 생각하면 된다.
boolean 자료형으로 반환이된다
- true / false
4. 논리 연산자 ??
논리연산자는 AND OR NOT 3개 !
결과는 true / false 로 리턴 된다 ~
5. instanceof ??
난생 첨보는 인스턴스 오브 연산자는 뭘까??
객체가 어떤 클래스인지?
어떤 클래스를 상속받았는지 확인할때 쓰는 연산자 이다!
형변환 가능여부 체크 !
만약 불가하면 캐스팅 익셉션 뜬다 !
1. parent instanceof Parent : 부모가 본인 집을 찾았으니 true
2. child instanceof Parent : 자식이 상속받은 부모 집을 찾았으니 true (상속을 받았으니 자기 집이라 해도 무방하다?)
3. parent instanceof Child : 부모가 자식 집을 찾았으니 false (자식 집은 자식 집이지 부모 집은 아니니까)
4. child instanceof Child : 자식이 본인 집을 찾았으니 true
반드시 써야하는 상황이 있음
-> 이걸 알아보자
리스트를 쓸 때,
어레이리스트를 구현해놓고 - 링크드리스트 메소드 사용하고싶을때
instanceof로 캐스팅가능여부체크
근데 앵간해서는 형변환(캐스팅)이런거 하지말고 따로구현해서 쓰자....
== 클래스 캐스팅전에 한번체크할때 써라
instanceof과 isInstance()모두 객체의 클래스를 확인하는데 사용합니다
하지만 클래스의 체크 시점이 정적(컴파일 타임)이냐 동적(런타임)이냐의 차이를 보입니다.
즉, instanceof는 컴파일타임에 타입 에러를 체크하고, isInstance()는 런타임에 타입 에러 체크를 합니다.
6. assignment(=) operator ??
할당 연산자 / 대입연산자
대입 연산자가 있으나 활용성 부분에서 많이 활용하지 않으며 웹개발자 등을 할 경우 평생 사용하지 않는 경우도 있으니,
이정도만 외우셔도 큰 문제는 없을 것입니다.
참고로 연산과 동시에 대입하는 대입 연산자의 경우 복합 대입 연산자라 하기도 합니다.
7. 화살표(->) 연산자 ??
자바에서 가끔 보이는 화살표연산자
람다에서 쓰이는듯한데 이거 뭔뜻일까 ?
자바 8부터 추가된것으로 람다에서 쓰이네요.
람다 표현식은 일종의 익명함수개념인데, 익명함수를 이해하기 위해서는 먼저 익명클래스 개념을 알아야합니다.
람다식은 ??
메소드를 변수처럼 다룰수 있다는 측면에서 편리해요 !!
대부분의 메소드들은 클래스에 종속된 멤버함수의 형태로 제공되는 형태 ~
람다식은 클래스에 종속되지 않습니다!
인자를 0개부터 받아서 implementation 부분에서 활용하기 가능 !
argument list 부분의 인자가 하나라면 구현부의 소괄호 생략가능!
statement 개수가 1개라면 중괄호를 생략할수있어요
람다식은 앞서 언급한 코드의 간결성 뿐 아니라,
스트림을 통한 데이터의 독립적 처리에도 많이쓰입니다 ^^
익명클래스란 ?
클래스 instantiation과 동시에 클래스를 정의하는 클래스를 의미합니다.
언제 익명클래스를 정의해서 사용할까요 ?
1. 특정클래스가 여러번 호출되지않거나,
2. 클래스 내부에 필드나 여러개의 메소드를 정의할 필요가 있을때 ???
익명클래스로 만들어 씁니다.
익명클래스의 특징 ?
1. new 를 사용 합니다.
2. instantiation 시 파라미터가 없어야합니다.
3. parenthesis 뒤에 interface를 implement 하거나 class를 extends 하는 내용이 와야합니다.
또다른 특징?
이너클래스의 일종입니다.
- 클래스 내에 static 변수를 선언할수 없습니다. ( static final 선언은 가능 ! )
- Outer class의 멤버변수나 scope 내의 지역변수에 접근할수 있습니다.
한걸음 더 나아가서 ...
익명클래스가 일반적인 클래스 정의방법에 비해 간단하지만 !
클래스 내부에 필드도 필요없고, 딱 하나의 메소드만 존재하는 경우엔 익명 클래스 문법조차 과하게 느껴질수 있습니다.
람다식 사용한다면 single method class 에 대해 간편하게 처리할수 있게 됩니다.
8. 3항 연산자 ??
피 연산자를 세개나 가지고 있으며
조건식 하나와 두개의 값으로 구성된 것 !!
조건식 ? 참값 : 거짓값
조건식은 주로 변숫값을 비교하는 연산문이며
: 의 양쪽에 참일때의 리턴값과
거짓일때의 리턴값을 적는다
? 앞의 조건식을 평가하여 진위여부에 따라 : 양쪽에 있는 두 값중 하나를 선택한다.
선택이라는 능동적인 동작을 하기때문에
if else 라는 구문을 대체할수 있다 !
< < 사용예제 > >
int value = -5;
int abs;
if(value > 0){
abs = value;
}else {
abs = -value;
}
System.out.println("절댓값 =" + abs);
위의 if else문을 삼항 연산자를 통해 간결히 표현 가능하다 !
abs = value > 0 ? value:-value;
요렇게 !
와~~우~~
9. 연산자 우선 순위 ??
최우선 연산자 > 단항 연산자 > 산술 연산자 > 비교 연산자 > 비트 연산자 > 논리 연산자 > 삼항 연산자 > 대입 연산자
10. (optional) Java 13. switch 연산자 ??
[switch statement]
먼저 기본적으로 우리가 알고있는 switch문의 정석을 보면,
case, break가 존재합니다 !
[ switch operator는 뭐가 다른가요 ? ]
- break를 사용하지 않아도 된다 !
- yield 존재 !!! $ return 값 존재해도 됨 !
- case --> A 같은 형식으로 사용 표현 가능함 !
- 만약 switch의 반환값이 따로 필요하지 않거나?
- case가 switch 들어오는 모든 인자들을 커버할 수 있으면 상관없지만 !
- 그렇지 않다면?? default -> code를 필수로 작성해야한다.
'백기선 자바스터디' 카테고리의 다른 글
백기선 자바스터디 07주차 (0) | 2023.01.31 |
---|---|
백기선 자바스터디 06주차 (0) | 2023.01.30 |
백기선 자바스터디 5주차 (1) | 2023.01.27 |
백기선 자바스터디 02주 (0) | 2023.01.26 |
백기선 자바스터디 01주차 (2) | 2023.01.26 |