머리말
100문 100답 List
100문 100답 List 1~10
100문 100답 List 11~20
100문 100답 List 31~40
100문 100답 List 41~50
100문 100답 List 51~60
100문 100답 List 61~70
100문 100답 List 71~80
100문 100답 List 81~90
100문 100답 List 完
시작.
21. Storyboard와 코드로 UI를 작성하는 장단점은 무엇인가요?
Storyboard
- 장점
- 시각적을 UI를 구성할 수 있어 초보자가 이해하기 쉽습니다.
- UI 구성을 변경할 때 빠르게 수정할 수 있습니다.
- 협업 시 UI 변경 사항을 쉽게 공유할 수 있습니다.
- 단점
- 코드로 작성한 UI에 비해 성능이 저하될 수 있습니다.
- 복잡한 UI를 구성하기 어려울 수 있습니다.
- UI 구성을 변경할 때 코드와 Storyboard의 레이아웃이 일치하도록 수정해야 할 수 있습니다.
코드
- 장점
- 성능이 우수합니다.
- 복잡한 UI를 자유롭게 구성할 수 있습니다.
- 코드로 작성된 UI는 Storyboard에 비해 유지 관리가 쉽습니다.
- 단점
- 초보자에게 이해하기 어려울 수 있습니다.
- UI 구성을 변경할 때 코드를 수정해야 해서 번거로울 수 있습니다.
- 협업 시 UI 변경 사항을 공유하기 어려울 수 있습니다.
결론
- Storyboard
- 간단한 UI를 구현하는 경우에는 Storyboard를 사용하는 것이 좋습니다.
- Storyboard를 사용하면 시각적으로 UI를 구성할 수 있어 초보자에게 쉽게 UI를 만들 수 있습니다.
- UI 구성을 변경할 때 빠르게 수정할 수 있어 편리합니다.
- 협업 시에는 Storyboard를 사용하는 것이 좋습니다.
- Storyboard를 사용하면 UI 변경 사항을 쉽게 공유할 수 있습니다.
- 코드
- 복잡한 UI를 구현하는 경우에는 코드를 사용하는 것이 좋습니다.
- 코드를 사용하면 성능이 우수하고 복잡한 UI를 자유롭게 구성할 수 있습니다.
- 코드로 작성된 UI는 유지 관리가 쉽습니다.
22. Auto Layout에서 Intrinsic Content Size가 무엇인가요?
Auto Layout에서 Intrinsic Content Size는 뷰가 자신의 콘텐스를 수용할 수 있는 크기입니다.
이 크기는 뷰의 콘텐츠에 따라 결정되며, 뷰의 레이아웃을 정의하는 데 사용됩니다.
Auto Layout은 뷰의 Intrinsic Content Size를 사용하여 뷰를 레이아웃합니다.
예를 들어 텍스트 뷰의 Intrinsic Content Size가 50px X 100px 이면
Auto Layout은 텍스트 뷰의 너비와 높이를 각각 50px과 100px로 설정합니다.
Intrinsic Content Size가 없는 뷰도 있습니다.
이러한 뷰는 Auto Layout을 사용하여 레이아웃할 때 크기를 지정해야합니다.
Intrinsic Content Size를 설정하려면 뷰의 intrinsicContentSize 속성을 사용합니다.
이 속성은 뷰의 너비와 높이를 튜플로 반환합니다.
// 텍스트 뷰의 Intrinsic Content Size를 설정합니다.
textView.intrinsicContentSize = CGSize(width: 50, height: 100)
23.UITableViewCell의 재사용 메커니즘에 대해 설명하세요.
UItableViewCell의 재사용 매커니즘은 UITableView가 화면에 보여줄 데이터가 많을 때 메모리 사용량을 줄이기 위해 사용되는 기술입니다.
UITableView는 화면에 보여줄 셀을 한 번에 모두 생성하지 않고, 화면에 보여줄 셀리 필요한 경우에만 생성합니다.
화면에 보여줄 셀이 화면에서 벗어나면 해당 셀을 재사용 큐에 저장합니다.
그리고 나중에 다시 화면에 보여줄 셀이 필요한 경우 재사용 큐에 해당 셀을 가져와 사용합니다.
UITableViewCell의 재사용 매커니즘이 이루어지는 단계
- UITableView는 dataSource의 numberOfRowSinSection 메서드를 사용하여 화면에 보여줄 셀의 개수를 계산합니다.
- UITableView는 dataSource의 cellForRowAt 메서드를 사용하여 화면에 보여줄 셀을 생성합니다.
- UITableView는 생성한 셀을 화면에 표시합니다.
- 화면에 보여줄 셀이 화면에서 벗어나면 UITableView는 해당 셀을 재사용 큐에 저장합니다.
- UITavleView는 재사용 큐에 저장된 셀을 가져와 화면에 보여줄 셀이 필요한 경우에 사용합니다.
UITableViewCell의 재사용 매커니즘을 효율적으로 사용하기 위한 유의사항
-
UITableViewCell의 재사용을 위해 재사용 식별자를 사용합니다.
재사용 식별자는 UITableViewCell을 구별하는 데 사용되는 고유한 문자열입니다. UITableView는 재사용 식별자를 사용하여 재사용 큐에서 해당 셀을 찾습니다. - UITableViewCell의 prepareForReuse 메서드를 사용하여 셀이 재사용될 때마다 셀의 상태를 초기화합니다.
prepareForReuse 메서드는 UITableViewCell이 재사용되기 전에 호출합니다.
이 메서드를 사용하여 셀의 콘텐츠와 스타일을 초기화합니다. - UITableViewCell의 contentView 속성을 사용하여 셀의 콘텐츠를 관리합니다.
contentView 속성은 UITableViewCell의 콘텐츠를 포함하는 뷰입니다.
contentView 속성을 사용하여 셀의 콘텐츠를 추가, 삭제, 업데이트합니다.
UITableViewCell의 재사용 매커니즘은 UITableView를 효율적으로 사용하기 위한 필수적인 기술입니다.
이 기술을 잘 이해하고 활용하면 UITableView의 성능을 향상시킬 수 있습니다.
24. UICollectionView의 사용법과 특징에 대해 설명하세요.
UICollectionView의 특징
- 셀의 배열을 가로, 세로, 또는 대각선으로 배치할 수 있습니다.
- 셀의 크기와 위치를 유연하게 조정할 수 있습니다.
- 셀의 레이아웃을 애니메이션으로 적용할 수 있습니다.
UICollectionView 사용법
- UICollectionViewController 클래스를 상속한 클래스를 생성합니다.
- UICollectionView의 dataSource 및 delegate 프로토콜을 구현합니다.
- UICollectionView의 dataSource 및 delegate 프로토콜에서 제공하는 메서드를 사용하여 UICollectionView의 셀을 관리합니다.
UICollectionView의 dataSource 프토토콜을 UICollectionView에 표시할 셀의 개수와 셀의 콘텐츠를 제공하는데 사용됩니다.
UICollectionView의 delegate 프로토콜은 UICollectionView의 이벤트를 처리하는 데 사용됩니다.
UICollectionView의 delegate 프토토콜에서 제공하는 메서드
- didSelectItemAt: 특정 위치의 셀을 선택했을 때 호출됩니다.
- didDeselectItemAt: 특정 위치의 셀을 선택 해제했을 때 호출됩니다.
- willDisplayCell: 특정 위치의 셀을 화면에 표시하기 전에 호출됩니다.
- didEndDisplayingCell: 특정 위치의 셀을 화면에서 벗어나기 전에 호출됩니다.
UICollectionView는 dataSource 프로토콜에서 제공하는 메서드
- numberOfItemsinSection: UICollectionView의 특정 섹션에 표시할 셀의 개수를 반환합니다.
- cellForItemAt: 특정 위치에 표시할 셀을 생성하고 반환합니다.
- viewForSupplementaryElementOfKind: 특정 종류의 보조 뷰를 생성하고 반환합니다.
요약
UICollectionView는 UITableView와 유사하지만 셀을 가로,세로 또는 대각선으로 배치 가능
셀의 크기와 위치를 유연하게 조정하고 애니메이션으로 레이아웃을 적용할 수 있습니다.
UICollectionView의 사용 단계에는 UICollectionViewController 클래스 상속, dataSource 및
delegate 프로토콜 구현, 메서드 활용이 포함됩니다.
dataSource 프로토콜은 셀의 개수 및 콘텐츠를 제공하며, delegate 프로토콜은 이벤트를 처리합니다.
UICollectionView의 delegate 메서드에는 didSelectItemAt, didDeselectItemAt, willDisplayCell, didEndDisplayingCell 등이 있습니다.
UICollectionView의 장점으로는 유연하게 레이아웃 및 애니메이션 적용이 가능하다.
25. UI Testing과 Unit Testing의 차이는 무엇인가요?
Unit Testing(단위 테스트)
- 목적: 개별 코드 단위, 즉 함수, 메서드 또는 클래스의 특정 기능이 제대로 작동하는 지 확인하는 것
- 범위: 코드의 작은 부분에 중점을 두며, 다른 외부 의존성을 모의(mock) 또는 대체하여 테스트 합니다.
- 실행 방식: 자동화된 테스트 프레임 워크를 사용하여 코드 단위를 격리하고 테스트합니다.
주로 코드 변경 시 빠르게 실행되어야 하므로 빠르게 실행 가능한 테스트가 일반적입니다.
UI Testing(UI 테스트)
- 목적: 사용자 인터페이스(UI)를 통한 애플리케이션의 기능을 테스트합니다.
사용자가 어떻게 상호 작용하는지를 시뮬레이션하고 UI 요소 간 상호 작용을 확인합니다. - 범위: 애플리케이션의 전체 스택을 포함하며, 사용자 경험 및 플로우를 테스트합니다.
UI테스트는 종종 더 큰 범위의 테스트이며, 여러 구성 요소 간의 통합을 확인합니다. - 실행 방식: 실제 디바이스나 에뮬레이터에서 실행되며, 사용자 인터페이스를 조작하여 특정 동작을 시뮬레이션합니다.
요약
측면 | Unit Testing (단위 테스트) | UI Testing (UI 테스트) |
---|---|---|
목적 | 개별 코드 단위 또는 함수의 정확성 확인. | 애플리케이션의 UI, 사용자 상호 작용 및 플로우 테스트. |
범위 | 작은, 격리된 코드 단위에 중점. | 전체 애플리케이션 및 그 UI에 중점. |
의존성 처리 | 외부 의존성을 모의(mock)하거나 대체하는 경우가 많음. | 실제 환경 및 의존성과 상호 작용. |
실행 환경 | 일반적으로 통제된, 격리된 환경에서 실행. | 실제 디바이스 또는 에뮬레이터에서 UI 시뮬레이션에 필요. |
격리 | 특정 기능을 격리하고 테스트. | UI 구성 요소 간의 상호 작용을 테스트. |
속도 | 일반적으로 빠름. 작은 코드 단위에 초점이 맞춰져 있음. | UI 상호 작용 및 의존성 때문에 상대적으로 느릴 수 있음. |
주요 도구/프레임워크 | JUnit, XCTest, NUnit 등. | XCTest (iOS용), Espresso (Android용), Selenium 등. |
사용 사례 | 개별 코드 구성 요소의 정확성 확인. | 전체 애플리케이션 기능 및 사용자 경험 확인. |
26. 최근에 진행한 프로젝트에 대해 설명해주세요.
자신이 진행한 프로젝트를 설명하면 됩니다.
27. Git을 사용한 경험이 있나요? Branching에 대해 설명하세요.
브랜칭은 Git에서 코드를 분리하여 독립적으로 개발하고 변경사항을 추적하는 매커니즘입니다.
메인 코드베이스에서 새로운 가지(branch)를 따서 독립적이니 작업을 진행할 수 있습니다.
이를 통해 여러 팀 또는 개발자가 동시에 다양한 기능을 개발하거나 버그를 수정할 수 있습니다.
기본적인 브랜치 관련 용어
- Master/Branch: 프로젝트의 주 브랜치로서, 안정적인 코드가 유지되는 곳입니다.
- Feature Branch: 새로운 기능을 개발하기 위해 생성되는 브랜치로, 주로 ‘feature/’ 또는 ‘feature-‘와 같은 접두어를 사용합니다.
- Bugfix Branch: 버그 수정을 위한 브랜치로, 주로 ‘bugfix/’ 또는 ‘bugfix-‘와 같은 접두어를 사용합니다.
- Release Branch: 출시 준비를 위한 브랜치로, 마지막 테스트 및 버전 번호 업데이트가 이루어집니다.
28. 앱의 성능을 개선하기 위해 어떤 방법을 사용할 수 있나요?
앱의 성능을 개선하기 위한 방법
- 코드 최적화
- 불필요한 코드 제거
- 효율적인 알고리즘 사용
- 메모리 관련 개선
- 리소스 최적화
- 이미지, 동영상, 오디오 등의 크기 줄이기
- 리소스 사용량 줄이기
- 디자인 개선
- 화면 구성 최적화
- 애니메이션 사용 줄이기
- 데이터베이스 최적화
- 인덱스 사용
- 데이터 구조 최적화
- 하드웨어 최적화
- 최신 하드웨어 사용
- 네트워크 대역폭 확보
29. 앱에서 사용자 데이터를 어떻게 저장하고 보호하나요?
앱에서 사용자 데이터를 저장하고 보호하는 방법
- 로컬 데이터베이스 사용
- 민감한 사용자 데이터는 로컬 데이터베이스에 안전하게 저장할 수 있습니다.
- iOS에서는 Core Data나 SQLite를 활용할 수 있습니다.
- 암호화 활용
- 저장되는 데이터를 암호화하여 보호합니다.
- iOS에서는 Keychain을 사용합니다.
- 앱 데이터 캐시
- 민감하지 않은 데이터는 일시적으로 캐시에 저장하고,
앱이 종료되거나 사용자가 로그아웃할 때 캐시를 삭제합니다.
- 민감하지 않은 데이터는 일시적으로 캐시에 저장하고,
- 앱 내 파일 시스템 활용
- 앱 내부에 안전한 디렉토리에 데이터를 저장합니다.
- 이때 파일 시스템 권한을 효과적으로 관리하여 앱 외부에서 접근하지 못하도록 보호합니다.
- 키 관리 및 인증
- API키나 사용자 토큰과 같은 중요한 정보를 안전하게 관리하고, 불필요한 로그인 정보를 저장하지 않습니다.
- OAuth 및 토큰 사용
- OAuth를 통한 안전한 인증을 구현하고, 토큰을 활용하여 데이터에 접근 권한을 부여합니다.
- SSL/TLS 사용
- 통신 중에는 SSL/TLS를 사용하여 데이터 전송을 암호화하고 중간자 공격을 방지합니다.
- 보안 업데이트 및 모니터링
- 앱의 보안 업데이트를 주기적으로 수행하고, 모니터링 도구를 활용하여 보안 이벤트를 감지하고 신속하게 대응합니다.
- GDPR 및 다른 규정 준수
- 해당 규정에 맞게 사용자 개인 정보를 수집, 저장 및 처리하는 방법을 준수합니다.
- GDPR, HIPAA 등의 규정이 적용될 수 있습니다.
30. 앱에서 사용자 인증 및 권한 관리에 대해 설명하세요.
사용자 인증(Authentication)
- 비밀번호 기반 인증
- 사용자는 아이디와 비밀번호를 제공하여 로그인합니다.
- 비밀번호는 안전한 해싱 알고리즘을 통해 저장되어야 합니다.
- 토큰 기반 인증
- 로그인 후 서버에서 발급한 토큰을 클라이언트에게 제공하고, 이 토큰을 이용하여 인증을 유지합니다.
- 주로 JWT(Json Web Token)가 사용됩니다.
- 소셜 로그인
- 소셜 미디어 계정 (Google, Facebook 등)을 통한 인증을 허용하여 사용자에게 편의성을 제공합니다.
- 바이오매트릭 인증
- 지문, 얼굴 인식 등의 생체 인증을 통해 사용자를 확인합니다.
- 안전성과 사용자 경험을 높일 수 있습니다.
권한 관리(Authorization)
- 롤 기반 권한 관리
- 사용자 역할에 따라 권한을 관리하며 각 역할은 특정한 권한 집합을 가집니다,
- 예: 관리자, 일반 사용자 등
- ACL (Access Control List)
- 각 사용자 또는 엔터티에 대한 권한을 명시적으로 설정하여 관리합니다.
- RBAC (Role-Based Access Control)
- 사용자의 역할을 기반으로 권한을 부여합니다.
- 각 역할은 특정한 권한을 가지며, 사용자는 하나 이상의 역할을 할당받을 수 있습니다.
- 세션 기반 권한
- 로그인 후 세션을 유지하며, 세션에 권한 정보를 저장하여 사용자를 식별하고 인증합니다.
- OAuth 및 OpenID Connect
- 서드파티 애플리케이션에 대한 권한을 부여하고 관리하기 위해 OAuth와 OpenID Connect를 활용합니다.
- 동적 권한 할당
- 사용자가 특정 작업을 수행할 때 마다 동적으로 권한을 부여하고 회수합니다.
- 보안 정책 및 규정 준수
- 앱이 다양한 규정 및 보안 정책을 준수하도록 구현하며, GDPR, HIPAA 등의 규칙에 따라 사용자 데이터를 안전하게 관리합니다.
다음에 계속
100문 100답 List에서 21~30번까지의 질문에 대한 답변입니다.
틀린 답변이 있거나 더 좋은 답변이 있다면 댓글 남겨주시면 적극 반영하겠습니다.
다들 화이팅 입니다.
100문 100답 List 1~10
100문 100답 List 11~20
100문 100답 List 31~40
100문 100답 List 41~50
100문 100답 List 51~60
100문 100답 List 61~70
100문 100답 List 71~80
100문 100답 List 81~90
100문 100답 List 完
이상.