728x90
반응형
연산자의 종류
- instanceof 연산자 : 해당 객체의 타입 혹은 타입의 자손인지 여부를 리턴한다. (즉, 참조변수 형변환이 가능한지)
-> 참조 변수 형변환 이전에 반드시 수행해야하는 연산자
연산자 우선순위
- 연산자 종류별 우선순위 : 괄호 > 산술 > 비교 > 논리 > 대입
- 연산자 개수별 우선순위 : 단항 > 이항 > 다항
- 모두 진행방향이 왼쪽에서 오른쪽
- 단항과 대입 연산자만 오른쪽에서 왼쪽
산술 연산자
- 이항 연산자인 산술 연산자
- byte, short, char, int 자료형 사이의 연산은 int형으로 결과를 처리
- long, float, double의 경우 큰 자료형의 결과로 처리
증감 연산자
- 증감이 수행을 먼저 하면 선증감
- 명령이 끝난 이후에 증감을 하면 후증감
비교 연산자
- '=' : 값을 대입하는 대입연산자
- '==' : 두 값이 같은지 다른지를 반환하는 비교연산자
- 기본형이 아닌 참조형일 경우 '=='과 '!=' 연산자만 가능
- 기본형
- int, byte, boolean, float, short, double, long, char
- 이 8개 기본형 제외 모두 참조형
- 기본형
- 객체를 비교할 경우,
인스턴스 변수 값을 비교하도록 equals() 메서드 오버라이딩과 hashCode() 오버라이딩을 수행해야 한다.- 64비트 JVM의 경우 8비트를 사용하는데 해시코드는 4비트이므로, 같을 수 있지만 hashCode()와 equals() 모두 오버라이딩하면 해시코드가 같다고 해도 실제 주소값을 확인하므로 괜찮다.
- https://inpa.tistory.com/entry/JAVA-%E2%98%95-%EA%B0%9D%EC%B2%B4%EC%9D%98-hashCode%EB%8A%94-%EA%B3%A0%EC%9C%A0%ED%95%98%EC%A7%80-%EC%95%8A%EB%8B%A4-%E2%9D%8C
+) 객체 비교
package ch03;
import java.util.Objects;
class object{
String name;
int number;
object(String name, int number){
this.name=name;
this.number=number;
}
@Override
public boolean equals(Object obj) {
if(!(obj instanceof object)){
return false;
}
object ob= (object) obj;
return this.name.equals(ob.name)&& this.number==ob.number;
}
@Override
public int hashCode(){
return Objects.hash(name, number);
}
}
public class ConditionalOpratorEx1 {
public static void main(String[] args){
object o1 = new object("name1", 1234);
object o2 = new object("name1", 1234);
//객체를 비교하는 equals() 오버라이딩
System.out.println(o1.equals(o2));
int a = 5;
int b = 10;
// 값을 비교하는 비교연산자, 논리 연산자(&&)
boolean result = ((a == 5) && (b == 10));
System.out.println("a = 5 AND b = 10 :"+ result);
result = ((a == 5) || (b == 5));
System.out.println("a = 5 OR b = 5 : " + result);
// 결과 boolean 값을 삼항연산자로 조건을 체크하여 성공/실패 문자열을 리턴한다
String finalResult = result? "성공" : "실패";
System.out.println("최종결과 : "+ finalResult);//o/p is “Pass”
}
}
논리 연산자
- short-circuit
- 앞의 연산이 이미 false로 판명되면 뒤의 연산은 수행하지 않도록 해 속도가 빨라지고, 효율적으로 코드를 작성하게 한다.
- 값 1 && 값 2 : 값1이 false면 값2 검사 하지 않음
- 값 1 || 값 2 : 값1이 true면 값2 검사 하지 않음
+) short-circuit 사용하지 않는 경우
: &과 | 이용해 두가지 조건을 모두 확인한다.
// 첫번째 조건이 false 이므로 두번째 조건 확인 안함
System.out.println( a<b && a++<c );//false && true = false
System.out.println( a );// 두번째 조건이 확인되지 않았기 때문에 10
// 첫번째 조건, 두번째 조건 모두 확인함
System.out.println( a<b & a++<c );//false && true = false
System.out.println( a );// 두번째 조건이 확인되었기 때문에 11
// 첫번째 조건이 true이므로 두번째 조건 확인 안함
System.out.println(a>b || a<c); // true || true = true
// 첫번째 조건, 두번째 조건 모두 확인함
System.out.println(a>b | a<c); // true | true = true
삼항 연산자
- 조건항 ? 항1 : 항2
- 조건항이 ture이면 항1를 리턴
- 조건항이 false이면 항2를 리턴
대입 연산자
- 오른쪽 피연산자의 값이나 연산 결과를 왼쪽 변수에 대입하는 연산자
- &=
- |=
- <<=
- >>=
- >>>=
- *=
- final 선언한 상수에는 대입할 수 없다.
- final과 final static 변수의 차이
- final
: 객체마다 존재하는 인스턴스 변수가 상수 - final static
: 클래스에 하나 존재하는 클래스 변수가 상수
- final
- final과 final static 변수의 차이
비트 연산자
- 비트 단위로 논리연산을 수행할 때 사용하는 연산자
- 비트 연산시 연산 최소단위인 4byte로 변환된다.
- XOR : 달라야 1 같으면 0
- AND, OR, XOR, NOT
- 컴퓨터에서의 음수 처리
- 2의 보수 : 1의 보수 했을 때(NOT 연산자로 반전시킨 비트)가 음수일 경우 2의 보수 처리해서 저장한다.
- 1의 보수에 +1하면 2의 보수가 된다.
비트 시프트 연산자
- <<
:비트가 왼쪽으로 이동할 때마다 *2가 된다. - >>
: 비트가 오른쪽으로 이동할 때마다 /2가 된다. - >>>
: 부호 비트를 포함해 모든 비트를 오른쪽으로 이동
비어 있는 왼쪽 비트는 0으로 채운다.
자바에서 0b를 붙이면 이진수로 인식한다.
package ch03;
/**
* 비트 연산자
*/
public class BitOperatorEx7 {
public static void main(String args[]) {
byte num1 = 3;
byte num2 = 5;
// byte로 선언해도 비트 연산시 연산의 최소단위인 4 byte로 변경됨
int result;
result = num1 | num2;
System.out.println("3 | 5 = " + result);
// 0b + 0/1 bit로 지정하면 이진수 표기법이다
// 0b0011 -> 3
// 0b0101 -> 5
result = 0b0011 | 0b0101;
System.out.println("3 | 5 = " + result);
result = num1 & num2;
System.out.println("3 & 5 = " + result);
result = num1 ^ num2;
System.out.println("3 ^ 5 = " + result);
}
}
package ch03;
/**
* 비트 왼쪽 쉬프트(<<) 연산자
*/
public class OperatorLeftShiftEx1 {
public static void main(String args[]) {
// 왼쪽 쉬프트 연산자는 x * 2n과 같다
// 10 << 3 => 10 * 2^3
System.out.println(10 << 2); // 10 * 2^2 = 10*4 = 40
System.out.println(10 << 3); // 10 * 2^3 = 10*8 = 80
System.out.println(20 << 2); // 20 * 2^2 = 20*4 = 80
System.out.println(15 << 4); // 15 * 2^4 = 15*16 =240
}
}
package ch03;
/**
* 비트 오른쪽 쉬프트(>>) 연산자
*/
public class OperatorRightShiftEx1 {
public static void main(String args[]) {
// 오른쪽 쉬프트 연산자는 x / 2n과 같다
// 20 << 3 => 20 / 2^3
System.out.println(10>>2); // 10/2^2 = 10/4=2
System.out.println(20>>2); // 20/2^2 = 20/4=5
System.out.println(20>>3); // 20/2^3 = 20/8=2
}
}
- 객체를 비교할 경우: 인스턴스 변수를 비교하도록 equals() 오버라이딩하는데 반드시 hashCode()도 오버라이딩
- Short-circuit : &&와 || 논리 연산자의 경우 값1으로 인해 결정되면 뒤의 값을 확인하지 않는다.
- final과 final static 변수 :
- final
: 객체마다 존재하는 인스턴스 변수가 상수 - final static
: 클래스에 하나 존재하는 클래스 변수가 상수
- final
AWS과 IDC 장단점
IDC
- 초기 구축 비용은 많이 들지만, 유지비용은 많지 않고, 트래픽증가해도 감당가능
AWS 비용과금 기준
- 초기 구축 비용은 적지만,트래픽급증하면 유지비용은 감당 불가
- TPS :초당 트랜잭션 수
- Active user : 활성 사용자
- Concurrent user : 동시 사용자
AWS EKS
- 쿠버네티스 환경으로 인프라 구성 - 도커 컨테이너 단위로
- 특정환경에 구애받지 않고 동일한 환경으로 배포하고 운영
- EC2 비용 <스토리지 비용 역전될 수 있다.
동기 vs 비동기, 블로킹 vs 논블로킹
-NoSQL의 경우 논블로킹
728x90
반응형
'Server Programming > BackEnd Project' 카테고리의 다른 글
13일차 - TIL (0) | 2022.12.25 |
---|---|
13일차 - 자바를 통해 요구사항 구현하기 (1) | 2022.12.23 |
12일차 - TIL (0) | 2022.12.23 |
11일차 - TIL (0) | 2022.12.22 |
10일차 -TIL (0) | 2022.12.21 |