wanna be dev 🧑‍💻

Cool 하고 Sick한 개발자가 되고 싶은 uzun입니다

A.K.A. Kick-snare, hyjhyj0901, h_uz99 solvedac-logo

전체 글 175

순서보장 비동기 작업에 대한 고찰

상황Node.js 프레임워크로 돌아가는 서버WebRTC 구축을 위해 MediaSoup을 사용통신을 위해 socket.io 를 사용하고 있다.문제점socket.io 에서, 클라이언트에서 이벤트를 emit 하면 callback으로 응답을 주는 API의 경우callback으로 응답 된 데이터를 바로 다음에 사용해되는 경우callback이 호출될때까지 대기해야함 → 즉 순서가 보장되어야한다. 시도한 방법0. 고전적인 방법 : Callback Hellcallback안에 다음으로 실행할 코드를 적으면 되긴하지만 콜백지옥을 불러오고 싶지는 않음심미적으로 불편 1. 단순하게 동기로 받아오기(socket.on의 람다 식이 callback의 listener)소비 시점에 따라 res가 할당 되어 있을지, emptyStrin..

개발자로 취업을 하고나서

참 오랜만에 블로그에 글을 쓴다. 글을 챙겨보는 사람이 있는지는 모르겠지만 마지막 회고로부터 1년반이 지났다. 그 사이 많은 일이 있었는데 바쁘다는 이유로 그냥 저냥 시간이 흘러버렸다. 동아리에서 좋은 인연을 만나 연애도 하고, 큰 이유없이 시작한 안드로이드 개발을 진로를 결정하게 되었으며, 어쩌다 부트캠프 활동을 하면서 살면서 처음으로 판교에도 가봤다. 바라던 현장실습에 합격해 통해 처음으로 직무 경험을 얻고, 돈도 벌어보고, 많은 부분을 배웠으며 판교에 있는 회사에서 인턴을 하면서 고시원 생활도 해보면서 (할짓 못됨 1) 동시에 졸업과제를 진행해야했기에 부산-서울을 밥먹듯이 왕복했다. (할짓 못됨 2) 인턴이 연장되면서 본사 리스크(?)로 정규직이 되지 못할까 노심초사 하기도 하며 (할짓 못됨 3) ..

Retrospect 2023.11.26

[이펙티드 코틀린] 4장 🖼️ 추상화 설계 Abstraction Design (item 26..32)

item26 : 함수 내부의 추상화 레벨을 통일하라 추상화 계층화 어떤 계층에서 작업할 때 그 아래 수준의 층은 깊게 생각하지 않아도 된다 높은 레벨일수록 단순함을 얻고, 제어력을 잃는다. 추상화 레벨 통일 CS 와 같이 코드또한 계층화가 가능한데, 이를 위한 기본적인 도구가 함수이다. 함수에서 SLA 추상화 레벨 통일 원칙을 통해 추상화가 가능하다. 아키텍처 추상화 아키텍처 수준에서 추상화하여 서브시스템의 세부 사항을 숨겨 상호 운영성과 플랫폼 독립성을 얻을 수 있다. 이는 문제 중심으로 프로그래밍 할 수 있음 모듈을 분리하여 계유의 요소를 숨길 수 있다. item27 : 변화로 부터 코드를 보호하려면 추상화를 사용하라 상수 추상화 val MAX_THREADS = 10 상수를 추출하여 이름을 붙여 관리..

Kotlin 2023.06.28

[이펙티드 코틀린] 3장 ♻️ 재사용성 Reusability (item 19..25)

item19 : knowledge를 반복하여 사용하지 말라 프로젝트에서 이미 있던 코드를 복사해서 붙여넣고 있다면, 무언가가 잘못된 것이다 knowledge가 뭘까 넓은 의미로 의도적인 정보 비즈니스 로직 또는 공통 알고리즘 로직은 시간에 따라 변활 수 있다 왜 반복해서 쓰면 안되는데 프로그래밍에서 유일하게 유지되는 것은 "변화한다는 속성" knowledge가 반복되면 변화에 취약하다. 이는 프로젝트의 scalable을 제한하고, fragile하게 한다. 반복되는 부분을 추출하여 재사용성을 높임으로써 해결 이건 반복이 아니에요 추출멈춰 반복처럼 보이는데 사실 알고보니 짜잔 다른 knowledge였습니다 2개의 안드로이드 프로젝트에서 빌드 설정이 비슷하다고 추출하면 안됨 어떻게 판단하지 그럼 비즈니스 규칙..

Kotlin 2023.06.28

[이펙티브 코틀린] 2장 👀 가독성 Readability (item 11..18)

item 11 : 가독성을 목표로 설계하라 짧은 것보다 익숙한게 읽기 좋다 A는 범용적인 관용구, B는 코틀린 문법의 관용구를 사용하고 있다. /* Style A */ if (person != null && person.isAdult) { view.showPerson(person) } else { view.showError() } /* Style B */ person?.takeIf { it.isAdult } ?.let(::view.showPerson) ?: view.showError() B가 cool 해보일 수 있지만 쉽게 읽을 수 있는 코드가 아니므로 A가 더 가독성이 좋다고 할 수 있다. B와 같은 코드는 수정에도 불리하다. B에서 만약 showError가 null을 리턴한다면 else 에 해당하는 ..

Kotlin 2023.06.18

[이펙티트 코틀린] 1장 🏰 안정성 Safety (item 01..10)

item 1 : 가변성을 제한하라 상태를 제어하는 것은 양날의 검 장점 : 시간의 변화에 따라서 변하는 요소를 표현 단점 : 상태를 관리하는 것은 어려움이 따른다 프로그램을 이해하고 디버그하기 힘들다 가변성이 많아지면 코드의 실행을 추론하기 힘들다 동시성에서 충돌이 생길 수 있다 테스트하기 어렵다 상태 변경에 따라 다른 부분에 알려야하는 경우가 존재 따라서 변할 수 있는 지점은 줄일 수록 좋다. 가변성을 제한하기 위해서 순수 함수형 언어를 사용하는 방법이 있지만 이는 프로그램 작성이 매우 어렵다. 코틀린에서 가변성을 제한하기 위해 property를 변경할 수 없게 하거나 immutable 객체를 만드는 것을 쉽게 할 수 있다. 읽기 전용 프로퍼티 val mutable 객체를 가지고 있다면 내부적으로 변할..

Kotlin 2023.06.18

[BOJ][Gold IV] 주사위 굴리기 - 14499 (Kotlin)

[Gold IV] 주사위 굴리기 - 14499 문제 링크 14499번: 주사위 굴리기 첫째 줄에 지도의 세로 크기 N, 가로 크기 M (1 ≤ N, M ≤ 20), 주사위를 놓은 곳의 좌표 x, y(0 ≤ x ≤ N-1, 0 ≤ y ≤ M-1), 그리고 명령의 개수 K (1 ≤ K ≤ 1,000)가 주어진다. 둘째 줄부터 N개의 줄에 지 www.acmicpc.net 분류 구현, 시뮬레이션 문제 설명 크기가 N×M인 지도가 존재한다. 지도의 오른쪽은 동쪽, 위쪽은 북쪽이다. 이 지도의 위에 주사위가 하나 놓여져 있으며, 주사위의 전개도는 아래와 같다. 지도의 좌표는 (r, c)로 나타내며, r는 북쪽으로부터 떨어진 칸의 개수, c는 서쪽으로부터 떨어진 칸의 개수이다. 2 4 1 3 5 6 주사위는 지도 위..

Problem Solving/BOJ 2023.04.29

[BOJ][Gold V] 인구 이동 - 16234 (Kotlin)

[Gold V] 인구 이동 - 16234 문제 링크 16234번: 인구 이동 N×N크기의 땅이 있고, 땅은 1×1개의 칸으로 나누어져 있다. 각각의 땅에는 나라가 하나씩 존재하며, r행 c열에 있는 나라에는 A[r][c]명이 살고 있다. 인접한 나라 사이에는 국경선이 존재한다. 모 www.acmicpc.net 분류 너비 우선 탐색, 그래프 이론, 그래프 탐색, 구현, 시뮬레이션 문제 설명 N×N크기의 땅이 있고, 땅은 1×1개의 칸으로 나누어져 있다. 각각의 땅에는 나라가 하나씩 존재하며, r행 c열에 있는 나라에는 A[r][c]명이 살고 있다. 인접한 나라 사이에는 국경선이 존재한다. 모든 나라는 1×1 크기이기 때문에, 모든 국경선은 정사각형 형태이다. 오늘부터 인구 이동이 시작되는 날이다. 인구 이..

Problem Solving/BOJ 2023.04.27

[BOJ][Gold V] 괄호 제거 - 2800 (Kotlin)

[Gold V] 괄호 제거 - 2800 문제 링크 2800번: 괄호 제거 첫째 줄에 음이 아닌 정수로 이루어진 수식이 주어진다. 이 수식은 괄호가 올바르게 쳐져있다. 숫자, '+', '*', '-', '/', '(', ')'로만 이루어져 있다. 수식의 길이는 최대 200이고, 괄호 쌍은 적어도 1개 www.acmicpc.net 분류 브루트포스 알고리즘, 자료 구조, 스택, 문자열 문제 설명 어떤 수식이 주어졌을 때, 괄호를 제거해서 나올 수 있는 서로 다른 식의 개수를 계산하는 프로그램을 작성하시오. 이 수식은 괄호가 올바르게 쳐져 있다. 예를 들면, 1+2, (3+4), (3+4*(5+6))와 같은 식은 괄호가 서로 쌍이 맞으므로 올바른 식이다. 하지만, 1+(2*3, ((2+3)*4 와 같은 식은 쌍..

Problem Solving/BOJ 2023.04.25

[BOJ][S4] 덱 - 10866 (Kotlin)

[Silver IV] 덱 - 10866 문제 링크 10866번: 덱 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 www.acmicpc.net 분류 자료 구조, 덱 문제 설명 정수를 저장하는 덱(Deque)를 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오. 명령은 총 여덟 가지이다. push_front X: 정수 X를 덱의 앞에 넣는다. push_back X: 정수 X를 덱의 뒤에 넣는다. pop_front: 덱의 가장 앞에 있는 수를 빼고, 그 수를 출력한다. 만약, 덱에 들어있는 정수가 없는 경우에는 -1을 출력..

Problem Solving/BOJ 2023.04.24
728x90