전체 글 132

1. 리액티브 시스템과 리액티브 프로그래밍 (2024-06-25)

1. 리액티브 프로그래밍 코드 구성우리가 실제로 작성하는 리액티브 프로그래밍 코드는 크게 Publisher, Subscriber, Data Source, Operator 등으로 구성된다. - Publisher : 발행자, 게시자, 생산자, 방출자 등 여러 가지 용어를 사용하지만 공통점은 입력으로 들어오는 데이터를 제공하는 역할을 한다는 것이다. - Subscriber : Publisher가 제공한 데이터를 전달받아 사용하는 주체이다. 구독자라고도 불리며 생산자의 반대 의미로 데이터를 소비하는 소비자라고도 불린다.  - Data Source : Publisher의 입력으로 들어오는 데이터를 대표하는 용어이다. 리액티브 프로그래밍에서는 Data Stream이라고도 표현한다. 엄밀히 따지면 둘의 의미는 조금 ..

TIL(사전캠프) 2024.06.25

리액티브 시스템 (2024-06-24)

1. 리액티브 시스템이란?1. 리액티브 시스템은 반응을 잘하는 시스템이다. 2. 리액티브 시스템에서 반응을 잘한다는 것은 클라이언트의 요청에 즉각적으로 응답함으로써 지연 시간을 최소화한다는 것이다.2. 리액티브 선언문으로 리액티브 시스템 이해하기1. 리액티브 선언문은 리액티브 시스템 구축을 위한 일종의 설계 원칙이자 리액티브 시스템의 특징이다. MEANS : 리액티브 시스템에서 주요 통신 수단으로 무엇을 사용할 것인지 표현한 것이다. 그림에 나와 있는 비동이 메시지 기반의 통신을 통해 구성요소들 간의 느슨한 결합, 격리성, 위치 투명성을 보장한다. FROM : 메시지 기반 통신을 통해서 어떠한 형태를 지니는 시스템으로 형성되는지를 나타낸다. 그림에서는 리액티브 시스템이 비동기 메시지 통신기반하에 탄력성과..

TIL(사전캠프) 2024.06.24

리버싱2. 20~22(2024-06-21)

1. main() 함수 찾기F7 명령으로 한 줄씩 내려오다보면 또 402524주소의 어떤 함수를 호출한다.(빨간색 표시) F7로 들어가보자  402524 함수는 main()가 아닐것이다. 왜냐하면 MessageBox() API 호출 코드가 보이지 않기 때문이다. 다시 Ctrl+F9으로 함수탈출을 하자 지금부터 쭉 F7로 한 줄씩 실행하며 함수를 호출할 경우 들어가보고 main()인지 판단하고 아니면 다시 나가는 패턴을 계속해보자 계속 내려가다보면 4010E4 주소의 CALL 명령이 보인다. 이 명령어는 Win32 API 호출코드이다. 지금 단계에서는 따라 들어갈 필요가 없으니 넘어간다.계속 실행하다 보면 401144 주소에 CALL HelloWor.00401000 명령이 있다. 여기를 실행해보자 Mes..

TIL(사전캠프) 2024.06.21

SQL 코드카타. 개와 고양이는 몇 마리 있을까(2024-06-20)

문제 요약 : 고양이와 개 각각의 숫자를 조회한다. 그리고 고양이를 개보다 먼저 조회한다. 문제 풀이) 기본적인것은 생략하겠다. 1. ANIMAL_TYPE과 개 고양이 각각의 숫자를 출력해야 한다.2. count(*)는 레코드의 개수를 구하는 함수이다. 개와 고양이별로 구해야 하므로 GROUP BY 를 통해 동물 그룹중에서 count를 한다.3. ORDER BY CASE WHEN은 ANIMAL_TYPE이 'Cat'이라면, 즉 고양이라면 1첫번째로 아니면 후순위로 출력하게 하였다.

TIL(사전캠프) 2024.06.20

리버싱1. 13 ~ 20(2024-06-20)

1. Hello World! 프로그램Hello World! 프로그램으로 첫 디버깅 실습을 한다. 먼저 실습예제의 코드는 이렇게 되어있다.이 코드를 실행파일로 만든다. 실행파일을 만든다는 것은 사람이 이해하기 쉬운언어인 C언어(HelloWorld.cpp)를 컴퓨터가 이해하기 쉬운 언어인 기계어(HelloWorld.exe)로 변환하는 것이다. 기계어는 사람이 알아보기 어렵기 때문에 디버거(Debugger) 유틸리티를 사용한다. 디버거에 탑재된 디스어셈블러(Disassembler) 모듈은 이 기계어를 어셈블리(Assembly) 언어로 번역해서 보여준다. * 어셈블리 언어는 CPU에 종속되어 있다. Intel x86 계열의 CPU와 ARM 계열의 CPU는 서로 어셈블리 명령어의 형태가 다르다.1. 디버깅 목표H..

TIL(사전캠프) 2024.06.20

유용한 함수들(Java) (2024-06-19)

1. String 클래스 메서드length(): 문자열의 길이를 반환합니다.charAt(int index): 특정 인덱스에 있는 문자를 반환합니다.substring(int beginIndex, int endIndex): 문자열의 부분 문자열을 반환합니다.indexOf(String str): 특정 문자열의 인덱스를 반환합니다.equals(Object anObject): 두 문자열이 같은지를 비교합니다.replace(char oldChar, char newChar): 특정 문자를 다른 문자로 교체합니다.split(String regex): 정규 표현식에 따라 문자열을 분할합니다.toUpperCase(), toLowerCase(): 문자열을 대문자/소문자로 변환합니다.trim(): 문자열의 양쪽 끝에 있는 공..

TIL(사전캠프) 2024.06.19

알고리즘 코드카타. 두 정수의 합(2024-06-18)

문제 요약 : 두 정수 a b가 주어지고 a ~ b 사이의 모든 정수의 합을 구하라 이 문제는 for문으로 a부터 b까지 하나씩 더하면 문제는 해결된다.그러나 이는 단순한 방법이며 숫자가 커질수록 시간복잡도가 커진다. O(n)인 연산을 O(1)로 낮추는 방법이 있다. 등차수열의 합 공식을 사용하면 된다.  등차수열을 이용한 풀이)여기서 n은 항의 개수, a는 첫 번째 항, l은 마지막 항이다. 등차수열의 합의 공식을 설명하기엔 너무 길어지므로 따로 공부해보는것이 좋을것이다. 이렇게 코드를 개선하면 시간복잡도를 획기적으로 개선할 수 있다.

TIL(사전캠프) 2024.06.18

알고리즘 코드카타. 정수 제곱근 판별(2024-06-13)

문제 요약 : 정수n을 받고 n의 제곱근이 양의 정수라면 그 제곱근을+1한 뒤, 제곱을 해서 반환한다. 제곱근이 양의 정수가 아닌경우 -1을 반환한다. 풀이 및 설명)먼저 제곱근을 담을 x 변수를 선언한다. (아직까진 제곱근값을 담지 않았다.) 그리고 n의 제곱근이 양의 정수인지 판별한다. 아니라고 판단되면 바로 -1을 반환하고 종료한다. 양의 정수가 맞다면 x에 제곱근을 담는다. 그 후 1을 더하고 제곱을하여 반환한다. 처음부터 x에 제곱근 값을 넣지 않는 이유는 Math.sqrt는 double 형으로 반환해준다. 즉 long타입인 x에 넣으려면 형변환을 해줘야하는데 그렇게되면 소수점이 잘려나가서 이것이 정수인지 판별이 불가능해지기 때문이다. 이후 제곱근이 정수인지 아닌지 판별 후 정수가 맞다고 판단이..

TIL(사전캠프) 2024.06.13

SQL 코드카타. 경기도에 위치한 식품창고 목록 출력하기(2024-06-12)

빨간상자를 주의깊게 살펴보고 하나씩 나아가면 된다.풀이 및 설명)별 문제없이 풀었다. 하지만 빨간박스의 CALESCE() 함수가 무엇인지 알아보자 일단 COALESCE 함수는 "냉동시설 여부가 NULL인 경우, 'N'으로 출력" 을 위하여 사용된 부분이다. 먼저 COALESCE의 기본 형태를 보자 이런 형식을 가지고있으며 컬럼1, 컬럼2, 컬럼3, 컬럼4를 순서대로 검사하여 Null이 아닌값을 표시한다. 전부 Null값이면 기본값을 표시한다. 넣을 수 있는 컬럼의 개수제한은 없다. 1개를 넣어도 되고 4개 이상 넣어도 된다. 이제내가 사용한 COALESCE 함수를 다시 살펴보면COALESCE(FREEZER_YN, 'N') AS FREEZER_YN FREEZER_YN 컬럼의 값이 Null이면 'N'을 출력..

TIL(사전캠프) 2024.06.12

알고리즘 코드카타. 자연수 뒤집어 배열로 만들기(2024-06-12)

문제 요약 : long 타입의 자연수를 입력받고 뒤집어서 배열로 저장한다. 풀이 및 설명)빨간색 박스를 위에서부터 설명한다. 1. 숫자를 문자열로 바꾸고 그 길이를 반환한다. 구한 길이를 배열의 크기로 선언한다. 2. n은 long타입이다. 하지만 answer배열은 int타입이다. 그래서 int형으로 변환하여 값을 넣는다.- 어차피 한자리숫자를 넣기 때문에 바로 n%10으로 받아도 상관없지 않나? 라고 생각할 수 있지만 아니다. 오류가 발생함- (int)n%10을 하면 우선순위 문제로 오류가 발생한다. 큰 숫자가 들어갈 경우 long타입인 n을 범위에 맞지 않는 int형으로 변환을 먼저하기 때문에 (n%10)을 통해 먼저 int형의 범위내로 축소시킨 다음 int형으로 변환한 것이다.

TIL(사전캠프) 2024.06.12