딱콩이의 봄

JAVA 공부 본문

개발/JAVA

JAVA 공부

코린이딱콩 2022. 8. 16. 16:11

Casting

타입을 변환하는 것을 말하며 형변환이라고도 합니다.

 

UpCasting(묵시적 형변환)

자바에서는 자식 클래스는 부모 클래스의 모든 특성을 상속받습니다.

업 캐스팅이란 자식 클래스의 객체가 부모 클래스의 타입으로 형변환되는 것을 말합니다.

부모 클래스 레퍼런스 변수가 자식 클래스로 객체화된 인스턴스를 가리킬 수 있게 됩니다. 더 쉽게 말하자면, 사람은 생물이다 라고 생각하면 됩니다. 여기서 사람은 자식 클래스이고 생물은 부모 클래스입니다.

업 캐스팅은 명시적인 타입 캐스팅을 하지 않아도 됩니다. 묵시적 형 변환이라고도 합니다.

//업캐스팅 자동 타입 변환
Person person = student;

//아래와 같이 명시적으로 타입 캐스팅 선언을 하지 않아도 됩니다.
Person person = (Person) student;

 

DownCasting(명시적 형 변환)

자신의 고유한 특성을 잃은 자식 클래스의 객체를 다시 복구해주는 것을 말합니다.

쉽게 말해 업 캐스팅된 것을 원상태로 돌리는 것입니다. 명시적으로 타입을 지정해 주어야 하며, 업 캐스팅이 선행되어야 합니다.


Error와 Exception의 차이

Error는 실행 중 일어날 수 있는 치명적 오류이며 컴파일 시점에 체크할 수 없고 오류가 발생하면 프로그램은 비정상 종료됩니다.

Error는 런타임 실행 시 발생되며 전부 예측 불가한 uncheckedError에 속합니다.

Exception은 Error보다 비교적 경미한 오류이며 try-catch를 이용하여 프로그램의 비정상적 종료를 막을 수 있습니다.

 

체크 예외(checked Exception)

실행하기 전에 예측 가능한 예외를 말합니다. 체크 예외가 발생할 수 있는 메서드를 사용할 경우 복구가 가능한 예외들이기 때문에 반드시 예외를 처리하는 코드를 작성해야 합니다.

catch문으로 예외를 잡거나 throws로 예외를 자신이 호출한 클래스로 던지는 방법으로 해결해야 할 합니다.

대표적인 exception으로는 IoException, SQLException이 있습니다.

 

언체크 예외(unchecked Exception)

실행하고 난 후에 알 수 있는 예외들을 말합니다. 명시적으로 예외처리를 강제하지 않기 때문에 언체크 예외라고 합니다. 언체크 예외는 따로 catch문으로 예외를 잡거나 throws로 선언하지 않아도 됩니다. 대표적인 exception으로는 NullpointerException, ArrayIndexoutofBound가 있습니다.


TCP와 UDP

TCP는 연결 지향형 프로토콜이고, UDP는 데이터를 데이터 그램 단위로 전송하는 프로토콜입니다.

TCP는 흐름 제어 및 혼잡 제어를 제공하고 점대점 방식이라 멀티캐스팅이나 브로드 캐스팅을 지원하지 않습니다. 높은 신뢰성을 보장하고 UDP보다 속도가 느립니다.

UDP는 비연결형 서비스로 데이터그램 방식으로 제공하고 정보를 주고받을 때 정보를 보내거나 받는다는 신호 절차를 거치지 않습니다. 또한 UDP헤더의 checkSum필드를 통해 최소한의 오류만 검출하여 신뢰성이 낮고 TCP보다 속도가 빠릅니다.

 

3 Way handshake

  1. 클라이언트가 서버에게 SYN패킷을 보냅니다
  2. 서버가 syn을 받고, 클라이언트로 받았다는 신호인 ACK와 SYN패킷을 보냅니다.
  3. 클라이언트는 SYN+ACK를 받고 ESTABLISED로 상태를 변경하고 서버에 ACK를 전송합니다.
  4. ACK를 받은 서버는 상태가 ESTABLISED로 변경됩니다.

main에 static을 사용하는 이유는?

static멤버는 클래스 로딩(프로그램 시작) 시 메모리에 로드되어 인스턴스를 생성하지 않아도 호출이 가능합니다. JVM은 인스턴스가 없는 클래스의 main()을 호출해야 하기 때문에 static을 사용합니다.


스택과 힙의 차이

스택은 정적 메모리를 힙은 동적 메모리가 저장되는 영역입니다.

스택은 함수, 지역변수, 매개변수가 저장되며 LIFO방식으로 관리되지만, 힙 영역은 전역 변수를 다루며 사용자가 직접 관리해야 하는 메모리입니다.


Throws와 try-catch의 차이

throws는 예외를 던집니다. 메서드에서 처리해야 할 하나 이상의 예외를 메서드를 호출한 곳으로 던져 버립니다. 예외를 없애지 못하고 호출한 곳으로 예외를 전달만 합니다.

try-catch는 예외를 받아서 처리합니다. catch구문에서 사용자가 흐름을 능동적으로 제어할 수 있습니다.


Try-with-resource

try-catch-finally의 문제점을 보완하기 위해 나온 개념입니다.

try(...) 안에 자원 객체를 전달하면, try블록이 끝나고 자동으로 자원을 해제해주는 기능입니다.

따로 finally구문이나 모든 catch구문에 종료 처리를 하지 않아도 됩니다.

try에 전달할 수 있는 자원은 AutoCloseable인터페이스의 구현체로 한정됩니다.


Immutable Object?

객체지향 프로그램에 있어서 불변 객체는 생성 후 그 상태를 바꿀 수 없는 객체를 말합니다.

즉 불변 객체는 재할당은 가능하지만, 한번 할당하면 내부 데이터를 변경할 수 없는 객체입니다.

 

Primitive type(원시 타입)의 Immutable Object 만드는 방법

원시 타입을 불변 객체로 만드는 방법은 finall키워드를 사용해서 만들 수 있습니다.

필드가 모두 원시 타입만 있는 경우에만 가능한 방법입니다.

 

Reference type(참조 타입)의 Immutable Object 만드는 방법

참조 타입이 있는 경우에는 불변 객체의 참조 변수 또한 불변이어야 합니다.

Array나 List일 경우 생성 시 생성자 인자를 그대로 참조하지 않고, 새로운 배열이나, List를 만들어 값을 복사하도록 해야 합니다.

 

사용 이유는 뭔가요?

Thread-safe 하여 병렬 프로그래밍에 유용하며, 동기화를 고려하지 않아도 되고, 캐시나 Map 또는 Set 등의 요소로 활용하기에 적합합니다. 또한, 부수효과를 피해 오류 가능성을 최소화할 수 있고, 다른 사람이 작성한 함수를 예측 가능하며 안전하게 사용할 수 있습니다.

'개발 > JAVA' 카테고리의 다른 글

Hash 기본 개념과 구조  (0) 2022.08.16
JAVA공부  (0) 2022.08.16
JAVA공부  (0) 2022.08.16
JAVA공부  (0) 2022.08.15
JAVA 공부  (0) 2022.08.15
Comments