주제 정리 8

[운영체제] 블로킹 vs 논블로킹, 동기 비동기

용어 정리 제어권 - 자신의 코드를 실행할 권리, 제어권을 가진 함수는 자신의 코드를 끝까지 실행 후 호출한 함수에 제어권을 반환 Blocking(블로킹) Thread에서 A 함수가 B 함수를 호출하면, 제어권을 A가 호출한 B 함수에 넘겨주는 방식이다. A 함수가 B 함수를 호출하며 제어권을 넘겨주면 B 함수가 동작하고 A 함수는 B 함수가 동작하는 동안 멈춰있게 된다. 작업을 완료한 B함수는 제어권을 자신을 호출한 A 함수에게 반환하고 A 함수는 멈췄던 부분부터 작업을 이어나간다. Non-Blocking(논블로킹) 블로킹과는 다르게 제어권을 넘겨주지 함수를 호출하여도 제어권을 전달하지 않는다. A 함수가 B 함수를 호출하면 B 함수는 실행이 되지만 제어권은 A 함수가 그대로 가지고 있어 A 함수는 작..

주제 정리 2021.09.16

[운영체제] Lock의 종류

락(lock)이란? 공유 자원을 하나의 쓰레드가 사용하고 있을 때 다른 쓰레드가 공유 자원을 사용하지 못 하도록 제한을 거는 것이다. 공유 자원 이란? 전역 변수 DB 동적 객체 메모리 등의 여러 쓰레드가 접근하여 사용하는 공동의 자원이다. 지역 변수는 단일 쓰레드 안에서 사용되는 자원으로 공유 자원이라고 할 수 없다. Lock의 필요 이유 위의 상황 처럼 쓰레드1과 쓰레드2가 동시에 같은 전역 변수에 접근한다고 가정한다면 두 개의 쓰레드가 완료된 후에는 값이 2가 되어야 하는지 1이 되어야 하는지 알 수 없을 것이며 매번 값이 변경될 가능성도 있을 것이다. 이처럼 알 수 없는 비정형적인 결과를 발생 시킬 수 있으며 동시에 접근 쓰레드들은 공유 자원을 사용하기 위한 race condition 상태가 되게..

주제 정리 2021.08.26

[아키텍처]마이크로 서비스

마이크로 서비스란? 대규모 애플리케이션을 개발할 때 각각의 담당 영역을 가진 소규모의 독립적인 구성요소로 구분하여 개발하는 방식 사용자의 요청을 처리하기 위해 여러 내부 마이크로 서비스를 호출하여 응답을 작성한다. (주로 API 형식) 수천 개의 독립적인 웹 표준, 언어, 데이터베이스, 개발자 툴로 확인되는 웹 서버의 구성 요소들을 의미하며 개발 회사, 오픈 소스 클라우드에서 제공되는 소프트웨어나 앱 또한 구성요소이다. 용도 주로 애플리케이션의 개발 속도를 높이기 위해서 사용하는 방식 웹사이트 마이그레이션 - 모놀리식 플랫폼에서 호스팅되는 복잡한 웹사이트를 클라우드, 컨테이너 기반으로 마이그레이션 한다. 미디어 콘텐츠 - 이미지와 통영상을 객체 스토리지 저장하여 웹, 모바일에서 제공 트랜잭션 및 인보이스..

주제 정리 2021.08.19

[JAVA] HashSet

HashSet HashSet은 Set 인터페이스를 상속 받아서 구현한 클래스입니다. Set의 특징을 이어받았기 때문에 중복된 값을 가질 수 없습니다. null 값 또한 1개만 가질 수 있습니다. 정보들은 비선형 구조로 저장되기 때문에 순서가 없으며 index를 사용하지 않습니다. Hashset은 객체를 저장하기 전에 저장할 객체의 hashCode() method를 호출하여 hashCode를 알아내 저장되어있는 객체들의 hashCode와 비교합니다. 같은 hashCode를 가지는 값이 있다면 equals() 함수를 사용하여 두 객체를 다시 한번 비교하는 과정을 거쳐 true 값을 가지게 되면 중복된 객체로 판단하여 저장하지 않습니다. 사용법 HashSet set1 = new HashSet();//선언 파라..

주제 정리 2021.08.13

[JAVA] HashTable, HashMap

HashTable와 HashMap 공통점 Map을 상속 받아 구현한 클래스로 Key, Value를 한 쌍으로 가지는 자료구조이다. Key 값은 식별을 위한 값이고 Value는 실제로 사용할 값인 데이터를 넣는 형식이다. 리스트 자료구조보다 탐색에 있어서는 더 놓은 효율을 기대할 수 있다. Method 값을 저장 : put(key, value); 값을 불러오기 : get(key); 값을 변경하기 : replace(key, value); 삭제하기 : remove(key); 크기 확인하기(저장된 데이터 갯수) : size(); 비어 있는지 확인하기 : isEmpty(); 차이점 HashTable은 동기화를 지원하며 HashMap은 동기화를 지원하지 않아 멀티스레드 상황에서는 HashTable을 사용하는 것이 ..

주제 정리 2021.08.12

Object 객체 탐구

모든 클래스의 부모 클래스로서 자바에서 최상위에 클래스이다. toString() 모든 하위 클래스에서 메서드를 재정의 해야한다. 호출하지 않아도 다른 곳에 쓰일 수 있다. → 디버그, 오류메세지 로깅 시 자동으로 호출 할 수 있다. 간결하고 가독성이 좋은 형태로 정보를 반환시켜야 한다. 객체의 주요 정보를 모두 반환하는 것이 좋다. equals() 주소 값을 비교하는 == 연산과는 다르게 두 대상의 값 자체를 비교한다. 클래스는 call by reference이기 때문에 생성시 주소값이 부여되므로 같은 값을 부여하더라도 주소값이 다를 수 있어 버그가 발생할 수 있기 때문에 객체 내부의 값 자체를 비교하기 위해서 사용한다. hashCode() 객체의 주소값을 변환하여 생성한 객체 고유의 정수 값 Strin..

주제 정리 2021.08.07

디자인 패턴 23가지

23가지의 개발 패턴 정리하기 (참고 https://refactoring.guru/) Creational Patterns (생성 패턴) Factory Method 객체 생성을 위한 인터페이스를 제공하지만 클래스의 인스턴스 생성의 타입을 서브클래스가 결정하도록하는 방식 패턴 없이 발생할 수 있는 문제 새로운 서브 클래스 추가의 필요시 전체적인 코드의 수정이 필요하다. 서브 클래스의 지속적인 추가시 지속적으로 발생할 가능성이 있다. 해결법 new 연산자 사용 대신에 factory method로 대체하여 사용한다. new 연산자는 factory method에서 호출 시킨다. factory는 공통된 인터페이스를 상속하고 있어야한다. Abstract Factory 추상화를 통해 구제척인 클래스를 특정하지 않고 비..

주제 정리 2021.08.07

[JAVA] StringBuilder와 StringBuffer

JAVA에서는 문자열을 다룰수 있는 String이라는 클래스가 있다. 그럼에도 불구하고 JAVA는 문자열을 다루는 StringBuilder와 StringBuffer 클래스가 존재한다. 가장 큰 이유로는 StringBuilder와 StringBuffer 클래스는 String 클래스와는 다르게 가변적으로 값을 변경할 수 있다는 것이다. String 클래스도 아래와 같은 방법으로 문자열을 변경할 수 있다. String str1 = "ABC"; System.out.println("변경전 : " + str1); str1 = str1 + "D"; System.out.println("변경후 : " + str1); 변경전 : ABC 변경후 : ABCD 하지만 String 클래스는 값을 변경할 때마다 메모리에 새로운 공..

주제 정리 2021.08.07
320x100