본문 바로가기

자바12

Immutable Object란? 객체 지향 프로그래밍에 있어 불변 객체는 생성 후 그 상태를 바꿀 수 없는 객체를 말한다. (힙 영역에서 그 객체가 가리키고 있는 데이터 자체의 변화가 불가능) 불변 객체를 사용하면 복제나 비교를 위한 조작을 단순화 할 수 있고, 성능 개선에도 도움을 준다. 하지만 객체가 변경 가능한 데이터를 많이 가지고 있는 경우엔 불변이 오히려 부적절한 경우가 있다. 이 때문에 많은 프로그래밍 언어에서는 불변이나 가변 중 하나를 선택할 수 있도록 하고 있다. 대표적인 자바 클래스에는 String 이 있다. String a = "aa" 후 a = "bb" 는 "bb" 에 대한 새로운 객체를 만드는 것 다른 상황일 수도 있는데, 경험한 걸 설명하면 메소드 파라미터를 받을 때 final 이라는 파라미터를 사용한다. 이는 .. 2022. 7. 14.
HashTable vs HashMap HashTable VS HashMap 메모리 내에 key/value 짝으로 되어있는 데이터이다. 두 데이터 타입의 차이점을 알아보고자 한다. 1. 비슷한 점 추가, 삭제, 접근이 비슷하다. get() : 키를 통해 아이템 검색 remove() : 키를 통해 삭제 put() : 아이템을 추가 java.util 패키지 내에 속해있다. 2. 다른 점 두 데이터 타입은 매우 많은 다른 점이 존재하지만, 주된 것 몇 가지만 알아보자 HashTable 의 경우 암묵적으로 동기화되어 멀티 스레드 환경에서 동작하기 용이하다. 엑세스 시 스레드는 HashTable 을 락해 다른 스레드가 동시에 변경하는 것을 방지한다. 반대로 HashMap 의 경우에는 단일 스레드 환경에서 적합하다. 만약 멀티 스레드 환경에서 HashM.. 2022. 7. 14.
클래스 vs 인스턴스 클래스 vs 인스턴스 정말 흔하게 쓰는 단어이고, 사용도 할 줄 알지만 항상 그렇듯, 남에게 제대로 설명하지 못하면 결국은 도루묵이기에.. 이번 기회에 간단하게나마 정리해보고자 한다. 1. 클래스 클래스는 데이터와 로직을 묶어서 누구나 동일한 기능을 사용할 수 있게 하고, 누구나 필요한 자기만의 데이터를 보관하기 위해서 스펙을 결정해둔 것을 의미. 예를 들어 MP3 라면 곡 데이터는 전부 다르지만, 음악 감상 기능은 모든 MP3 가 동일한 기능이 지원되는 것 여기서 데이터는 변수, 로직은 메소드가 되겠다. 클래스는 연관되어 있는 변수와 메소드의 집합이다. 2. 인스턴스 클래스라는 일종의 설계도를 통해 제품을 만드는데, 이 제품을 인스턴스라고 한다. 예를 들면 MP3 myMp3 = new MP3(); 에서.. 2022. 7. 14.
자바 비동기 (2) 지난 포스팅에서 비동기에 대해 살짝 알아봤습니다. 기본적인 Thread, Runnable 를 사용하거나, 자바5 부터 생긴 Future, FutureTask, 그리고 web 3.0 부터 지원된 비동기 서블릿이 있었습니다. 그리고 자바 8로 넘어가면서 비동기를 지원하기 위해 CompletableFuture 가 새로 생겼는데요. 이번에는 이 CompleteableFuture 에 대해 알아보도록 하겠습니다. 1. CompletableFuture? 앞에서 언급했듯이 자바는 비동기를 지원하기 위해 Future 이라는 인터페이스가 있었습니다. 그런데, 왜 CompletableFuture 가 추가되었을까요? 여기서 Future 의 인터페이스에 있는 메소드들을 보면, boolean cancel(boolean mayIn.. 2022. 7. 14.
자바 비동기 (1) 최근 학생들에게 학습을 추천해주는 것과 관련된 작업을 하고 있는데요. 주 단위로 추천이 되어 매주 배치를 통해서 추천 학습이 들어가지만, 신규 회원일 경우 배치에서 누락되는 경우가 있어서, 로그인 등의 행위를 했을 때 비동기적으로 데이터를 쌓아줄까 고민을 하고 있습니다. 프로젝트는 Java - Spring 을 기반으로 하고 있는데, 잠깐만 찾아봐도 방법이 많습니다. 이번 글에서는 비동기에 대한 정의 및 올드한 내용에 대해 다뤄볼까 합니다. 1. 비동기 프로그래밍이란? 일단, 비동기를 논하기 전에 왜 비동기가 나왔는지부터 알아야 할 것 같습니다. 기본적으로 메소드를 실행한다는 것은 메소드가 완료될 때까지 그 메소드를 호출한 코드는 기다려야 함(블록킹 blocking) 을 의미합니다. 얼핏 들으면 당연해보입.. 2022. 7. 14.
캡슐화(encapsulation) 캡슐화(encapsulation) 객체가 내부적으로 기능을 어떻게 구현하는지를 감추는 것 내부의 기능 구현이 변경되더라도 그 기능을 사용하는 코드는 영향을 받지 않음 내부 구현 변경의 유연함을 줌 1. 절차 지향 방식과의 비교 회원의 서비스 만료 날짜 여부에 따른 처리를 하는 로직 1. 절차 지향 방식 코드 @Getter public class Member { ... private Date expireDate; private boolean male; } if(member.getExpireDate() != null && member.getExpireDate().getTime() < System.currentTimeMillis()) { // 만료 시 처리 로직 } Member 의 expireDate 를 현재.. 2022. 7. 14.