DevBoi

잡다한 기술지식 2 본문

[Computer Science]

잡다한 기술지식 2

HiSmith 2021. 7. 14. 23:51
반응형

1. DB timeout connection, socket timeout

 

Socket timeout

소켓타임마웃은 클라이언트에서 서버에 대한 Connection에 대한 데이터를 받는 것 까지의 Timeout을 의미한다.

쉽게말하면, 3way handshake로, 처음에 클라이언트와 서버간의 커넥션을 맺고

그다음에는 데이터를 전송하기위한 패킷들이 여러개로 나눠져서 전송이 되는데, 여기서 Gap이 발생해서

생기는 Timeout이 소켓 타임아웃이다.

 


2. Runtime Exception, Exception

 

1.Runtime Exception은 Try, catch로 잡지않아도 컴파일은 가능하다.

하지만 실행할때 에러가 난다, 배열의 크기나 index 문제 null Exception일때 문제가 발생한다.

 

2.Exception

1. try catch로 잡지않으면 컴파일 시에 에러가 난다.

존재하지 않는 파일이나 클래스이름을 잘못 적을때 발생하는 유형이다.

 



3. immutable 객체 (불변 객체)

불변 객체란 뭘까? 다 불변아니야???

 

ex. String str = "3132";

String 은 불변객체 일까 아닐까?

불변 객체이다. str은 STring 객체가 아닌, str이 참조하는 값이 변경되기 떄문이다.

흔히 getter나 setter로 클래스에 대한 값을 외부에서 get,set을 할수있는데, 이럴경우는 가변 객체이다.

불변은 단순 클래스 안에 생성자만 있고, 그 클래스 안에 변수들이 final로 정의 되어, class에 대한 값을

변경은 불가, 재할당만 가능한 경우이다.

이럴경우에

객체에 대한 신뢰도가 높아진다. 트랜잭션안에서, 신뢰도가 높기때문에

생성자나, 접근 메소드에 대한 방어가 필요없다.

멀티스레드 환경에서 동기화 처리없이 객체 공유가 가능하다.

 

단점은 , 값마다 새 객체가 필요하여 메모리 누수 , 성능 저하 요인이 된다.

 



4. Optional of, nullof, elseof

1)Opational empty 사용

Optional<String> opt = Optional.empty();

일경우, opt를 출력하면, Option.empty 자체가 출력이고,

IsPreSent()로 체크를하면 false 가 출력된다.

 

opt.orElse("test")로 출력을 하게되면, empty이기 때문에 test가 출력이된다.

 

 

2)Optional.of

Optional 이 Nullable한 객체이지만, of 메소드로 초기화할때는 null한 값을 허용하지 않겠다는 의미입니다.

때문에 초기값으로 null을 주게 된다면, NPE가 발생한다.


3) orElse

Optional 객체가 가지고있는게 , null 일경우에 대신 값을 반환하는 메서드 입니다.

String result  = opt.orElse("gd");

인경우에는 result에 대한 값이 opt가 널일 경우에는 gd가 아닌 경우에는 opt 값이 들어간ㄷ,

 

4)orElseGet

OrElseGet은 OrElse와 동일 기능을 하지만, 반드시 null이여지만, 실행한다.

Null이 아니면 오류가 발생한다.

우선 이케이스를 보면, orElseGet은 null일때 자연스럽게 작동한다.

그러면 이제 orElseGet, orElse랑 차이를 보자

 

쉽게 말하면, word가 null이 아닐때, orElse는 null이던 아니던 test라는 녀석을 실행한다.

물론 test의 return 값을 result 에 담지는 않지만 한번체크를한다.,

 

그리고, orElseGet은, test라는 메소드를 실행하지 않는다. 왜냐면 word가 null아니기 때문에...

 

요약하면 orElseGet은 null일때만 실행

orElse는 null이던 null이 아닐때던 우선 실행이되고 쳌을 한다.

 


5. Treadsafe 하다?

한개의 쓰레드가 아니라 여러개의 쓰레드가 한가지 함수를 호출할때

값에 대한 안정성을 보장받는 것이다.

최대한 전역에 대한 값들을 제거하고, 공유 자원을 제거한다.

공유 자원을 사용해야한다면, 세마 포어 등과 같은 lock으로 통제한다

(ex. 누가 접근하고 있으면 아무도 접근 못하게 lock, 다 접근하면 다음 녀석 call)

반응형