Logo April's DevLog
    Logo Inverted Logo
    • Posts
    • Coding Test
      • Codeup
        • 6001 [기초-출력] 출력하기01
        • 6002 [기초-출력] 출력하기02
        • 6003 [기초-출력] 출력하기03
        • 6004 [기초-출력] 출력하기04
        • 6005 [기초-출력] 출력하기05
        • 6006 [기초-출력] 출력하기06
        • 6007 [기초-출력] 출력하기07
        • 6008 [기초-출력] 출력하기08
        • 6009 [기초-입출력] 문자 1개 입력받아 그대로 출력하기
        • 6010 [기초-입출력] 정수 1개 입력받아 int로 변환하여 출력하기
        • 6011 [기초-입출력] 실수 1개 입력받아 변환하여 출력하기
        • 6012 [기초-입출력] 정수 2개 입력받아 그대로 출력하기1
        • 6013 [기초-입출력] 문자 2개 입력받아 순서 바꿔 출력하기1
        • 6014 [기초-입출력] 실수 1개 입력받아 3번 출력하기
        • 6015 [기초-입출력] 정수 2개 입력받아 그대로 출력하기2
        • 6016 [기초-입출력] 문자 2개 입력받아 순서 바꿔 출력하기2
        • 6017 [기초-입출력] 문장 1개 입력받아 3번 출력하기
        • 6018 [기초-입출력] 시간 입력받아 그대로 출력하기
        • 6019 [기초-입출력] 연월일 입력받아 순서 바꿔 출력하기
        • 6020 [기초-입출력] 주민번호 입력받아 형태 바꿔 출력하기
        • 6021 [기초-입출력] 단어 1개 입력받아 나누어 출력하기
        • 6022 [기초-입출력] 연월일 입력받아 나누어 출력하기
        • 6023 [기초-입출력] 시분초 입력받아 분만 출력하기
        • 6024 [기초-입출력] 단어 2개 입력받아 이어 붙이기
        • 6025 [기초-값변환] 정수 2개 입력받아 합 계산하기
        • 6026 [기초-값변환] 실수 2개 입력받아 합 계산하기
        • 6027 [기초-출력변환] 10진 정수 입력받아 16진수로 출력하기1
        • 6028 [기초-출력변환] 10진 정수 입력받아 16진수로 출력하기2
        • 6029 [기초-값변환] 16진 정수 입력받아 8진수로 출력하기
        • 6030 [기초-값변환] 영문자 1개 입력받아 10진수로 변환하기
        • 6031 [기초-값변환] 정수 입력받아 유니코드 문자로 변환하기
        • 6032 [기초-산술연산] 정수 1개 입력받아 부호 바꾸기
        • 6033 [기초-산술연산] 문자 1개 입력받아 다음 문자 출력하기
        • 6034 [기초-산술연산] 정수 2개 입력받아 차 계산하기
        • 6035 [기초-산술연산] 실수 2개 입력받아 곱 계산하기
        • 6036 [기초-산술연산] 단어 여러 번 출력하기
        • 6037 [기초-산술연산] 문장 여러 번 출력하기
        • 6038 [기초-산술연산] 정수 2개 입력받아 거듭제곱 계산하기
        • 6039 [기초-산술연산] 실수 2개 입력받아 거듭제곱 계산하기
        • 6040 [기초-산술연산] 정수 2개 입력받아 나눈 몫 계산하기
        • 6041 [기초-산술연산] 정수 2개 입력받아 나눈 나머지 계산하기
        • 6042 [기초-값변환] 실수 1개 입력받아 소숫점이하 자리 변환하기
        • 6043 [기초-산술연산] 실수 2개 입력받아 나눈 결과 계산하기
        • 6044 [기초-산술연산] 정수 2개 입력받아 자동 계산하기
        • 6045 [기초-산술연산] 정수 3개 입력받아 합과 평균 출력하기
        • 6046 [기초-비트시프트연산] 정수 1개 입력받아 2배 곱해 출력하기
        • 6047 [기초-비트시프트연산] 2의 거듭제곱 배로 곱해 출력하기
        • 6048 [기초-비교연산] 정수 2개 입력받아 비교하기1
        • 6049 [기초-비교연산] 정수 2개 입력받아 비교하기2
        • 6050 [기초-비교연산] 정수 2개 입력받아 비교하기3
        • 6051 [기초-비교연산] 정수 2개 입력받아 비교하기4
        • 6052 [기초-논리연산] 정수 입력받아 참 거짓 평가하기
        • 6053 [기초-논리연산] 참 거짓 바꾸기
        • 6054 [기초-논리연산] 둘 다 참일 경우만 참 출력하기
        • 6055 [기초-논리연산] 하나라도 참이면 참 출력하기
        • 6056 [기초-논리연산] 참/거짓이 서로 다를 때에만 참 출력하기
        • 6057 [기초-논리연산] 참/거짓이 서로 같을 때에만 참 출력하기
        • 6058 [기초-논리연산] 둘 다 거짓일 경우만 참 출력하기
        • 6059 [기초-비트단위논리연산] 비트단위로 NOT 하여 출력하기
        • 6060 [기초-비트단위논리연산] 비트단위로 AND 하여 출력하기
        • 6061 [기초-비트단위논리연산] 비트단위로 OR 하여 출력하기
        • 6062 [기초-비트단위논리연산] 비트단위로 XOR 하여 출력하기
        • 6063 [기초-3항연산] 정수 2개 입력받아 큰 값 출력하기
        • 6064 [기초-3항연산] 정수 3개 입력받아 가장 작은 값 출력하기
        • 6065 [기초-조건/선택실행구조] 정수 3개 입력받아 짝수만 출력하기
        • 6066 [기초-조건/선택실행구조] 정수 3개 입력받아 짝/홀 출력하기
        • 6067 [기초-조건/선택실행구조] 정수 1개 입력받아 분류하기
        • 6068 [기초-조건/선택실행구조] 점수 입력받아 평가 출력하기
        • 6069 [기초-조건/선택실행구조] 평가 입력받아 다르게 출력하기
        • 6070 [기초-조건/선택실행구조] 월 입력받아 계절 출력하기
        • 6071 [기초-반복실행구조] 0 입력될 때까지 무한 출력하기
        • 6072 [기초-반복실행구조] 정수 1개 입력받아 카운트다운 출력하기1
        • 6073 [기초-반복실행구조] 정수 1개 입력받아 카운트다운 출력하기2
        • 6074 [기초-반복실행구조] 문자 1개 입력받아 알파벳 출력하기
        • 6075 [기초-반복실행구조] 정수 1개 입력받아 그 수까지 출력하기1
        • 6076 [기초-반복실행구조] 정수 1개 입력받아 그 수까지 출력하기2
        • 6077 [기초-종합] 짝수 합 구하기
        • 6078 [기초-종합] 원하는 문자가 입력될 때까지 반복 출력하기
        • 6079 [기초-종합] 언제까지 더해야 할까?
        • 6080 [기초-종합] 주사위 2개 던지기
        • 6081 [기초-종합] 16진수 구구단 출력하기
        • 6082 [기초-종합] 3 6 9 게임의 왕이 되자
        • 6083 [기초-종합] 빛 섞어 색 만들기
        • 6084 [기초-종합] 소리 파일 저장용량 계산하기
        • 6085 [기초-종합] 그림 파일 저장용량 계산하기
        • 6086 [기초-종합] 거기까지! 이제 그만~
        • 6087 [기초-종합] 3의 배수는 통과
        • 6088 [기초-종합] 수 나열하기1
        • 6089 [기초-종합] 수 나열하기2
        • 6090 [기초-종합] 수 나열하기3
        • 6091 [기초-종합] 함께 문제 푸는 날
        • 6092 [기초-종합] 함께 문제 푸는 날
        • 6093 [기초-리스트] 이상한 출석 번호 부르기2
        • 6094 [기초-리스트] 이상한 출석 번호 부르기3
        • 6095 [기초-리스트] 바둑판에 흰 돌 놓기
        • 6096 [기초-리스트] 바둑알 십자 뒤집기
        • 6097 [기초-리스트] 설탕과자 뽑기
        • 6098 [기초-리스트] 성실한 개미
    • Git
      • Git이란?
      • [기본] Git 저장소 생성
      • [기본] Git 명령어 (status, add, commit)
    • iOS
      • [iOS] iOS 버전별 점유율 확인
    • Android
      • [Kotlin] Custom EditText 만들기 (Two-Way Binding)
    • SwiftUI
      • Layout
        • Layout 선택하기
    • Python
      • [Colab] Colab에서 Conda 사용하기
    • ETC...
      • MVVM 패턴
    • Logs
      • Appstore
        • Rejected
          • 회원가입
          • 회원탈퇴
      • Swiftui
        • 이동하자마자 뒤로 가는 현상 (NavigationLink)
        • 화면이 멈추는 현상 (TabView)
      • Xcode
        • Xcode13 달라진 점
    • Sample Post
    Hero Image
    [Colab] Colab에서 Conda 사용하기

    목표 Colab에서 conda 명령어를 사용하여 Package를 설치할 수 있다. 아래의 명령어를 Colab의 코드 셀에 복사 붙여넣기를 하면 conda 명령어를 사용하여 package를 설치해서 사용할 수 있다. # conda install # unset python path %env PYTHONPATH= # print python path !echo $PYTHONPATH # install miniconda !wget https://repo.anaconda.com/miniconda/Miniconda3-py37_4.12.0-Linux-x86_64.sh !chmod +x Miniconda3-py37_4.12.0-Linux-x86_64.sh !bash ./Miniconda3-py37_4.12.0-Linux-x86_64.sh -b -f -p /usr/local/ 출처: https://www.linkedin.com/pulse/how-install-run-conda-google-colab-ambu-vijayan

    April 8, 2023
    Hero Image
    [SwiftUI] Layout 선택하기

    목표 앱 사용자 인터페이스에 가장 적합한 컨테이너뷰를 선택할 수 있다. 참고 및 이미지 출처: developer.apple.com 뷰 쌓기 뷰를 쌓는 방식은 크게 3가지가 있습니다. 세로로 쌓기 (VStack) 가로로 쌓기 (HStack) 겹쳐서 쌓기 (ZStack) 이 3가지만 알아도 뷰를 잘 구성할 수 있습니다. 이미지를 보면 이미지와 텍스트뷰 부분이 겹쳐 있는 것을 볼 수 있습니다. 이 부분은 이미지를 겹치는 ZStack을 이용한 것입니다. 그리고 텍스트들은 사람의 이름인 Rachael Chiseck와 직위인 Chief Executive Officer가 상하로 배치된것을 볼 수 있는데 이것은 뷰를 세로로 쌓는 VStack을 이용한것입니다.

    November 28, 2022
    Hero Image
    MVVM 패턴

    서론 요새 많이 쓰이는 MVVM 패턴에 대해서 설명할 수 있게 정리해보는 시간을 갖도록 해보겠습니다. 개념 위키피디아 정의를 보면 MVVM 은 View와 비즈니스 로직(back-end 로직)을 분리하기 쉽게하여 뷰가 Model의 특정 플랫폼에 위존하지 않게하는 아키텍처 패턴입니다. View Model은 Value Converter의 역할을 하는데 Data를 조작하거나 보여주기 쉽게 만드는 역할을 합니다. Command 패턴과 Data Binding을 사용하여 구현합니다. graph LR; View ---|Data Binding| ViewModel ViewModel --> Model Model --> ViewModel MVVM 패턴의 요소 Model Model은 콘텐츠를 나타내는 Domain Model(객체지향 접근 방식) 또는 데이터 접근 계층(데이터 중심 접근 방식)을 나타냅니다.

    August 19, 2022
    Hero Image
    앱스토어 심사 거절 - 회원탈퇴

    앱 구현 상태 지금 회사에서는 회원가입을 특수한 경우에만 제공하고 있습니다. 새로운 가입 고객은 계약 당시 아이디를 발급해주고 있었지만 기존 고객은 앱을 설치하여 아이디를 생성 후 기존 제품에 해당 아이디를 입력해야 앱을 사용할 수 있었습니다. 그렇기 때문에 앱에서는 회원가입만을 제공하고 회원탈퇴를 제공하지 않는 상황이었습니다. 계약의 주가 되는 것이 앱이 아니라 다른 계약이었기 때문에 담당자에게 연락후 계약을 해지해야했기 때문입니다. 거절 이력 데이터 수집 및 저장 Guideline 5.1.1(v) - Data Collection and Storage

    August 9, 2022
    Hero Image
    [Kotlin] Custom EditText 만들기 (Two-Way Binding)

    무엇을 만들것인가? 안녕하세요. 오늘은 Two-Way binding이 가능한 Kotlin Custom EditText를 만들어볼 생각입니다. Android 에서 기본 제공되는 EditText는 포커스 됐을 때 진한 녹색 언더바가 생기는데 개인적 생각으로는 이쁘지 않기 때문에 포커스가 되면 언더라인 색이 바뀌는 EditText를 만들어볼 것입니다. 인터넷을 찾아 Custom View를 만드는 예시는 많이 나오지만 해당 예시를 따라하다보면 two-way binding이 안되는 경우가 많아 글을 작성하게 되었습니다. android 의 layout 파일에서 android:text="@{viewModel.name}" 처럼 viewModel의 데이터를 바인딩 할 수 있는데 android:text="@={viewModel.name}"와 같이 @뒤에 =이 붙는 경우는 two-way binding이라고 합니다.

    August 4, 2022
    Hero Image
    [기본] Git 명령어 (status, add, commit)

    Git 에서 버전관리하기 git에서는 commit단위로 버전 관리를 할 수 있습니다. commit에 메세지를 남겨 무슨 변경 사항이 있었는지 내역을 남길 수 있고 SourceTree등의 툴을 이용해서 브랜치 모습을 확인할 수도 있습니다. SourceTree를 설치하지 않았더라도 gitk명령어를 통해서 브랜치의 모습을 확인할 수도 있습니다. gitk 스테이지(stage)와 커밋(commit) 스테이지 스테이지는 커밋전 파일이 대기하는 곳입니다. git status 명령을 통해 변경된 파일 목록과 stage된 파일 목록을 확인할 수 있습니다. git add 명령을 통해 스테이지로 파일을 넘길 수 있습니다. 커밋

    July 12, 2022
    Hero Image
    [iOS] iOS 버전별 점유율 확인

    어디서 확인할 수 있을까? iOS 점유율은 애플에서 제공하고 있다. 아래의 링크로 이동하면 확인 할 수 있다. https://developer.apple.com/kr/support/app-store/ 왜 확인해야할까? SwiftUI로 개발을하다보면 OS 버전별로 동작이 다르고 이전 버전일 수록 SwiftUI에서 발생하는 버그가 많은 것을 느낄 수 있다. OS 점유율을 근거로 제시하여 iOS 14 버전 이상을 타켓으로 잡아야한다는 주장을 펼칠 수 있는 근간이 된다. 아래의 사진을 보면 지난 4년간 도입된 아이폰의 98%가 iOS 14버전 이상을 쓰고 있는 것을 확인할 수 있다.

    June 2, 2022
    Hero Image
    [기본] Git 저장소 생성

    Git 저장소 생성 방법 Git 분산형 버전관리 시스템입니다. 중앙 집중형 버전 관리 시스템과 달리 모든 클라이언트가 저장소가 될 수 있다는 뜻이죠. 그래서 Git 저장소를 생성하는 방법은 두가지라고 볼 수 있습니다. 로컬에서 생성후 remote 저장소로 push한다. Github이나 Gitlab 등의 remote 저장소에서 생성 후 clone한다. 어떤 방법으로 생성할까? 저장소 생성방법은 remote에서 생성 후 clone 받는 것이 더 간단하다고 생각합니다. 그러나 이미 작업하던 소스코드가 로컬에 존재하는 경우 로컬에서 생성하고 remote로 푸시를 해야겠죠. graph LR; A(생성 방법) --> B{이미 작업하던 소스가 있다} B -->|Yes| C[로컬에서 생성] B -->|No| D[Remote에서 생성] 오늘은 두가지 방법을 모두 해볼 것 입니다.

    May 25, 2022
    Hero Image
    Git이란?

    Git 이란 무엇일까? 리수스 토르발스가 만든 분산형 버전 관리 시스템입니다. 분산형 각 개발자가 중앙 서버에 접속하지 않은 상태에서도 코드 작업을 할 수 있습니다. 중앙 집중형 버전 관리 시스템의 저장소가 서버에만 있는 것과 달리 분산형 버전 관리 시스템은 모든 클라이언트가 저장소가 될 수 있습니다. 모든 클라이언트가 저장소가 될 수 있기 때문에 오프라인 작업이 가능합니다. (git은 저장소를 일단 로컬에 복제하고 로컬에 있는 히스토리를 그대로 유지하기 때문에 서버와 연결이 되지 않은 상태에서도 작업을 진행할 수 있습니다.

    May 20, 2022
    Hero Image
    Xcode13 달라진 점

    Xcode13 달라진 점 Xcode13으로 업데이트가 되면서 새로운 프로젝트를 생성하게 되면 기존의 프로젝트 생성과는 달라진것이 있습니다. 애플 사이트 설명 Xcode 13에는 새롭고 강력한 팀 개발 기능이 추가되어 Xcode Cloud뿐만 아니라 GitHub, Bitbucket 및 GitLab 협업 기능과도 완벽하게 작업할 수 있습니다. Xcode 내에서 바로 Pull Request를 시작, 검토, 주석 달기 및 병합할 수 있습니다. 코드 내에서 팀원의 주석을 볼 수 있으며, 코드 파일의 두 개의 버전을 신속하게 비교해 볼 수도 있습니다. Xcoe Cloud, Vim 모드, CarPlay시뮬레이터 등이 추가가 된것 같습니다.

    May 19, 2022
    Hero Image
    화면이 멈추는 현상 (TabView)

    TabView란? 공식문서: 링크 Apple 정의 A view that switches between multiple child views using interactive user interface elements. 여러개의 자식뷰를 가진 뷰 스위쳐라고 적혀있다. 안드로이드의 ViewPager와 비슷하다고 보면 될 것 같다. 애플에서 공식으로 제공하는 뷰중에 하나지만 StackOverflow 등을 보면 버그가 많아서 많이 쓰이지는 않는 것같다. 이번에 겪은 증상을 기록용으로 남겨본다. 버그증상 iOS 14.2, 14.3 등 특정 버전에서 화면이 멈추면서 아예 동작을 하지 않았다. SwiftUI를 쓰면서 느낀것인데 SwiftUI는 OS 버전을 많이 타는 것 같다.

    May 18, 2022
    Hero Image
    이동하자마자 뒤로 가는 현상 (NavigationLink)

    증상 NavigationLink로 페이지를 이동하자마자 뒤로 가는 현상 SwiftUI로 개발을 하다보면 NavigationLink를 사용하는 경우가 많습니다. 그런데 SwiftUI로 NavigationLink를 사용하다보면 NavigationLink로 페이지를 이동하자마자 뒤로 가는 현상이 발생하는 황당한 경우가 있습니다. 그렇습니다. SwiftUI 버그입니다….. 해결방법 빈 링크를 3개 넣어준다. NavigationLink(destination: EmptyView()) {EmptyView()} NavigationLink(destination: EmptyView()) {EmptyView()} NavigationLink(destination: EmptyView()) {EmptyView()} 해결방법 자체는 간단합니다. SwiftUI 자체 버그가 발생하는 경우 꼼수로 해결하는 수 밖에 없습니다. EmptyView로 이동하는 빈 NavigationLink를 링크를 3개 더 넣어줍니다. 아래에 예시코드코드처럼 뷰 안에 빈 링크 NavigationLink(destination: EmptyView()) {EmptyView()}를 3개 넣어줍시다.

    May 17, 2022
    • ««
    • «
    • 1
    • 2
    • 3
    • 4
    • 5
    • »
    • »»
    바로가기
    • About
    • Skills
    • Experiences
    • Recent Posts
    Contact me:
    • april.kim412@gmail.com

    Toha Theme Logo Toha
    © 2020 Copyright.
    Powered by Hugo Logo