레퍼런스를 찾아서
우리는 늘 구글링을 한다
어떻게 해야 원하는 결과를 빠르게 얻을 수 있을까
내가 사용 하는 팁을 조금 적어보도록 하겠다.
중요 포인트
구글 검색엔진을 사용할 것
영어로 검색할 것
유서깊은 키워드
how to [하고싶은 작업]
[하고싶은 작업] programmatically
[동적으로 하고싶은 작업] dynamic
[동적으로 하고싶은 작업] dynamically
예시
how to [add HTML elements]
[add HTML elements] programmatically
[add HTML elements] dynamic
[add HTML elements] dynamically
구글 검색 도구 또는 키워드 활용하기
날짜 제한 검색
안드로이드 api 21 이전 코드를 보고 호환 코드를 짜야했다
검색을 했을때 먼저 보이는 결과들은 21 이후의 코드들 이었다
21 이전의 코드를 보기 위해 21이 사용된 시기를 확인하고 검색 결과를 필터링 했다.
[키워드] before:YYYY-MM-DD
[키워드] after:YYYY-MM-DD
[키워드] after:YYYY-MM-DD before:YYYY-MM-DD
예시
[camera2 api 21] before:2020
[camera2 api 21] after:2021-03
[camera2 api 21] after:2021-03-20 before:2022-04-11
구글 검색 결과 창에서
도구 > 모든 날짜를 눌러서 쉽게 기간을 제한 할 수 있다.
맨 아래 기간 설정을 누르면
특정 날부터 현재까지의 검색만이 아니라
특정 기간의 검색 결과만 볼 수도 있다.
사이트 제한 검색
stackoverflow나 okky 등 특정 사이트 내의 자료만 검색해보고 싶을 때가 있다.
site:
예시
android view site:https://stackoverflow.com/
검색 키워드 뒤에 site: 원하는 사이트 주소를 입력하면 해당 사이트 내의 결과만 보여준다
키워드 필수로 들어가는 검색 결과만 보기
검색 할 때 키워드를 쌍따옴표로 묶으면 꼭 들어가는 검색 결과만 볼 수 있다.
예시
app developer roadmap "ios"
공식 문서, 튜토리얼 보기
공식문서를 읽는 버릇을 가지는 것이 좋다. 한글로 번역하여 읽어도 좋다.
어떻게 활용할 수 있는지 알아보자.
Pencilkit, PKDrawing을 사용하여 싸인을 할 수 있는 화면을 구현했다.
구현해야하는 동작은 다음과 같았다.
1. PKDrawing로 만든 그리기 뷰를 이용해서 그림 생성
2. 그림 데이터를 realm(로컬)에 저장
3. 사용자가 싸인을 다시 확인하거나 수정하기를 원해서 그리기 뷰를 오픈
4. 이전 그림 데이터가 화면에 표시
5. 수정 내역은 다시 realm(로컬)에 저장
6. 클라우드에 저장 버튼 누르면 서버에 그림이 저장
처음에는 당연히 레퍼런스가 있을 줄 알고
PKDrawing realm으로 검색했지만 자료를 찾지 못했다
realm으로 로컬 DB을 쓰고 있었고 그림이 서버에 저장되는 시점은 다른 동작이 진행되었을때 저장된다
임시 데이터로서 로컬에 저장이 되야했다
결국 직접 구현해보기로 하고 공식문서를 찾았다
일단 realm에 저장 가능한 데이터 형식을 확인했다.
그리고 pkdrawing의 문서를 확인했다.
pkdrawing 문서
datarepresentation
Data를 넣어서 pkdrawing 초기화 할 수 있고
pkdrawing를 data로 내보낼 수 있다는 것을 문서를 통해 파악할 수 있었다.
init(data: Data)
Creates a drawing object and populates it with previously drawn content.
func dataRepresentation() -> Data
Returns a raw data representation of the rendered content.
문서를 통해 얻은 정보로 다음과 같이 코드를 짜기로 했다.
realm에 데이터가 없으면 처음 동작으로 판단해서 빈 캔버스 제공
사용자 그리기
그리기가 완료되면 dataRepresentation로 Data 꺼내기
Data를 realm에 저장
realm에 data가 있다면 사용자가 수정을 원하는 것으로 판단해
realm에 있는 data를 꺼낸 후 init(data: Data)을 이용해 pkdrawing 생성
저장된 그림을 사용자한테 제공
다행히 위에 생각해둔 것처럼 코드가 잘 짜여졌고 기능 구현에 성공할 수 있었다.
코어 소스 열어보기
때로는 코어 소스를 열어보고 어떻게 동작하는 지 보면 좋다.
어렵게 열 필요없다. 코어 소스는 우리 곁에 있다.
개발 중인 프로젝트에서 사용하려는 메소드를 컨트롤 클릭하여 (Go to Declaration or Usages)
우리가 사용하려는 메소드의 코드를 확인 할 수 있다.
공식 문서 보는 것과 비슷할 수 있다.
코어 소스 내에서 참조 되는 곳과 주석을 보면서 어떤 값을 인풋하면 어떤 결과가 나오는지 확인한다.
오픈 소스 라이브러리
기여자가 제공하는 공식 도큐가 있다면 최대한 활용한다
사용자가 많은 라이브러리라면 스택오버플로우에 검색해봐도 좋다
사용자가 많지 않다면?
해당 레포지토리의 이슈 또는 PR을 검색해보자
같은 이슈를 겪는 사용자의 해결책이나 이슈 제기를 확인 할 수 있다.
해결책을 안다면 다른 개발자를 돕거나 개발 한 뒤에 pr 요청 넣어 기여하면 더욱 좋다.
예를 들자면 웹 상에서 플로우를 그리기 위해 react-flow 라는 라이브러리를 쓰고 있었다.
플로우를 중첩해서 그리는 기능을 구현해야했고 사용 중인 라이브러리를 최대한 활용하고 싶었다.
(예전 일이라 지금은 nested 기능이 개발되고 릴리즈가 되었다.)
공식 문서와 코드를 보면서 중첩 플로우를 그리기 위해 노력 했지만 너무 어려웠다.
혹시 해서 react-flow의 이슈를 검색해보았다.
nest, nested, nesting..
https://github.com/wbkd/react-flow/issues/1377
그리고 중첩 기능을 요청하는 글, 중첩 기능 요청이 많으니 개발을 해보겠다는 기여자의 글을 발견했다.
포크를 한 후 본인만의 코드로 중첩기능을 구현 하신 분도 계셨다. 포크한 라이브러리 링크와 어떻게 구현을 했는지 자세히 설명해주었다.
이런 식으로 원하는 기능 구현에 근접할 수 있는 정보를 얻을 수 있다.