서론 공변성과 제네릭 그리고 와일드카드에 대해서 알아보고 마지막으로 @SafeVarargs 어노테이션을 소개로 마무리한다. 공변성과 배열 자바의 공변성은 하위 클래스의 객체를 상위 클래스의 참조 변수로 참조할 수 있는 성질을 의미한다. 다르게 말하면 상속 관계에서 파생된 클래스의 객체가 부모 클래스의 객체처럼 취급될 수 있음을 말한다. 자바에서 공변성을 만족하는 대표적인 예시가 바로 배열이다. 예를 들어, 배열의 원소 타입이 상속 관계를 가질 때, 배열 자체의 타입 간에도 상속 관계가 유지된다. 간단히 말하면 하위 타입의 배열은 상위 타입의 배열로 취급될 수 있다. @Test void test_array() { Number[] numbers = new Number[4]; numbers[0] = 1; nu..
✍️ JWT (JSON Web Token) 개념 JWT(JSON Web Token)란 선택적 서명 혹은 선택적 암호화를 사용해 데이터를 만드는 인터넷 표준으로, 헤더, 페이로드, 서명으로 구성된다. 페이로드는 클레임(claim)을 담은 JSON 형태이며 서명은 무결성과 인증을 위해 사용된다. 쉽게 말하면 JSON 포맷을 이용해서 사용자 정보를 저장하는 Web Token으로, 클라이언트 서버 구조에서 주로 인증과 데이터 전달에 사용된다. 여기서 선택적 서명과 선택적 암호화라는 말이 나오는데 JWT에 서명을 추가하면 무결성이 보장되는 JWS가 되고, 암호화를 추가하면 무결성과 기밀성이 보장되는 JWE가 된다. 비유하자면 JWT를 확장한 클래스가 JWS 혹은 JWE라고 할 수 있다. 하지만 JWT를 이야기할 ..
✍️ Stack, Heap, Thread 결론부터 말하면 ThreadLocal이란 Thread마다 독립적인 변수를 갖도록 지원하는 클래스이다. 쉽게 말하면 Thread마다 독립적으로 읽고 쓰는 변수를 제공하는 클래스이다. ThreadLocal을 이해하기 전에 JVM 메모리 정책을 가볍게 짚고 넘어갈 필요가 있다. Java 8 이후 기준, 메서드 파라미터와 지역 변수는 Stack에 할당되고 그 외의 것들은 Heap에 할당된다. 엄밀히 말하면 틀린 설명이지만 메서드에 정의된 것들은 Stack, 그 외의 것들은 Heap 영역이라고 생각하자. Thread(이하 쓰레드)란 한 프로세스 내에서 실행되는 흐름의 단위이다. 한 프로세스당 기본적으로 하나의 쓰레드를 갖는데 이를 메인 쓰레드라고 부른다. 만약 별도의 쓰레..
📝 Contents 어노테이션 개념과 샘플 코드 ✍️ Annotation 자바 어노테이션은 잘만 사용하면 매우 유용한 자바의 문법이다. 기본적인 종류는 한정되지만 원하는 대로 커스텀 어노테이션을 만들 수 있어서 적재적소에 활용 가능하다. 먼저 어노테이션은 1. 문서화 2. 컴파일러 체크 3. 메타데이터 용도로 사용된다. 문법적으로 @기호가 붙은 심볼을 사용하며 패키지, 클래스, 메서드, 프로퍼티, 변수에 명시할 수 있다. 어노테이션이 붙은 코드를 컴파일 시에 수집해서 API 문서화에 사용되기도 하지만 JavaDoc이라는 좋은 문서화 도구가 있기에 문서화는 가장 비중이 낮은 어노테이션 사용법이다. 이외에도 컴파일 타임에 에러나 경고를 발생시켜 개발자에게 위험 요소를 알리는 목적으로도 사용된다. (= @Ov..
✍️ Class 실습 Book 클래스(설계도) public class Book { public String title; //String : 문자열을 저장하는 자료형 public int price; public String publisher; public String author; public int page; } Book book; 변수 book은 클래스의 객체이다. 서술한 것처럼 객체도 하나의 변수로 한 개의 데이터만 저장할 수 있다. book 자체는 한 개의 데이터만 저장할 수 있음에도 불구하고 book은 title, price, publisher, author, page에 대한 데이터를 모두 포함해야 한다. 이게 어떻게 가능할까? 실제로 title, price, publisher, author, p..
✍️ 기본 자료형 VS 사용자 정의 자료형 여기 문제가 하나 있다. "정수 한 개를 저장하기 위한 변수 a를 선언하세요." int a; "정수형 변수 a를 선언했으면 a가 가진 메모리 공간에 10을 할당하세요." a = 10; 또 문제가 주어졌다. "책 한 권을 저장하기 위한 변수를 선언하세요." Book book; // ??? Book이라는 자료형이 담고 있을 정보는 무수히 많다. 책의 제목, 가격, 출판사, 저자, 페이지 수 등 한 개의 기본 자료형으로는 책을 표현할 수 없다. 프로그래밍으로 책을 표현하기 위해선 책이 가지는 여러 정보를 담고 있을 한 묶음의 기억 공간이 필요하며 책이 가지는 속성(제목, 가격, 출판사...)이 무엇인가 고민하고 정의하는 것을 '설계'한다고 한다. 여기서 어떤 사물을 ..