4P by GN⁺ 16시간전 | ★ favorite | 댓글 1개
  • Android 공개 API에는 유머러스한 메소드와 상수들이 숨겨져 있음
  • 대표적으로 isUserAMonkey()isUserAGoat() 등의 메서드는 실제 용도와 함께 농담 요소를 포함함
  • DISALLOW_FUN, Log.wtf() 등은 공식 API에 농담성 설명이나 재미있는 행동을 내포함
  • 기발한 명명법이나 패러디(예: TWEET_TRANSACTION, GRAVITY_DEATH_STAR_I)가 공식 문서나 코드 내에 자주 등장함
  • 이런 요소들은 개발자들에게 즐거움과 소소한 발견을 선사하는 역할을 수행함

Android 공개 API 속의 농담과 유머 요소

Android 오픈 API에는 개발자를 위한 다양한 재치 있는 농담과 이스터 에그 요소가 실제 기능과 함께 포함됨

ActivityManager.isUserAMonkey()

  • 개발자 도구인 UI Exerciser Monkey가 동작 중인 경우를 판별하는 메소드임
  • UI에 무작위 입력을 시뮬레이션하여 앱을 스트레스 테스트하는 환경에서 특정 행동을 제한할 수 있도록 고안됨
  • 실제 사용자 대신 monkey가 앱을 사용 중일 때, 중요 기능(예: 비상전화 발신 등)을 제한하는 목적으로 도입됨
  • Android 2.2(Froyo, API 8)에서 공개 API로 추가됨
  • Android 개발 초기에 실제로 우발적 문제를 해결하기 위해 구현된 배경을 가짐

UserManager.isUserAGoat()

  • 공식 문서에는 사용자가 순간이동 대상인지 확인하는 용도로 안내되어 있으나 이는 농담임
  • 초기에는 항상 false를 반환했으나, Goat Simulator가 출시된 뒤 해당 게임이 설치된 경우 true를 반환하도록 변경됨
  • Android 11(API 30) 이상에서는 개인정보 보호 목적으로 항상 false로 고정됨
  • Goat Simulator 앱 탐지 로직이 있었으나, 앱 목록 접근 정책 변화로 정보 누출 방지를 위해 수정됨
  • Google Chrome Task Manager의 이스터 에그에서 영감을 받았음

UserManager.DISALLOW_FUN

  • Android 6 Marshmallow(API 23)에서 추가된 재미 제한 정책을 의미함
  • 공식 문서에서는 사용자에게 기쁨이나 즐거움을 느끼지 못하도록 제한할 수 있다고 표현함
  • 실제로는 기기 소유자가 사용자 기능 일부를 막는 정책으로 사용됨
  • 일부 앱이나 시스템 자체에서 이 정책을 감지해 이스터에그 등 “재미있는” 기능을 비활성화할 수 있음
  • 학습 기관 등에서 주의 분산 기능을 비활성화할 목적으로 활용될 수 있음

Chronometer.isTheFinalCountdown()

  • Android 8 Oreo(API 26)에서 isTheFinalCountdown 메소드가 추가됨
  • 호출 시 자동으로 Europe의 “The Final Countdown” YouTube 영상을 실행함
  • 직접적인 실용성 없이 명백한 농담/참조임
  • 코드 내 Intent 명령문으로 명확히 드러남
  • 개발자에게 작은 유희를 제공함

PackageManager.FEATURE_TOUCHSCREEN_MULTITOUCH_JAZZHAND

  • Android 2.3 Gingerbread(API 8)에서 추가된 멀티터치 대응 여부 상수임
  • Jazz hands(음악 퍼포먼스 제스처)를 패러디한 명칭임
  • 최대 다섯 손가락 동시 인식 기능을 의미함

Log.wtf()

  • What a Terrible Failure의 약어로, 절대 발생하지 않아야 할 상황 로그 기록용임
  • Assertion 수준의 심각한 로그로 분류됨
  • 개발자 사이에 가장 잘 알려진 농담적 API 중 하나임

AdapterViewFlipper.fyiWillBeAdvancedByHostKThx()

  • Android 3.0 Honeycomb(API 11)에서 추가
  • 비공식적이고 유쾌한 네이밍으로, 뷰가 호스트에 의해 진행될 때 호출됨
  • 실제 명명도중의 코믹한 발상에서 비롯된 것으로 추정됨
  • 컴퓨터 과학의 고질적인 문제인 네이밍의 난해함을 재치있게 표현함

IBinder.TWEET_TRANSACTION

  • Android 3.2 Honeycomb(API 13)에서 도입된 트랜잭션 타입임
  • 트윗 전송을 암시하나, 실제로는 아무런 동작도 하지 않고 메시지 길이 제한(130자)이 구 Twitter 정책을 참조함
  • 이름 자체가 완전히 패러디임

IBinder.LIKE_TRANSACTION

  • Android 4.0.3 ICS(API 15)에서 추가된 LIKE 트랜잭션
  • 호출자가 앱을 좋아한다는 신호 전송용으로, 실제 기록이나 카운트는 없음
  • 앱의 자존감을 올려준다는 농담적 설명이 존재함

SensorManager.SENSOR_TRICORDER

  • Star Trek의 Tricorder에서 이름을 따온 상수임
  • Android 1.0 시절부터 있었으나 이후 deprecated 처리됨
  • Tricorder는 실제 존재하지 않는 SF기기로, 개발자에게 웃음을 줌

SensorManager.GRAVITY_*

  • SensorManager 내에는 여러 천체(태양, 명왕성 등)의 중력값을 담은 상수들이 존재함
  • 그중 GRAVITY_DEATH_STAR_I(스타워즈의 데스스타), GRAVITY_THE_ISLAND(드라마 LOST의 섬) 등은 농담임
  • 일부는 실제 활용도보다는 패러디적 의미가 강함

<blink> 태그

  • Android 뷰 레이아웃 시스템에 <blink>라는 숨겨진 태그가 존재함
  • 자식 뷰를 HTML의 오래된 <blink>처럼 깜빡이게 만듦
  • 공식 문서엔 설명이 없으나, 2011년 커밋에서 추가되어 현재도 AOSP에 남아 있음
  • 실제 사용 여부는 논란의 대상임

결론

Android 공식 API 곳곳에는 농담, 패러디, 이스터에그성 요소가 의도적으로 삽입되어 있음
이런 요소들은 개발자에게 소소한 재미와 발견의 즐거움을 제공하며, Android의 커뮤니티 문화와 유쾌함을 엿볼 수 있는 예시임

Hacker News 의견
  • FB에서 여러 해 동안, 위험하거나 이미 폐기된 토큰에는 _DO_NOT_USE_OR_YOU_WILL_BE_FIRED 같은 접미사를 붙이는 관습이 있었음. 모두가 이 농담을 알았지만, 팬데믹 이후 신규 인력 비중이 높아지고 원격 온보딩이 부족했던 시기에는 이러한 내부 농담이 두려움이나 불확실함을 유발한다는 불만도 생겼음. 이 말은 내가 경험한 범위 내에서만 해당하는 이야기임

    • React의 __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED 같은 유쾌하면서 지나치게 긴 이름을 예전부터 재미있게 봤던 기억이 있음. 하지만 아쉽게도 최근에는 이런 '유우머'가 점점 사라지고 있음 관련 PR

    • 예전에 Google에서, 네트워크 스택의 어딘가에 이해하기 어렵고 수정도 힘든 방대한 코드 덩어리가 있었는데, 이게 점점 커져만 갔음. 우리 팀은 그 코드를 "[Foo]Sorcery"로 이름을 바꿈. 어딘가 무섭고 이상한 이름 덕분에 더 이상 아무도 그 코드에 새로 추가하려 하지 않았고, 가끔씩 누군가는 일부를 정리해서 삭제함. 재미있는 네이밍이 주효했다고 생각함

  • Android 소스에서 내가 제일 좋아하는 재치 있는 함수는 android.os.Handler.runWithScissors()인데, 아쉽게도 public API에는 포함되어 있지 않음 소스 링크

    • 이 함수의 주석에 “@hide 이 메서드는 오남용 소지가 있어 API에 넣지 않는 것이 좋으며, 추가할 경우 runUnsafe()처럼 덜 재미있는 이름으로 바꿔야 할지도 모른다”는 문구가 있어서 웃음이 남

    • 이 함수가 본문에 없어서 살짝 아쉬움. 내가 제일 좋아하는 함수 중 하나임

  • X11에 대한 즉각 떠오르는 예시는 "party_like_its_1989"라는 전역 변수가 있고 코드 링크, DRI2 확장 changelog에는 "Awesomeness!", "True excellence", "Enlightenment attained" 같은 표현이 가득함 changelog 링크

  • BeOS(그리고 Haiku)에서는 "is_computer_on()"과 "is_computer_on_fire()"라는 함수가 있는데, 설명이 굉장히 훌륭함 참고 링크

    • Delphi에서는 'EProgrammerNotFound'라는 예외가 있어, 공식 문서도 굉장히 무미건조하면서도 진지한 유머를 담고 있음 문서 링크

    • 물론 이런 네이밍이 재미를 주려고 만든 건 알겠지만, 고급 절전 관리가 적용된 현대 컴퓨터에서는 이런 상태가 꽤 흔함. 운영체제는 깊은 절전모드에서의 깨우기라든지 메인보드 온도가 200도인 상황도 당연하게 처리해야 함

    • "is_computer_on_fire()"는 비동기 이벤트 기반 트리거로 활용한다면 더 재밌었을 거라고 봄

    • 궁금한 사람을 위해 관련 소스 링크도 있음 코드 링크

  • 이런 유머 감각이 대기업 코드베이스에 잘 살아 있다는 점이 좋음. API만 쓸 때는 모르지만, 소스코드를 직접 읽으면 가끔 만나는 이런 이스터 에그가 실제로 사람이 코드를 썼다는 걸 확실히 느끼게 해줌. 요즘 소프트웨어는 너무 차가운데, 오히려 이런 대조감에서 따뜻함을 느낌. 솔직히 이런 부분이 더 많았으면 함

    • 이와 비슷하게, 내가 사용하는 코드나 API 곳곳에 실제 사람이 존재했다는 사실을 환기시켜 준다는 점이 인상적임
  • Android에서 isUserAGoat, isUserAMonkey 같은 것들을 직접 테스트해보고 싶다면, 내가 이런 기능을 제공하는 작은 앱을 만들어서 올려놨음 앱 링크. 나중에 더 많은 이스터에그도 추가해보고 싶음

    • DISALLOW_FUN 정책 체크 같은 기능도 넣으면 꽤 재미있을 것 같음. 관련 코드를 찾으려고 GitHub에서 검색해봤는데, 대개는 시스템 Settings 앱에서 버전 이스터에그를 숨기는 용도 뿐임. 아마 내가 최초로 이 기능을 실사용하는 써드파티가 될 수도 있겠음

    • 근데 Android 15에서는 앱 설치가 안 됨. Google에서 minimum compileSdk를 반드시 맞추라고 해서 앱을 업데이트해주면 좋겠음

  • Chrome 작업 관리자에는 한때 "브라우저 프로세스가 텔레포트한 염소 개수"를 보여주는 숨겨진 컬럼이 있었음. 지금은 그 기능이 사라졌는데, 옛날 스크린샷에서 확인 가능함. 예전엔 234개나 컬럼이 있었는데 이제 16개로 줄어서 좀 아쉬움

  • 테크 제품에 이스터 에그가 넘치던 시절이 그리움. 모든 것이 회사화되면서 이런 문화가 사라진 느낌임

  • 이 스레드에 답글 달기를 면접에서 필수 질문으로 삼고 싶음. 나를 인터뷰할 때도 포함함. 정말로 “세상엔 두 부류의 사람이 있다”는 순간임

    • 왜? Googler가 API에 심는 농담은 크리스마스 저녁에 하는 아빠 개그 정도의 재미라고 생각함
  • 기술 문서에서 유머와 농담이 있다는 건데, 흔히 부정적으로 보는 시선도 있지만 나는 문서에 유머가 들어가는 걸 매우 좋아함. 관련 글에 쓴 적 있음