본문 바로가기

자바70

[Java] 주니어 백엔드 면접 단골 질문 - 쓰레드를 생성하는 2가지 방법 면접에서 쓰레드에 대한 질문을 높은 빈도로 받았었다. 만족하실만한 대답을 못했던 것 같다. 쓰레드를 생성하는 2가지 방법 Runnable 인터페이를 확장해 run() 메소드 구현 Thread 클래스를 상속받고 run() 메소드를 오버라이딩해 구현 둘 중에 뭐가 더 좋을까?? Runnable 인터페이스를 확장하는 방법. 왜? extends과 implements의 차이점에서 알 수 있다. extends을 받으면 내가 받고 싶지 않은 메소드도 상속 받게 되는 문제가 생긴다. 또한 private가 아닌 메소드나 변수를 자식 클래스가 받게 되고 낭비가 생긴다. 따라서 인터페이스 확장 방식을 사용해 필요한 기능만 갖게 되고 결합도를 낮추는 방식이 객체지향적으로 적합하다. 쓰레드를 실행시키는 방법은? 1) exten.. 2021. 3. 20.
[Java] Primitive Type VS Reference Type 자바에서 타입은 크게 기본형 타입과 참조형 타입이 있다. 기본형 타입(Primitive Type) 기본 자료형은 반드시 사용하기 전에 선언되어야 한다. 비객체 타입이기 때문에 null값을 가질 수 없다. 기본형 타입에 Null을 넣고 싶다면 래퍼 클래스를 활용해야한다. 실제 값을 저장하는 공간으로 스택(Stack) 메모리에 저장된다. 컴파일 시점에 데이터의 표현 범위를 벗어나면 컴파일 에러가 발생한다. boolean, byte, short, int, long, float, double, char 참조형 타입(Reference Type) 기본형 타입을 제외한 타입들이 모두 참조형 타입이다. 기본적으로 java.lang.Object를 상속받으면 참조형이 된다. 빈 객체를 의미하는 Null이 존재한다. 값이 .. 2020. 7. 1.
[Java] 자바 직렬화, serialVersionUID 직렬화란? 글에 이어 부족한 부분을 추가하려한다. serialVersionUID 클래스를 역직렬화 할 때, 멤버 변수가 새로 추가 되었다면 예외가 발생한다. java.io.InvalidClassException local class incompatible: stream classdesc serialVersionUID = -8896802588094338594, local class serialVersionUID = 7127171927132876450 serialVersionUID의 정보가 일치하지 않기 때문에 발생한 것이다. serialVersionUID 값을 설정하지도 않았는데 왜 이런 에러가 발생할까? SUID 는 필수 값은 아니다. 호환 가능한 클래스는 SUID값이 고정되어 있다. SUID가 선언되어.. 2020. 6. 7.
Enum 클래스 작성방법 예를들어 상품 주문에 대한 상태값을 관리할 때, 여태의 나였으면 if(해당경우){ status = "상태값"; } 으로 해당 상태를 하드코딩의 형태로 바꿔주었다. 하지만 이제 ENUM 클래스를 활용하는 방법을 배웠으므로 앞으로는 이렇게 작성하도록 하자. private String status; 위처럼 하드코딩의 형태였다면 해당 변수 타입은 String 형태이다. //등록됨, 해제됨, 대기중의 상태값을 가지는 enum 클래스를 작성해보자. @Enumerated(EnumType.STRING) private UserStatus status; // REGISTERED / UNREGISTERED Enum 값을 가지는 필드에 @Enumerated 어노테이션을 붙여준다. 이 어노테이션은 인자로 EnumType.STR.. 2019. 12. 8.
Java 람다식 Stream - (BufferStream의 그 Stream 아님) API 를 구현하는 인터넷강의를 듣고있는데, 서비스 부분을 람다식으로 작성하셨다. 아직 람알못이라 어떻게 쓰는지 정도는 알고가야 할 것 같아서 정리하려한다. Stream은 자바 8부터 추가되었다. 컬렉션, 배열등의 저장 요소를 하나씩 참조하며 함수형 인터페이스(람다식)를 반복적으로 처리할 수 있도록 해주는 기능이다. 기존 방식 List names = Arrays.asList("test", "test1","test2"); long count = 0; for(String name : names){ if(name.contains("es")){ count++; } } System.out.println("Count : " + count); //3 람다식을 이용한 방식 count = names.stream().fi.. 2019. 12. 7.
[Java] 메모리 관리 Stack & Heap 영역 너무 코딩을 할 때, 코드만 보고 따라친다는 느낌이 많은 요즘이다. 원리는 제대로 알고 하고있는걸까,, Stack Heap 영역에 생성된 Object 타입의 데이터의 참조값이 할당된다. 원시타입의 데이터가 값과 함께 할당된다. 지역변수들은 scope에 따른 visibility를 가진다. 각 Thread는 자신만의 stack을 가진다. Stack 영역에는 Heap 영역에서 생성된 Object 타입의 데이터들에 대한 참조를 위한 값들이 할당된다. 또한, 원시타입(primitive - types) - byte, short, int, long, double, float, boolean, char 타입의 데이터들이 할당된다. 이때 원시타입의 데이터들에 대해서는 참조값이 아닌, 실제 값을 stack에 직접 저장하게.. 2019. 7. 21.