반응형

분류 전체보기 509

디자인 패턴 소개 (POSA 2)

POSA 2권에서는 대용량 네트워크, 분산 객체를 위한 패턴을 다룹니다. 대용량 네트워크에서는 서로 이질적인 시스템 간에 통신이 이루어지는 경우가 많습니다. 이질적인 두 시스템간에 통신을 하기 위해서는 어떠한 방법이 필요했고 이 방법이 이번 POSA 2에서 다루는 패턴들 입니다. 이제 POSA 2권에서 소개된 패턴들에 대해서 간략하게 알아보겠습니다. POSA 2 패턴은 크게 4개의 카테고리로 나눌 수 있습니다. 서비스 접근 및 설정, 이벤트 핸들러, 동시성 제어, 동기화 입니다. 서비스 접근 및 설정 이벤트 핸들러 동시성 제어 동기화 Wrapper Facade (Facade Pattern) 비-객체지향 또는 복잡한 시스템을 관리성, 호환성, 견고성을 확보하기 위해 객체지향 클래스로 캡슐화 하는 패턴 Re..

IT/Others 2023.03.19

디자인 패턴 소개 (POSA 1)

패턴이라는 용어를 자주 접했습니다. 파사드 패턴, pub-sub 패턴 등 땡땡-패턴이라고 많이 보았습니다. 도대체 패턴이 무엇이길래 이렇게 패턴 패턴 용어가 생겼을까요. 패턴에 대해서 정리해 보려고 합니다. 패턴이란? 패턴은 문제를 해결할 수 있는 방법이라고 생각합니다. 과거에 문제를 해결한 사람들이 비슷한 문제를 해결하기 위해서 하나의 패턴을 만들었고 우리는 이렇게 만들어진 패턴을 이용해서 유사한 문제를 해결합니다. 건축에서 사용되던 패턴을 소프트웨어에도 적용해 보자고 해서 GoF(Gang of Four) 멤버들은 23개의 디자인 패턴을 추출했습니다. 이 패턴들을 배우다 보면 '과연 이것들이 쓰일까?'라는 의문이 듭니다. 하나만 분명하게 쓰인다면 쉽게 관찰할 수 있겠지만, 실제로는 여러 개의 패턴들이 ..

IT/Others 2023.01.26

DDL, DML, DCL, TCL 용어

DDL (Data Definition Language) - 테이블과 같은 데이터 구조를 정의하는데 사용되는 명령어 - Create, Alter, Drop, Rename, Truncate DML (Date Manipulation Language) - 데이터를 조회하거나 검색하기 위해 사용되는 명령어 - Select, Insert, Update, Delete DCL (Data Control Language) - 데이터베이스에 접근하는 객체들을 사용하도록 권한을 주고 회수하는 명령어 - Grant, Revoke TCL (Transaction Control Language) - 트랜잭션은 데이터베이스에서 논리적인 작업 단위를 구성하는 세부적인 연산들의 집합 - 트랜잭션을 제어하기 위해 사용되는 명령어 - Com..

IT/DataBase 2023.01.25

자바의 비동기 API

자바에서 제공하는 비동기 API가 두 개를 기본적인 내용을 알아보겠습니다. Future 형식 API Reactive 형식 API 비동기 API는 계산이 오래 걸리는 메서드 또는 네트워크나 사람의 입력을 기다리는 메서드에 사용하면 애플리케이션의 효율성을 크게 향상시킬 수 있습니다. 특히, 네트워크나 사람의 입력으로 기다리는 경우에 자원을 낭비하지 않고 효율적으로 하단의 시스템을 활용할 수 있습니다. 어떤 상황일 때 둘을 사용할 수 있을까요? Reactive 형식의 비동기 API는 보통 일련의 이벤트를 비동기로 처리하고 싶을 때 사용하는데 적합니다. 반면 Future 형식의 API는 일회성의 하나의 결과를 처리하는데 적합한 비동기 방법입니다. 다음 포스팅에서 두 비동기 API 방식에 대해서 구체적으로 알아보..

IT/Java 2023.01.15

Runnable과 Thread

자바에서 스레드를 구현할 수 있는 방법은 두 가지가 있습니다. Runnable Runnable은 인터페이스 입니다. 인터페이스를 이용해서 구현하면 재사용성이 높고 코드의 일관성을 유지할 수 있습니다. 또한, 다른 클래스를 상속 받아서 사용할 수 있습니다. Runnable 인터페이스는 아래와 같습니다. 추상 메서드 run()를 가지고 있어서 반드시 오버라이딩하여 구현해 주어야 합니다. @FunctionalInterface public interface Runnable { /** * When an object implementing interface {@code Runnable} is used * to create a thread, starting the thread causes the object's * ..

IT/Java 2023.01.11

프로세스와 스레드 그리고 멀티 태스킹

컴퓨터를 켜서 유튜브 음악을 들으면서, 게임을 하고, 카톡을 하는 멀티 태스킹은 어떻게 가능한 것일까요? 멀티 태스킹을 가능하게 해주는 프로세스와 쓰레드에 대해서 정리해보겠습니다. 프로세스 프로세스는 프로그램이 실행중인 상태를 나타냅니다. 사용자가 프로그램을 실행하면 CPU는 보조 기억 장치에서 메인 메모리로 데이터를 가져와서 코드를 해석하며 작업을 합니다. 이때 메인 메모리에 올라와서 실행되고 있는 상태를 프로세스라고 합니다. 프로세스가 멀티 태스킹을 하기 위한 방법은 두 가지가 있습니다. 첫 번째는 병렬처리 입니다. 네 개의 작업이 있다고 할 때, 네 개의 코어가 있다면 한 개의 코어가 한 개의 작업을 맡아서 처리하면 됩니다. 두 번째는 병렬처리 입니다. 마찬가지로 네 개의 작업이 있다고 할 때, 두..

IT/Java 2023.01.10

동시성(Concurrency) 과 병렬성(Parallel)

공부하다 보니 동시성과 병렬성이라는 용어가 나왔습니다. 어떤 의미를 나타내는지 기억하고 싶어서 찾아보고 정리해 봤습니다. 동시성 병렬성 싱글 코어에서 멀티 쓰레드로 동작하는 방식 멀티 코어에서 멀티 쓰레드를 동작하는 방식 여러 작업이 동시에 실행되는 것처럼 보이는 것 여러 작업이 실제로 동시에 실행되는 것 논리적 개념 물리적 개념 그림으로 보면 직관적으로 이해하실 수 있습니다. 코어 개념을 추가한다면 아래와 같습니다. 참고 - 내용 : https://seamless.tistory.com/42 - 이미지 * https://www.baeldung.com/cs/concurrency-vs-parallelism * https://www.slideshare.net/RubyMeditation/concurrency-i..

IT/Java 2023.01.10

Optional 클래스 사용

Optional은 반환 값을 선택적으로 하기 위해서 사용할 수 있습니다. 일반적으로 반환 값이 null일 때에 발생하는 에러를 방지할 수 있습니다. null를 확인하는 코드를 작성하다 보면 번거로운 코드 줄을 작성할 때가 있습니다. null을 다루는 Optional에 대해서 알아 보겠습니다. Optional의 사용 방법은 간단합니다. Optional 클래스로 값을 감싸면 됩니다. 만약에 값이 없을 경우에 Optional은 빈 값을 감싸서 반환합니다. 그래서 null을 다룰 수 있습니다. 예시에 사용될 데이터 모델을 정의하겠습니다. public class Person { private Optional car; public Optional getCar() { return this.car; }; public ..

IT/Java 2023.01.08

Map 처리

자바 8 이후에 추가된 Map의 디폴트 메서드를 다루어 보겠습니다. 맵을 이용할 것이기 때문에 기본 데이터를 생성하겠습니다. 아래 맵으로 계속 이어나가겠습니다. Map alphabets = new HashMap(Map.ofEntries( entry("1", "a"), entry("2", "b"), entry("3", "c"), entry("4", "d"), entry("5", "e") )); forEach() 맵에서 키와 값을 반복하면서 확인하는 작업은 꽤나 번거롭습니다. for문으로 몇 줄 작성해야 합니다. 이러한 번거로움을 forEach 메서드로 간단하게 할 수 있습니다. alphabets.forEach((key, value) -> System.out.println(value + " is " + va..

IT/Java 2022.12.19

Arrays.asList() vs ArrayList()

리스트를 만들 때 주로 사용하는 두 가지 메소드에 대해서 살펴보겠습니다. 같을 것 같으면서도 다른 이 둘의 차이점을 주로 보겠습니다. Arrays.asList() 배열을 고정된 리스트 객체로 만들어 주는 메소드 입니다. 단지 원본 배열을 감싸서 리스트로 만들기 때문에 데이터가 저장된 주소가 동일합니다. 그래서 복사되거나 새로 만들어지지 않습니다. 고정된 길이를 갖기 때문에 요소를 제거하거나 추가할 수 없습니다. 만약에 시도한다면 에러 메시지를 받습니다. 그러나 배열에 존재하는 요소를 변경할 수는 있습니다. Arrays.asList()로 만들어진 리스트의 요소를 변경한다면 원본 배열의 요소도 변경됩니다. String[] stringArray = new String[] {"a", "b", "c", "d"};..

IT/Java 2022.12.19
반응형