정확히 말하자면 자바는 Synchronous / blocking 방식을 지원하는 언어다. 그렇다면 Synchronous / blocking이란 무엇일까? 그리고 반대 되는 Asynchronous / non-blocking에 대해서도 알아보자 Synchronous / Blocking 먼저 각자의 뜻을 알아보면 Synchronize는 간단하게 두 개의 주체가 서로 동시에 수행하거나, 동시에 끝나거나 끝나는 동시에 시작하는 것을 말한다. 이를 쉽게 예로 들자면 이런 것이다. 한명의 직원이 있고 상사가 있다고 가정해보자 동기적으로 동기적인 직원은 상사에게 서류를 제출하고 상사가 일을 처리할 때 까지 계속 물어볼 것이다. 그리고 상사가 일처리를 끝내고 결과를 줘야만 직원은 다시 가서 하던 일을 할 수 있다. bl..
자바는 멀티 스레드 프로그래밍을 지원하는 언어이다. 그렇다 보니 아무 스레드가 와서 마음껏 자원을 읽고 쓰고가 가능하다면 클라이언트가 원하는 정보를 얻기 힘들 것이다. 그렇기 때문에 자바에서는 Lock을 걸어 공유 자원이 Thread-safe 하게 해준다. 그렇다면 자바에서는 어떻게 Lock을 걸 수 있을까? Monitor(모니터) 모니터는 고급 언어의 설계 구조물로서, 개발자의 코드를 상호배제 하게끔 만든 추상화된 데이터 형태이다. 세마포의 소유와 획득 과정을 모니터 자체 내에서 처리하기 때문에 코딩하기에 조금 더 편리하며 잘못된 코딩으로 인한 문제 발생이 세마포보다 덜 하다. 또한 모니터는 세마포의 block/wakeup과 유사한 wait/signal을 제공한다. 세마포는 리스트 형태로 사용하지만 모..
ordinal 메서드 대신 인스턴스 필드를 사용하라 대부분의 열거 타입 상수는 자연스럽게 하나의 정숫값에 대응한다. 그리고 ordinal은 몇 번째 위치인지 반환해주는 메서드이다. 하지만 이 메서드는 치명적인 단점이 존재한다. public enum BadOrdinal { SOLO, DUET, TRIO, QUARTET, QUINTET, SEXTET, SEPTET, OCTET, NONET, DECTET; public int numberOfMusician() { return ordinal() + 1; } } 동작은 하지만 유지보수에 정말 좋지 않은 코드이다. 상수 선언 순서를 바꾸는 순간 오동작하며 복합 4중주도 똑같은 8명이지만 이미 8중주 상수가 존재하기 때문에 추가할 수 없다. 해결책은 열거 타입 상수에..
Enum 열거 타입은 일정 개수의 상수 값을 정의한 다음, 그 외의 값은 허용하지 않는 타입이다. 사계절, 태양계의 항성 등이 좋은 예이다. 자세한 문법에 대한 사용 등은 설명을 생략할 것이다. 궁금하신 분들은 다음 블로그를 참고하시기 바란다. https://blog.naver.com/ilgolc/222474673407 Java_11일차(기선님) 열거체(Enumeration type) C언어와 C++에서는 열거체를 사용할 수 있지만, JDK 1.5 이전의 자바에서... blog.naver.com 자 그러면 열거 타입을 올바르게 사용할 수 있도록 다 같이 공부해보자 int 상수 대신 열거 타입을 사용하라 먼저 정수 열거 타입 패턴에 대해 알아볼 필요가 있다. 코드를 보자 public class Intege..
저번 시간에는 Generic을 사용하는 이유에 대해 자세하게 살펴보았다. 하지만 Generic은 너무 딱딱하다. 하나의 타입을 정의해놓으면 그 타입 외에는 어떠한 요소도 들어올 수 없다. 상속을 받더라도 마찬가지이다. 이러한 동작은 리스코프 치환원칙에 위배되는 설계이다. 상위 타입이 하는 일을 제대로 수행할 수 없기 때문이다. 자바는 이러한 문제에 대해서도 해결책을 갖고 있다. 한정적 와일드 카드 타입 Stack 클래스를 한 번 살펴보자 public class Stack { public Stack(); public void push(E e); public E pop(); public boolean isEmpty(); } 여기에 모든 원소를 스택에 넣는 메서드를 추가해보자 public void pushAl..
대부분 제네릭에 대해 잘 알고 있다고 시작하는 포스팅이니 잘 모른다면 기본을 공부해보고 오는 것을 추천한다. https://blog.naver.com/ilgolc/222552815030 Java_Week14 Generics 란? 제네릭은 다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일 시의 타입 체크... blog.naver.com 제네릭 기초에 관한 내용들이 포스팅 되어 있으니 한 번 보고 이 글을 읽기를 바란다. 제네릭은 자바 5 부터 나온 문법으로 기본적으로 컬렉션에서 많이 볼 수 있었을 것이다. 제네릭은 다음 처럼 사용할 수 있다. List list = new ArrayList(); // 뒤에 선언 부에는 생략이 가능 그럼 바로 시작해보자. 로 타입 보다 Generic 제네릭을 사용..
Abstract 클래스는 엄연히 클래스이기 때문에 1개밖에 상속을 받을 수 없으나 interface는 다중 구현이 가능하다는 대표적인 차이가 있습니다. 다만 제 경험을 살려 잘못된 추가적인 오해가 있을 법한 사항이 있어 글을 적었습니다. Interface는 abstract 클래스와 달리 내부 구현이 안되지 않아? 이런 생각을 할 분이 분명 있다고 생각한다. Interface 내부에 기능 구현은 흔치 않은 상황이기 때문이다. 정답을 먼저 말씀드린다면 그렇지 않다. Why? Interface는 JDK 8 버전 이후 부터 static 메서드 외에도 default 메서드를 지원합니다. 이는 기존에 사용되는 interface에 문제점인 한 번 배포되면 수정이 어렵다는 점을 해결하고 있습니다. 핵심은 이것이 아니기..
HashTable은 컬렉션 프레임워크가 만들어지기 전에 존재하던 것이다. 하지만 호환을 위해 설계를 변경해서 남겨 두었다. 사용한다면 말리진 않겠지만 추천하진 않는다.(HashMap or ConcurrentHashMap) 사용 권장 HashTable은 이름 그대로 해시 테이블을 구현한 클래스로 거의 HashMap과 사용법이 동일하다. public class HashTableEx { public static void main(String[] args) { Hashtable hashtable = new Hashtable(); hashtable.put("1", "kim1"); hashtable.put("2", "kim2"); hashtable.put("2", "kim3"); hashtable.put("3", ..
객체지향 생활 체조 원칙에는 9가지의 원칙이 존재한다. 그 중에 규칙 8을 인용해보면 다음과 같은 규칙이 존재한다. 규칙8. 일급 컬렉션을 사용하라 이 규칙의 적용은 간단하다. 컬렉션을 포함한 클래스는 반드시 다른 멤버 변수가 없어야 한다. 컬렉션은 매우 유용한 원시타입이다. 많은 동작이 있지만 후임 프로그래머나 유지보수 담당자에 의미적 의도나 단초는 거의 없다. 간단하게 먼저 일급 컬렉션을 보여드리자면 다음과 같다. List list = new ArrayList(); list.add(3); list.add(4); list.add(6); list.add(1); 위 코드를 객체로 한번 감싸 주는 것이다. public class PeopleQueue { private List peoples; public P..
우리는 종종 Key - Value 구조의 HashMap을 사용한다. HashMap은 Key 중복이 없어 중복을 거르고 Key 값으로 빠르게 값을 찾아오기에 조회하는데에 이 점이 있다. 필자는 본 내용을 Map에 대한 사전 지식에 대해 다 갖고 있다는 전제하에 글을 써볼까 한다. HashMap이 중복 key를 걸러낼 수 있는 이유 자바는 모든 객체마다 고유한 hashcode를 갖는다. 이 hashcode는 해싱 알고리즘을 이용하여 만들어낸 코드로 내부 구현은 객체의 주소를 이용하여 만들어진다. public class HashEx1 { public static void main(String[] args) { String str1 = "hello"; String str2 = "world"; System.out..
- Total
- Today
- Yesterday
- 인터뷰
- docker
- 동시성
- 프로그래밍
- 개발자
- MySQL
- IT
- DevOps
- 면접 준비
- 자바
- JPA
- swarm
- 개발
- 프로젝트
- 게시판
- 코드
- DB
- 백엔드
- java
- 면접준비
- 취업
- 면접
- CS
- Spring
- 취업준비
- thread
- 취준
- 코딩
- Kotlin
- Redis
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |