본문 바로가기

java

HashMap vs HashSet HashMap Map 인터페이스의 구현체이다. HashTable과 유사한 자료구조로 데이터를 저장한다. Key-Value 형태로 데이터를 저장하고 Key와 Value의 Mapping을 유지한다. Key 중복을 허용하지 않지만, Value 값의 중복을 허용한다. Key에 하나의 null, Value의 다중 null을 허용한다. HashSet Set 인터페이스의 구현체이다. 내부적으로는 HashMap을 사용하기 때문에 마찬가지로 HashTable과 유사한 자료구조로 데이터를 저장한다. Key의 값으로 객체 그 자체를 저장하고 Value 값으로 HashSet 내부 구현 코드에 미리 선언해둔 Dummy Value를 저장한다. 중복을 허용하지 않는다. 하나의 null 값을 허용한다. 데이터의 순서에 의미를 두지 .. 더보기
[Refactoring] 정리 (2) 코딩으로 학습하는 리팩토링 - 인프런 | 강의 리팩토링은 소프트웨어 엔지니어가 갖춰야 할 기본적인 소양 중 하나입니다. 이 강의는 인텔리J와 자바를 사용하여 보다 실용적인 방법으로 다양한 코드의 냄새와 리팩토링 기술을 설명하고 직 www.inflearn.com | 인프런 - 백기선님의 코딩으로 학습하는 리팩토링 강의를 수강하며 정리한 글입니다. 조건부 로직 간소화 ** 복잡한 조건문을 다루는 기술 조건문 분해하기 -> if 문 안의 복잡한 로직은 메서드 추출하기 적용 조건식 통합하기 중첩 조건문을 보호 구문으로 바꾸기 -> return으로 아래 로직이 실행되지 않게 만들기 Before int result; if (isVip()) { result = vipPoint(); } else if (isPlat().. 더보기
[Refactoring] 정리 (1) 코딩으로 학습하는 리팩토링 - 인프런 | 강의 리팩토링은 소프트웨어 엔지니어가 갖춰야 할 기본적인 소양 중 하나입니다. 이 강의는 인텔리J와 자바를 사용하여 보다 실용적인 방법으로 다양한 코드의 냄새와 리팩토링 기술을 설명하고 직 www.inflearn.com | 인프런 - 백기선님의 코딩으로 학습하는 리팩토링 강의를 수강하며 정리한 글입니다. 가장 기본이 되는 리팩토링 기술 함수 추출하기 함수 인라인하기 변수 추출하기 변수 인라인하기 함수 선언 변경하기 -> 함수 이름, 매개 변수, 리턴 타입... 변경 변수 캡슐화하기 변수 이름 바꾸기 매개변수 객체 만들기 여러 함수를 클래스로 묶기 여러 함수를 변환 함수로 묶기 단계 쪼개기 캡슐화 * 모듈에서 외부 시스템으로 공개하지 않아도 되는 데이터를 숨기는 기.. 더보기
[Refactoring] 24. 주석 코딩으로 학습하는 리팩토링 - 인프런 | 강의 리팩토링은 소프트웨어 엔지니어가 갖춰야 할 기본적인 소양 중 하나입니다. 이 강의는 인텔리J와 자바를 사용하여 보다 실용적인 방법으로 다양한 코드의 냄새와 리팩토링 기술을 설명하고 직 www.inflearn.com | 인프런 - 백기선님의 코딩으로 학습하는 리팩토링 강의를 수강하며 정리한 글입니다. 주석 코드 리팩토링 시, 불필요한 주석을 줄일 수 있다. 관련 리팩토링 함수 추출하기 -> 설명이 필요한 부분을 별도의 메서드로 뺴낸다. 함수 선언부 변경하기 -> 함수 이름을 재정의할 수 있다. 어서션 추가하기 -> 시스템적으로 어떤 필요한 규칙이 있는 경우 Refactoring 1. 어서션 추가하기 Assertion을 사용하면 코드로 표현하지 않은 조건들을 명.. 더보기
[Refactoring] 23. 상속 포기하기 코딩으로 학습하는 리팩토링 - 인프런 | 강의 리팩토링은 소프트웨어 엔지니어가 갖춰야 할 기본적인 소양 중 하나입니다. 이 강의는 인텔리J와 자바를 사용하여 보다 실용적인 방법으로 다양한 코드의 냄새와 리팩토링 기술을 설명하고 직 www.inflearn.com | 인프런 - 백기선님의 코딩으로 학습하는 리팩토링 강의를 수강하며 정리한 글입니다. 상속 포기하기 서브 클래스가 슈퍼 클래스에서 제공하는 메서드나 데이터를 잘 활용하지 않는다면, 해당 상속 구조는 문제가 있다는 의미이다. 관련 리팩토링 메서드와 필드 내려주기 -> 슈퍼 클래스에 공동으로 사용하는 기능만 남길 수 있다. 슈퍼 클래스 또는 서브 클래스 위임으로 교체하기 -> 서브 클래스가 슈퍼 클래스의 기능을 재사용하고 싶지만 인터페이스를 따르고 싶.. 더보기
[Refactoring] 22. 데이터 클래스 코딩으로 학습하는 리팩토링 - 인프런 | 강의 리팩토링은 소프트웨어 엔지니어가 갖춰야 할 기본적인 소양 중 하나입니다. 이 강의는 인텔리J와 자바를 사용하여 보다 실용적인 방법으로 다양한 코드의 냄새와 리팩토링 기술을 설명하고 직 www.inflearn.com | 인프런 - 백기선님의 코딩으로 학습하는 리팩토링 강의를 수강하며 정리한 글입니다. 데이터 클래스 데이터 클래스 -> 필드 또는 필드에 대한 게터, 세터만 존재하는 클래스 코드가 적절한 위치에 존재하지 않기 때문에 이러한 냄새가 생길 수 있다. 예외적으로 단계 조개기에서 중간 데이터를 표현하는데 사용할 레코드는 불변 객체로 데이터를 전달하는 용도로 사용할 수 있다. 관련 리팩토링 레코드 캡슐화하기 -> public 필드를 가지고 있다면, 게터, .. 더보기
[Refactoring] 21. 서로 다른 인터페이스의 대안 클래스들 코딩으로 학습하는 리팩토링 - 인프런 | 강의 리팩토링은 소프트웨어 엔지니어가 갖춰야 할 기본적인 소양 중 하나입니다. 이 강의는 인텔리J와 자바를 사용하여 보다 실용적인 방법으로 다양한 코드의 냄새와 리팩토링 기술을 설명하고 직 www.inflearn.com | 인프런 - 백기선님의 코딩으로 학습하는 리팩토링 강의를 수강하며 정리한 글입니다. 서로 다른 인터페이스의 대안 클래스들 비슷한 일을 여러 곳에서 서로 다른 규약을 사용해 지원하고 있는 경우 대안 클래스로 사용하려면 동일한 인터페이스를 구현하고 있어야 한다. 관련 리팩토링 한수 선언 변경하기, 함수 옮기기 -> 서로 동일한 인터페이스를 구현하게끔 코드를 수정할 수 있다. 슈퍼 클래스 추출하기 -> 중복된 코드를 슈퍼 클래스로 옮기고 두 클래스를 .. 더보기
[Java] 비동기 기술 비동기 현재 작업하던 스레드가 아닌 새로운 스레드를 만들어 해당 스레드에서 작업을 수행하는 것 -> 병렬적으로 테스크를 수행한다. 요청을 보낸 후 결과가 도달하지 않아도 다음 작업을 수행한다. 스레드를 새로 만들고 폐기하는 것은 많은 비용이 소모된다. -> 그만큼 CPU를 더 사용하므로 -> 스레드 풀을 사용해서 스레드를 미리 만들어두고 사용한다. -> 스레드 사용 후에 스레드 풀로 반환 | 코드 // 1. 비동기 확인 ExecutorService es = Executors.newCachedThreadPool(); es.execute(() -> { try { System.out.println(Thread.currentThread().getName()); Thread.sleep(2000); System.o.. 더보기