본문 바로가기

전체 글

Delegate란? 대리자 (임시저장을 생활화하자.............................ㅠㅠㅠ) 대리자는 어떤 프로퍼티가 작업을 수행할 때, 다른 객체에게 위임하여 그 객체의 메서드가 실행되게 하는 것이다!! class Example { var p: String by Delegate() } class Delegate { operator fun getValue(thisRef: Any?, property: KProperty): String { return "$thisRef, thank you for delegating '${property.name}' to me!" } operator fun setValue(thisRef: Any?, property: KProperty, value: String) { println.. 더보기
[하톡시그널] Retrofit으로 Nest.js와 통신하는 과정에서 있던 일.. 배경 매칭 시스템을 이렇게 구현하기로 했다. 매칭하기 버튼 클릭 -> (POST) 매칭 대기열에 추가 -> 반복 (POST) 매칭 됐는지 확인 (0.1초마다 보냄) 이렇게 확인하는 POST 요청을 3개 클라이언트에서 계속 보낸다. 매칭이 완료됐을 때, 확인 요청을 한 각 클라이언트에게 ROOM 정보를 준다. 문제 1. POST Response로 받을 데이터를 data class로 만들어 뒀다. 그 구조는 아래와 같다. @Parcelize data class roomInfo( val user1: userData?, val user2: userData?, val user3: userData? ) : Parcelable @Parcelize data class userData( val Id: String?, v.. 더보기
[하톡시그널] Retrofit으로 서버와 연결하기 처음으로 안드로이드에서 서버와 연결하는 과정 이슈 1. http와 통신하기 현재 서버가 http로 올라가 있었는데, private val moshi = Moshi .Builder() .add(KotlinJsonAdapterFactory()) .build() private val retrofit = Retrofit .Builder() .addConverterFactory(MoshiConverterFactory.create(moshi)) .baseUrl(BASE_URL) .build() interface MatchingApiService{ @POST("/room/entrance") suspend fun StartMatch(@Body body: MatchingRequest): Response } object .. 더보기
PintOS Project 4. File System Project4. File System 1.Indexed and Extensible Files 1번과제는 2가지 목표가 있다. 하나는 FAT을 이용해 File system을 구현하는 것이다. 또, 현재는 파일의 크기가 limit이 있는데 얼마든지 확장할 수 있는 구조를 만들어야 한다. 파일은 의미 있는 정보를 담는 논리적인 단위이다. 이 파일은 메타데이터 (파일의 진짜 정보!)를 가지고, 이름 길이 등등을 가진다. 원하는 파일을 열고 닫고 쓰고 읽기 위해서는 파일에 접근해야한다. 이 방법론에 관한 내용이 핵심이다. 한 섹터는 512 bytes이고 어떤 파일이 총 10개의 섹터가 필요하다고 하자. 10개의 연결된 섹터로 파일을 저장하면 좋겠지만 이럴 경우 외부단편화가 발생하기 쉬워진다. 때문에 우리는 10.. 더보기
Project3. Virtual Memory (PintOS) Project3. Virtual Memory 1. Memory Management 늘 그래왔듯, 가장 기초 즉 이 project3가 흘러가는 코드의 시작을 공부한다. Project2까지는 load를 어떻게 해왔는지 생각해보자. 우리는 process_exec -> load -> load_segment -> setup_stack 등의 방식으로 메모리를 적재했다. (load_segment, setup_stack은 주의깊게 보지 못했을 수 있다.) 그러나 프로그램 전체를 메모리에 load 하는 것은 매우 비효율적이다. 그래서 우리는 lazy_load를 사용한다. 지금 당장 사용해야할 부분만 load하고, 사용하지 않는 부분은 표시만 해둔다고 생각하면 될 것 같다. 이렇게 하면 당장 큰 프로그램을 모두 load하.. 더보기
[프로그래머스] 기둥과 보 설치 (python) (2020 KAKAO BLIND RECRUITMENT) 풀이 카카오 기출문제답게, 구현문제이다. 풀이해보면 알겠지만 로직이 어렵거나 한 부분은 없다. 심지어 예외처리도 문제에서 많이 해주고 있기 때문에 간단하다면 간단하다!! 나는 각각 보와 기둥일 때, 그리고 설치 / 삭제를 나누어 생각하여 총 4가지의 함수를 만들었다. 보 설치 / 삭제, 기둥 설치 / 삭제 함수를 만들고 해당하는 경우마다 함수를 호출하여 설치 / 삭제가 가능한지 판별하였다. 로직은 문제에 명시된 것을 코드로 옮기는 느낌이라 코드를 보면서 이해하는게 더 편할 것 같다. 코드 def solution(n, build_frame): global pil_graph, bo_graph answer = [] pil_graph = [[0] * (n + 1) for _ in range(n + 1)] bo_.. 더보기
PintOS project2. User Program Project2. User Program 1. Argument passing 첫 과제는 Argument passing이다. 이를 이해하기에 앞서, 2주차 과제에서 우리가 배워야 할 것이 무엇이고 목적이 뭔지 생각해보자. 쉘에서 우리는 프로그램을 실행할 때, echo 'Hello World' 처럼 echo라는 프로그램을 'Hello World'라는 인자값을 주어 실행한다. 혹은 더블 클릭으로 폴더를 열거나, 파일을 실행하는 것도 같은 맥락일 것이다. 이렇게 사용자가 어떤 프로그램을 실행하겠다고 명령했을 때, 그 명령을 컴퓨터가 이해할 수 있게 잘 전달해줘야 한다. 즉, project2의 목표는 User Program을 어떻게 컴퓨터가 식별하고 실행하는가! 에 관한 것이다. 더 구체적으로 말하자면, Pint.. 더보기
[BOJ]11728. 배열합치기 (python) https://www.acmicpc.net/problem/11728 11728번: 배열 합치기 첫째 줄에 배열 A의 크기 N, 배열 B의 크기 M이 주어진다. (1 ≤ N, M ≤ 1,000,000) 둘째 줄에는 배열 A의 내용이, 셋째 줄에는 배열 B의 내용이 주어진다. 배열에 들어있는 수는 절댓값이 109보다 작거 www.acmicpc.net 문제 정렬되어있는 두 배열 A와 B가 주어진다. 두 배열을 합친 다음 정렬해서 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 배열 A의 크기 N, 배열 B의 크기 M이 주어진다. (1 ≤ N, M ≤ 1,000,000) 둘째 줄에는 배열 A의 내용이, 셋째 줄에는 배열 B의 내용이 주어진다. 배열에 들어있는 수는 절댓값이 109보다 작거나 같은 정수이다. 출력.. 더보기