본문 바로가기

전체 글164

리팩터링 2판 (Refactoring) https://book.naver.com/bookdb/book_detail.naver?bid=16311029 리팩터링 개발자가 선택한 프로그램 가치를 높이는 최고의 코드 관리 기술마틴 파울러의 『리팩터링』이 새롭게 돌아왔다.지난 20년간 전 세계 프로그래머에게 리팩터링의 교본이었던 이 책의 1판은, 기 book.naver.com 최근에 이 책을 다 읽었다. 1판은 Java 로 쓰였고 2판은 JavaScript 로 쓰였다. 2판을 쓸 때는 JavaScript 의 점유율이 높아서 JavaScript 로 개정판을 냈다고 한다. 그렇다고 해서 JavaScript 에만 적용할 수 있는 리팩터링은 아니니 걱정하지 말자. 다른 언어 개발자라도 개발 경험이 어느정도 있다면 충분히 이해할 수 있는 내용이다. 개인적으로 .. 2022. 1. 3.
2021년 회고 2021년에 아쉬움이 없을 정도로 많은 걸 하지는 않았다. 그래도 2021년 초와 오늘을 비교해 보면 할 수 있는 것의 차이가 많은 것 같다. 어쩌면 실제로 한 것은 많지 않더라도 학습 임계점 중 하나를 넘었을 지도 모른다. 그 때는 어떤 팀이든 협업 프로젝트를 해보고 싶다는 생각이었다. 지금은 잘하는 팀원들을 만나고 싶은 욕구가 있다. 협업 프로젝트는 1년 전이 처음이었다.(사실 처음은 아니지만) 그리고 지금은 돈 받고 프로젝트를 할 수 있을 정도라 생각한다. 실제로 돈 받고 개발하기도 했고... 2021년의 가장 주된 활동은 4~11월 SW마에스트로이다. 그 외에는 1~3월 프로젝트, 7~8월 프로젝트, 8월? UCPC 예선과 본선 그리고 3주 정도의 외주 개발 프로젝트 정도가 있을 것 같다. 추가로.. 2022. 1. 1.
[안드로이드] 보일러 플레이트 (상용구 코드) 사소한 기능을 구현하려고 해도 꽤 긴 코드를 작성해야 하는 불편함이 있다. 또 이런 기능을 여러 군데에서 구현하려고 하면 같은 코드를 일부만 변형시켜서 중복 사용하게 된다. 이렇게 반복되는 코드를 보일러 플레이트 혹은 상용구 코드라고 부른다. 안드로이드에서의 보일러 플레이트 코드는 대표적으로 Activity, Fragment, ViewModel, UseCase 등이 있다. 이 글에서는 Fragment 로 예를 들어 설명한다. 마찬가지로 이 프로젝트 코드를 기반으로 설명할 예정이다. 이 프로젝트 또한 프로젝트를 처음 시작할 때마다 설계와 관련된 코드를 작성해야 하는 불편함을 줄이기 위해 시작했다. star 와 fork 해 주시면 감사합니다. class MainFragment : Fragment() { ov.. 2021. 12. 31.
[안드로이드] 화면 전환 - Navigation 이 글은 제가 만든 이 프로젝트를 기반으로 설명하고 있습니다. 제가 만든 오픈소스이니 많은 fork 와 star 부탁드립니다! 해당 프로젝트는 변경될 수 있습니다. 안드로이드 Navigation 에 대해 알아보자. 참고로 공식문서는 여기에 있다. 안드로이드 공식문서는 영어가 가능하다면 영어로 읽는 편이 좋다. 한글 버전이 영어 버전보다 업데이트가 느리고 번역하면 안 되는 것을 번역해서 오해를 일으키는 단어들이 몇몇 있다. 안드로이드 Navigation 은 Jetpack 에 포함된 라이브러리이다. nav_graph.xml 을 통해 구조화가 가능하고 화면 구조를 시각적으로도 확인할 수 있다. 아래는 샘플 프로젝트이다. https://github.com/android/architecture-components.. 2021. 12. 25.
[kotlin] 람다와 invoke ※ 람다를 사용하는 방법에 대해서는 자세히 다루지 않습니다. 람다를 받는 함수를 정의하는 방법 fun main(args: Array) { doSomething{ a, b -> println("a + b = ${a + b}") } // 파라미터를 사용하지 않는 경우 doSomething{ _, b -> println("b = ${b}") } } fun doSomething(action: (a: Int, b: Int)->(Unit)) { action(2, 3) } 람다 파라미터의 타입은 (파라미터: 타입)->(반환 타입) 형식이다. 위 코드와 같이 정의하고 사용할 수 있다. 만약 사용하지 않는 파라미터가 있다면 _ 기호를 사용해 명시할 수 있다. 인스턴스를 함수처럼 사용하는 방법 fun main(args: .. 2021. 12. 24.
공부, 계획과 메타 인지 공부 카테고리에 넣었지만 사실 공부라기보다 내 생각을 정리하고 의견을 표현하는 글이다. (여담이지만 나는 유튜브를 많이 본다. 공부보다 재밌다.) 원래는 "통제할 수 있는 것과 통제할 수 없는 것"이라는 제목과 내용으로 글을 쓰려고 했다. 통제할 수 있는 것에 집중하라는 말은 멘토님이 말씀해 주셨던 내용이다. 그때 이야기의 맥락은 외주 디자이너를 구할 때 크몽(외주 플랫폼)에 올려놓은 뒤 가만히 기다리는 것이 아니라 더 다양한 플랫폼에서 구해보고, 내가 연락할 수 있는 인맥 등을 활용해서 디자이너에게 먼저 연락도 해 보라는 것이었다. 여기서 통제할 수 없는 것은 디자이너가 먼저 나에게 연락을 취하는 것이고, 통제할 수 있는 것은 내가 먼저 디자이너와 컨텍하는 것이다. 이때의 문제가 외주 디자이너를 구하는.. 2021. 12. 23.
[kotlin] 고차함수와 람다 ※ 이 글은 고차함수와 람다에 대한 기본 개념을 설명하지는 않습니다. inline 과 람다 고차함수 return inline 과 람다 람다가 변수를 포획하면 람다가 생성되는 시점마다 새로운 무영 클래스 객체가 생성된다. 이는 람다 사용에 따른 부가 비용이다. inline 함수와 람다를 함께 사용하면 람다로 받은 부분을 컴파일 시점에 대치한다. 따라서 런타임에 더 빠르게 동작한다. 다음 코드를 보자. fun main(args: Array) { doSomething { println("action") } } inline fun doSomething(action : () -> Unit) { println("before action") action() println("after action") } 람다를 파라미.. 2021. 12. 13.
[kotlin] 구조 분해 선언 JavaScript 를 별로 안 좋아하지만 JavaScript 에서는 다음과 같은 편리한 문법이 가능하다. // 함수 반환 function func() { return [10, 20]; } // 사용 const [a, b] = func(); // React hooks const [value, setValue] = useState(); 함수에서는 배열을 반환하고, 그 값을 한 번에 초기화할 수 있다. 코틀린에서도 조금 불편하긴 비슷한 문법이 가능하다. fun main(args: Array) { val person = Person("algosketch", 24) val (name, age) = person println("이름 : $name, 나이 : $age") } data class Person(val .. 2021. 12. 11.
github + slack 연동하기 (webhook) 1. 채널 우클릭 후 채널 세부정보 열기 2. 통합 - 앱 추가 3. GitHub 추가 incomming webhooks 를 추가하면 github webhook 에서 보내는 reqeust body 와 incomming webhooks 의 required body 가 달라서 400 에러가 난다. 4. 채팅 명령어 /github subscribe owner/repository 입력 5. 다시 채널 세부정보에서 GitHub 앱 추가 2021. 12. 3.