iOS 프로그래밍 실무 1주차

2025. 3. 5. 14:43📱 모바일 프로그래밍/iOS 프로그래밍 실무

생성형 AI 비교

Q: 신입 개발자 면접 질문 100개를 만들고 답변을 짧게 작성해줘

A:

Grok

프로그래밍 기초 (20개)

  1. 변수란 무엇인가요?
    • 데이터를 저장하는 메모리 공간입니다.
  2. 상수와 변수의 차이는?
    • 상수는 값이 변하지 않고, 변수는 변할 수 있습니다.
  3. 객체지향 프로그래밍(OOP)이란?
    • 객체를 중심으로 데이터를 조작하는 프로그래밍 방식입니다.
  4. 캡슐화란 무엇인가요?
    • 데이터와 메서드를 하나로 묶고 외부 접근을 제한하는 것입니다.
  5. 상속의 장점은?
    • 코드 재사용성과 계층 구조를 제공합니다.
  6. 다형성이란?
    • 같은 인터페이스로 다양한 구현을 하는 것입니다.
  7. 추상 클래스와 인터페이스의 차이는?
    • 추상 클래스는 구현을 포함할 수 있고, 인터페이스는 선언만 가능합니다.
  8. 오버로딩과 오버라이딩의 차이는?
    • 오버로딩은 같은 이름 다른 매개변수, 오버라이딩은 상위 클래스 메서드 재정의입니다.
  9. 가비지 컬렉션이란?
    • 사용하지 않는 메모리를 자동으로 해제하는 기능입니다.
  10. 정적 변수란?
    • 클래스에 속하며 인스턴스 없이 접근 가능한 변수입니다.
  11. call by value와 call by reference의 차이는?
    • 값 복사 vs 참조 전달입니다.
  12. 포인터란 무엇인가요?
    • 메모리 주소를 저장하는 변수입니다.
  13. 스택과 힙의 차이는?
    • 스택은 정적 메모리, 힙은 동적 메모리입니다.
  14. 재귀 함수란?
    • 자신을 호출하는 함수입니다.
  15. try-catch 블록의 역할은?
    • 예외를 처리합니다.
  16. API란 무엇인가요?
    • 소프트웨어 간 데이터를 주고받기 위한 인터페이스입니다.
  17. REST API란?
    • HTTP를 사용해 자원을 주고받는 방식입니다.
  18. JSON과 XML의 차이는?
    • JSON은 경량, XML은 구조화된 데이터 형식입니다.
  19. 컴파일러와 인터프리터의 차이는?
    • 컴파일러는 전체 번역, 인터프리터는 줄 단위 실행입니다.
  20. 형변환이란?
    • 데이터 타입을 변환하는 것입니다.

알고리즘과 자료구조 (20개)

  1. 배열과 리스트의 차이는?
    • 배열은 고정 크기, 리스트는 동적 크기입니다.
  2. 스택과 큐의 차이는?
    • 스택은 LIFO, 큐는 FIFO입니다.
  3. 해시 테이블이란?
    • 키-값 쌍으로 데이터를 저장하는 자료구조입니다.
  4. 이진 탐색 트리(BST)란?
    • 노드의 왼쪽은 작고 오른쪽은 큰 트리입니다.
  5. 빅오 표기법이란?
    • 알고리즘의 시간/공간 복잡도를 나타냅니다.
  6. O(n)과 O(log n)의 차이는?
    • O(n)은 선형, O(log n)은 로그 증가입니다.
  7. 버블 정렬이란?
    • 인접 요소를 비교하며 정렬합니다.
  8. 퀵 정렬의 작동 방식은?
    • 피벗을 기준으로 분할 후 정렬합니다.
  9. 힙이란 무엇인가요?
    • 최대/최소 값을 빠르게 찾는 완전 이진 트리입니다.
  10. 그래프와 트리의 차이는?
    • 그래프는 순환이 가능, 트리는 불가능합니다.
  11. DFS와 BFS란?
    • 깊이 우선 탐색 vs 너비 우선 탐색입니다.
  12. 최단 경로 알고리즘은?
    • 다익스트라나 벨만-포드입니다.
  13. 동적 프로그래밍이란?
    • 문제를 작은 부분으로 나누어 해결합니다.
  14. 그리디 알고리즘이란?
    • 현재 최적 선택을 반복합니다.
  15. 백트래킹이란?
    • 해를 찾다가 막히면 돌아가는 기법입니다.
  16. 이진 탐색의 조건은?
    • 데이터가 정렬되어 있어야 합니다.
  17. 연결 리스트란?
    • 노드가 다음 노드를 가리키는 구조입니다.
  18. 큐를 배열로 구현하는 방법은?
    • front와 rear 포인터를 사용합니다.
  19. 트리의 높이란?
    • 루트에서 가장 깊은 노드까지의 거리입니다.
  20. 정렬 알고리즘의 안정성이란?
    • 동일 값의 순서가 유지되는 특성입니다.

데이터베이스 (20개)

  1. 데이터베이스란 무엇인가요?
    • 데이터를 체계적으로 저장한 시스템입니다.
  2. RDBMS란?
    • 관계형 데이터베이스 관리 시스템입니다.
  3. SQL이란?
    • 데이터베이스와 상호작용하는 언어입니다.
  4. primary key란?
    • 테이블의 고유 식별자입니다.
  5. foreign key란?
    • 다른 테이블의 primary key를 참조합니다.
  6. 정규화란?
    • 데이터 중복을 줄이는 설계 과정입니다.
  7. 인덱스란 무엇인가요?
    • 검색 속도를 높이는 데이터 구조입니다.
  8. 트랜잭션이란?
    • 작업의 논리적 단위입니다.
  9. ACID 속성이란?
    • 원자성, 일관성, 격리성, 지속성입니다.
  10. JOIN이란?
    • 두 테이블을 연결하는 연산입니다.
  11. inner join과 outer join의 차이는?
    • inner는 일치 행만, outer는 모든 행 포함입니다.
  12. NoSQL이란?
    • 비관계형 데이터베이스입니다.
  13. 데이터베이스 락이란?
    • 동시 접근을 제어하는 메커니즘입니다.
  14. 뷰(View)란?
    • 가상 테이블입니다.
  15. 쿼리 최적화란?
    • 실행 속도를 높이는 작업입니다.
  16. 트리거란?
    • 특정 이벤트에 반응하는 코드입니다.
  17. 샤딩이란?
    • 데이터를 분할해 저장하는 기법입니다.
  18. 복제(Replication)란?
    • 데이터를 복사해 저장하는 것입니다.
  19. ORM이란?
    • 객체와 데이터베이스를 매핑하는 도구입니다.
  20. �ormalization이란?
    • 성능 향상을 위해 중복을 허용하는 설계입니다.

네트워크 (20개)

  1. OSI 7계층이란?
    • 네트워크 통신을 7단계로 나눈 모델입니다.
  2. TCP와 UDP의 차이는?
    • TCP는 신뢰성, UDP는 속도 중심입니다.
  3. HTTP란 무엇인가요?
    • 웹에서 데이터를 주고받는 프로토콜입니다.
  4. HTTPS의 역할은?
    • 데이터 암호화로 보안을 강화합니다.
  5. IP 주소란?
    • 네트워크 장치를 식별하는 번호입니다.
  6. DNS란 무엇인가요?
    • 도메인을 IP로 변환합니다.
  7. 포트 번호란?
    • 특정 프로세스를 식별하는 번호입니다.
  8. GET과 POST의 차이는?
    • GET은 데이터 요청, POST는 데이터 전송입니다.
  9. 쿠키와 세션의 차이는?
    • 쿠키는 클라이언트, 세션은 서버에 저장됩니다.
  10. 로드 밸런서란?
    • 트래픽을 분산하는 장치입니다.
  11. 프록시 서버란?
    • 클라이언트와 서버 간 중개자입니다.
  12. 방화벽이란?
    • 네트워크 보안을 위한 장치입니다.
  13. 웹소켓이란?
    • 양방향 실시간 통신을 제공합니다.
  14. 패킷이란?
    • 네트워크로 전송되는 데이터 단위입니다.
  15. NAT란?
    • 사설 IP를 공인 IP로 변환합니다.
  16. VPN이란?
    • 가상 사설망으로 보안 통신을 제공합니다.
  17. DHCP란?
    • IP 주소를 자동 할당합니다.
  18. 라우터란?
    • 네트워크 간 데이터를 전달합니다.
  19. 서브넷이란?
    • 네트워크를 작은 단위로 나눈 것입니다.
  20. SSL/TLS란?
    • 데이터 암호화 프로토콜입니다.

시스템 설계 및 기타 (20개)

  1. 캐시란 무엇인가요?
    • 자주 사용하는 데이터를 빠르게 접근하도록 저장합니다.
  2. 로드 밸런싱의 장점은?
    • 서버 부하를 줄이고 가용성을 높입니다.
  3. 마이크로서비스란?
    • 작은 독립적 서비스로 나눈 아키텍처입니다.
  4. 모놀리식 아키텍처란?
    • 단일 애플리케이션으로 구성된 구조입니다.
  5. 컨테이너란?
    • 애플리케이션과 환경을 패키징한 것입니다.
  6. 도커란 무엇인가요?
    • 컨테이너를 관리하는 플랫폼입니다.
  7. 쿠버네티스란?
    • 컨테이너 오케스트레이션 도구입니다.
  8. CI/CD란?
    • 지속적 통합과 배포입니다.
  9. 버전 관리 시스템이란?
    • 코드 변경을 추적하는 도구입니다.
  10. Git과 GitHub의 차이는?
    • Git은 도구, GitHub는 호스팅 플랫폼입니다.
  11. 테스트 주도 개발(TDD)이란?
    • 테스트를 먼저 작성하고 코드를 개발합니다.
  12. 디버깅이란?
    • 코드 오류를 찾고 수정하는 과정입니다.
  13. 스케일 업과 스케일 아웃의 차이는?
    • 스케일 업은 성능 향상, 스케일 아웃은 서버 추가입니다.
  14. 클라우드 컴퓨팅이란?
    • 인터넷을 통해 컴퓨팅 자원을 제공합니다.
  15. 백엔드와 프론트엔드의 차이는?
    • 백엔드는 서버, 프론트엔드는 사용자 인터페이스입니다.
  16. 소프트웨어 개발 생명주기(SDLC)란?
    • 소프트웨어를 개발하는 단계적 과정입니다.
  17. 애자일 방법론이란?
    • 반복적이고 유연한 개발 방식입니다.
  18. 스프링 프레임워크란?
    • 자바 기반 애플리케이션 개발 도구입니다.
  19. MVC 패턴이란?
    • 모델, 뷰, 컨트롤러로 나눈 설계 패턴입니다.
  20. 데드락이란?
  • 두 프로세스가 서로 자원을 기다리며 멈춘 상태입니다.

 

 

Perplexity

프로그래밍 기초

  1. Q: 객체 지향 프로그래밍의 4가지 특징은?
    A: 캡슐화, 상속, 다형성, 추상화
  2. Q: 스택과 큐의 차이점은?
    A: 스택은 LIFO, 큐는 FIFO 구조
  3. Q: 재귀 함수란?
    A: 자기 자신을 호출하는 함수
  4. Q: 메모리 누수란?
    A: 프로그램이 더 이상 필요하지 않은 메모리를 계속 점유하는 현상
  5. Q: 컴파일러와 인터프리터의 차이는?
    A: 컴파일러는 전체 코드를 기계어로 변환, 인터프리터는 한 줄씩 실행

알고리즘 및 자료구조

  1. Q: 시간 복잡도 O(n)의 의미는?
    A: 입력 크기에 비례하여 실행 시간이 증가
  2. Q: 이진 탐색 트리란?
    A: 왼쪽 자식 노드 < 부모 노드 < 오른쪽 자식 노드 구조의 트리
  3. Q: 해시 테이블의 장점은?
    A: 빠른 검색, 삽입, 삭제 연산
  4. Q: 버블 정렬의 시간 복잡도는?
    A: O(n^2)
  5. Q: 동적 프로그래밍이란?
    A: 큰 문제를 작은 하위 문제로 나누어 해결하는 방법

데이터베이스

  1. Q: SQL과 NoSQL의 차이는?
    A: SQL은 관계형, NoSQL은 비관계형 데이터베이스
  2. Q: 정규화란?
    A: 데이터 중복을 최소화하고 무결성을 보장하는 과정
  3. Q: ACID 속성이란?
    A: 원자성, 일관성, 고립성, 지속성
  4. Q: 인덱스의 장단점은?
    A: 장점: 검색 속도 향상, 단점: 추가적인 저장 공간 필요
  5. Q: JOIN의 종류는?
    A: INNER, LEFT, RIGHT, FULL OUTER JOIN

네트워크

  1. Q: HTTP와 HTTPS의 차이는?
    A: HTTPS는 보안이 강화된 HTTP
  2. Q: TCP와 UDP의 차이는?
    A: TCP는 연결 지향적, 신뢰성 있음. UDP는 비연결성, 빠름
  3. Q: OSI 7계층이란?
    A: 네트워크 통신을 7개의 계층으로 표준화한 모델
  4. Q: DNS란?
    A: 도메인 이름을 IP 주소로 변환하는 시스템
  5. Q: REST API란?
    A: HTTP 프로토콜을 기반으로 하는 웹 서비스 아키텍처

운영체제

  1. Q: 프로세스와 스레드의 차이는?
    A: 프로세스는 독립적인 실행 단위, 스레드는 프로세스 내 실행 흐름
  2. Q: 교착상태(데드락)란?
    A: 두 개 이상의 프로세스가 서로의 자원을 기다리며 blocked 된 상태
  3. Q: 가상 메모리란?
    A: 물리적 메모리보다 큰 메모리를 사용할 수 있게 하는 기술
  4. Q: 페이징과 세그먼테이션의 차이는?
    A: 페이징은 고정 크기, 세그먼테이션은 가변 크기로 메모리 관리
  5. Q: 컨텍스트 스위칭이란?
    A: 실행 중인 프로세스를 변경하는 과정

웹 개발

  1. Q: MVC 패턴이란?
    A: Model, View, Controller로 구성된 소프트웨어 디자인 패턴
  2. Q: 쿠키와 세션의 차이는?
    A: 쿠키는 클라이언트, 세션은 서버에 저장
  3. Q: CORS란?
    A: 다른 출처의 리소스를 공유할 수 있게 하는 보안 정책
  4. Q: 웹 소켓이란?
    A: 실시간 양방향 통신을 위한 프로토콜
  5. Q: SPA란?
    A: 단일 페이지로 구성된 웹 애플리케이션

보안

  1. Q: SQL 인젝션이란?
    A: SQL 쿼리에 악의적인 코드를 삽입하는 공격 기법
  2. Q: XSS 공격이란?
    A: 웹 페이지에 악성 스크립트를 삽입하는 공격
  3. Q: CSRF 공격이란?
    A: 사용자의 권한을 이용해 공격자가 원하는 행동을 수행하게 하는 공격
  4. Q: 해시 함수란?
    A: 임의의 길이의 데이터를 고정 길이의 데이터로 매핑하는 함수
  5. Q: HTTPS에서 사용하는 암호화 방식은?
    A: 대칭키와 공개키 암호화 방식을 혼합하여 사용

소프트웨어 개발 방법론

  1. Q: 애자일 방법론이란?
    A: 반복적이고 점진적인 개발 방법론
  2. Q: TDD란?
    A: 테스트 주도 개발, 테스트를 먼저 작성하고 구현하는 방법
  3. Q: CI/CD란?
    A: 지속적 통합과 지속적 배포를 의미하는 개발 방식
  4. Q: 스크럼이란?
    A: 애자일 개발 방법론 중 하나로, 짧은 개발 주기를 반복하는 방식
  5. Q: 페어 프로그래밍이란?
    A: 두 명의 개발자가 한 컴퓨터로 작업하는 방식

버전 관리

  1. Q: Git과 SVN의 차이는?
    A: Git은 분산형, SVN은 중앙 집중식 버전 관리 시스템
  2. Q: Git의 merge와 rebase의 차이는?
    A: merge는 브랜치를 통합, rebase는 커밋 이력을 재작성
  3. Q: Git flow란?
    A: Git을 이용한 브랜치 관리 전략
  4. Q: Pull request란?
    A: 변경사항을 merge하기 전에 리뷰를 요청하는 기능
  5. Q: Git의 cherry-pick이란?
    A: 특정 커밋만 선택하여 현재 브랜치에 적용하는 기능

프로그래밍 언어 특화

  1. Q: Java의 JVM이란?
    A: Java 바이트코드를 실행하는 가상 머신
  2. Q: Python의 GIL이란?
    A: 한 번에 하나의 스레드만 파이썬 객체에 접근할 수 있게 하는 락
  3. Q: JavaScript의 호이스팅이란?
    A: 변수와 함수 선언이 스코프의 최상단으로 끌어올려지는 현상
  4. Q: C++의 가상 함수란?
    A: 파생 클래스에서 재정의될 것으로 기대되는 멤버 함수
  5. Q: Kotlin의 null 안정성이란?
    A: 컴파일 시점에 null 참조로 인한 오류를 방지하는 기능

프레임워크 및 라이브러리

  1. Q: Spring Framework의 특징은?
    A: DI, AOP, PSA 등을 지원하는 자바 기반 프레임워크
  2. Q: React의 Virtual DOM이란?
    A: 실제 DOM의 추상화 버전으로 렌더링 성능을 개선
  3. Q: Django의 ORM이란?
    A: 객체와 관계형 데이터베이스를 매핑하는 기술
  4. Q: Vue.js의 양방향 바인딩이란?
    A: 모델과 뷰의 데이터를 실시간으로 동기화하는 기능
  5. Q: Express.js의 미들웨어란?
    A: 요청과 응답 사이에서 작동하는 함수

클라우드 및 인프라

  1. Q: Docker란?
    A: 애플리케이션을 컨테이너화하여 배포하는 플랫폼
  2. Q: Kubernetes란?
    A: 컨테이너화된 애플리케이션의 자동 배포, 스케일링 등을 관리하는 시스템
  3. Q: AWS EC2란?
    A: 아마존의 클라우드 컴퓨팅 서비스
  4. Q: 마이크로서비스 아키텍처란?
    A: 애플리케이션을 작은 독립적인 서비스로 분할하는 아키텍처
  5. Q: 서버리스 컴퓨팅이란?
    A: 개발자가 서버 관리 없이 애플리케이션을 실행할 수 있는 모델

테스트 및 품질 관리

  1. Q: 단위 테스트란?
    A: 개별 코드 단위의 기능을 검증하는 테스트
  2. Q: 통합 테스트란?
    A: 여러 모듈이나 시스템 간의 상호작용을 검증하는 테스트
  3. Q: 회귀 테스트란?
    A: 기존 기능이 새로운 변경에 영향을 받지 않았는지 확인하는 테스트
  4. Q: 부하 테스트란?
    A: 시스템의 성능과 안정성을 검증하는 테스트
  5. Q: 코드 리뷰의 목적은?
    A: 코드 품질 향상, 버그 발견, 지식 공유

디자인 패턴

  1. Q: 싱글톤 패턴이란?
    A: 클래스의 인스턴스가 하나만 생성되도록 보장하는 패턴
  2. Q: 팩토리 패턴이란?
    A: 객체 생성을 서브 클래스에 위임하는 패턴
  3. Q: 옵저버 패턴이란?
    A: 객체의 상태 변화를 다른 객체에 통지하는 패턴
  4. Q: 전략 패턴이란?
    A: 알고리즘을 캡슐화하여 동적으로 교체할 수 있게 하는 패턴
  5. Q: 데코레이터 패턴이란?
    A: 객체에 동적으로 새로운 책임을 추가하는 패턴

성능 최적화

  1. Q: 캐싱이란?
    A: 자주 사용하는 데이터를 빠르게 접근할 수 있는 위치에 저장하는 기술
  2. Q: 레이지 로딩이란?
    A: 필요한 시점에 데이터를 로드하는 기법
  3. Q: 인덱싱의 목적은?
    A: 데이터베이스 검색 속도를 향상시키기 위함
  4. Q: 코드 최적화란?
    A: 프로그램의 실행 속도와 메모리 사용을 개선하는 과정
  5. Q: CDN이란?
    A: 콘텐츠를 사용자와 가까운 서버에서 제공하는 네트워크

프로젝트 관리

  1. Q: 애자일과 워터폴의 차이는?
    A: 애자일은 유연하고 반복적, 워터폴은 순차적이고 계획 중심적
  2. Q: 스프린트란?
    A: 스크럼에서 정해진 기간 동안의 개발 주기
  3. Q: 번다운 차트란?
    A: 남은 작업량을 시각화한 차트
  4. Q: 리스크 관리란?
    A: 프로젝트의 위험 요소를 식별하고 대응하는 과정
  5. Q: 이슈 트래킹 시스템이란?
    A: 프로젝트의 문제와 작업을 관리하는 시스템

소프트웨어 아키텍처

  1. Q: 모놀리식 아키텍처란?
    A: 모든 기능이 하나의 애플리케이션에 통합된 구조

 

Claude

프로그래밍 기초

  1. 변수와 상수의 차이점은 무엇인가요? 변수는 값을 변경할 수 있지만, 상수는 한 번 assigned되면 값을 바꿀 수 없습니다.
  2. 객체 지향 프로그래밍(OOP)의 4대 원칙을 설명해주세요.
    • 캡슐화: 데이터와 메서드를 하나의 단위로 묶음
    • 상속: 부모 클래스의 특성을 자식 클래스가 물려받음
    • 다형성: 같은 메서드가 다른 방식으로 작동
    • 추상화: 복잡한 시스템을 단순화하여 표현
  3. 스택(Stack)과 큐(Queue)의 차이점은 무엇인가요? 스택은 LIFO(Last In First Out), 큐는 FIFO(First In First Out) 구조입니다.
  4. Call by Value와 Call by Reference의 차이점은? Call by Value는 값을 복사해 전달하고, Call by Reference는 메모리 주소를 직접 참조합니다.
  5. 인터프리터 언어와 컴파일러 언어의 차이점은? 인터프리터는 런타임에 코드를 한 줄씩 해석하고, 컴파일러는 전체 코드를 한 번에 기계어로 변환합니다.

자료구조

  1. 배열과 링크드 리스트의 장단점은?
    • 배열: 랜덤 접근 빠름, 고정 크기
    • 링크드 리스트: 동적 크기, 삽입/삭제 용이
  2. 해시 테이블의 작동 원리는? 키-값 쌍을 저장하며, 해시 함수로 데이터의 저장 위치를 결정합니다.
  3. 이진 트리의 순회 방법 3가지는? 전위, 중위, 후위 순회
  4. 그래프와 트리의 차이점은? 트리는 루트가 있고 사이클이 없는 특별한 그래프입니다.
  5. 시간 복잡도가 O(n log n)인 정렬 알고리즘은? 퀵 정렬, 머지 정렬, 힙 정렬

데이터베이스

  1. SQL과 NoSQL의 차이점은? SQL은 관계형, NoSQL은 비관계형 데이터베이스입니다.
  2. 인덱스의 장점은? 데이터 검색 속도를 향상시키고 성능을 최적화합니다.
  3. ACID 원칙이란? 데이터베이스 트랜잭션의 신뢰성을 보장하는 4가지 특성입니다.
  4. LEFT JOIN과 INNER JOIN의 차이? LEFT JOIN은 왼쪽 테이블의 모든 레코드를, INNER JOIN은 두 테이블의 일치하는 레코드만 반환합니다.
  5. 정규화의 목적은? 데이터 중복을 최소화하고 데이터 무결성을 유지합니다.

웹 개발

  1. RESTful API의 특징은? 자원 기반, 상태 비저장, HTTP 메서드 사용
  2. 쿠키와 세션의 차이점은? 쿠키는 클라이언트, 세션은 서버에 저장됩니다.
  3. HTTPS의 보안 메커니즘은? SSL/TLS 암호화 프로토콜을 사용해 데이터를 암호화합니다.
  4. 크로스 사이트 스크립팅(XSS) 공격이란? 악성 스크립트를 웹 페이지에 주입하는 보안 취약점입니다.
  5. SPA(Single Page Application)의 장단점은? 장점: 빠른 사용자 경험, 단점: SEO 최적화 어려움

네트워크

  1. TCP와 UDP의 차이점은? TCP는 연결 지향, 신뢰성 보장, UDP는 비연결, 빠른 속도
  2. HTTP 상태 코드 분류는? 1xx: 정보, 2xx: 성공, 3xx: 리다이렉션, 4xx: 클라이언트 오류, 5xx: 서버 오류
  3. DNS의 역할은? 도메인 이름을 IP 주소로 변환합니다.
  4. 로드 밸런싱이란? 네트워크 트래픽을 여러 서버에 분산시키는 기술입니다.
  5. OSI 7계층이란? 네트워크 통신의 표준 모델로 7개 계층으로 구성됩니다.

보안

  1. 암호화의 대칭키와 비대칭키 차이점은? 대칭키는 동일한 키, 비대칭키는 공개키와 개인키를 사용합니다.
  2. SQL 인젝션 공격 방어 방법은? prepared statement 사용, 입력값 검증
  3. CSRF 공격이란? 사용자의 의도와 무관한 요청을 강제로 보내는 공격입니다.
  4. JWT(JSON Web Token)의 구조는? Header, Payload, Signature로 구성됩니다.
  5. 패스워드 해싱의 중요성은? 원문을 복원할 수 없도록 안전하게 저장하기 위함입니다.

프로그래밍 언어 기초

  1. 클로저(Closure)란? 외부 변수를 참조하는 함수 내부의 함수입니다.
  2. 제네릭 프로그래밍의 장점은? 타입에 독립적인 코드 작성이 가능합니다.
  3. 메모리 누수의 원인은? 불필요한 참조, 메모리 해제 누락 등입니다.
  4. 스레드와 프로세스의 차이점은? 프로세스는 독립된 메모리 공간, 스레드는 같은 메모리 공간을 공유합니다.
  5. 컴파일 타임 다형성과 런타임 다형성은? 컴파일 타임: 오버로딩, 런타임: 오버라이딩

소프트웨어 개발 프로세스

  1. 애자일 방법론의 특징은? 유연성, 점진적 개발, 고객 협업 중시
  2. CI/CD의 개념은? 지속적 통합(CI)과 지속적 배포(CD)를 의미합니다.
  3. 코드 리뷰의 목적은? 코드 품질 향상, 버그 발견, 지식 공유
  4. 테스트 주도 개발(TDD)이란? 테스트 코드를 먼저 작성하고 실제 코드를 개발하는 방법입니다.
  5. 기술 부채(Technical Debt)란? 빠른 개발을 위해 잠정적으로 발생하는 코드 품질 문제입니다.

개발 도구 및 환경

  1. Git의 브랜치 전략은? Git Flow, GitHub Flow 등 다양한 브랜치 관리 방법이 있습니다.
  2. 도커(Docker)의 장점은? 일관된 개발 환경, 이식성, 효율적인 리소스 사용
  3. 마이크로서비스 아키텍처란? 작고 독립적인 서비스들로 애플리케이션을 구성하는 방식입니다.
  4. 깃허브 액션(GitHub Actions)의 용도는? 자동화된 CI/CD 파이프라인 구축
  5. 가상환경의 필요성은? 프로젝트별 독립된 개발 환경 구축

알고리즘 및 문제 해결

  1. 시간 복잡도 O(1), O(n), O(log n), O(n^2)의 차이? 데이터 크기에 따른 알고리즘 성능 차이를 나타냅니다.
  2. 재귀 함수의 장단점은? 장점: 코드 간결, 단점: 메모리 오버헤드
  3. 그리디 알고리즘의 특징은? 매 순간 최적의 선택을 하는 알고리즘입니다.
  4. 동적 계획법(DP)이란? 복잡한 문제를 작은 하위 문제로 나누어 해결하는 방법입니다.
  5. 백트래킹 알고리즘의 개념은? 모든 가능한 경우의 수를 탐색하는 알고리즘입니다.

 

wrtn

1. **자기소개를 해주세요.**
   - 저는 [이름]이고, [전공/경력]을 가지고 있습니다. 개발에 대한 열정이 있습니다.

2. **어떤 프로그래밍 언어를 사용해 보았나요?**
   - Python, Java, JavaScript 등을 사용해 보았습니다.

3. **객체지향 프로그래밍(OOP)의 주요 개념은 무엇인가요?**
   - 캡슐화, 상속, 다형성, 추상화입니다.

4. **HTML과 CSS의 차이점은 무엇인가요?**
   - HTML은 구조를 정의하고, CSS는 스타일을 정의합니다.

5. **RESTful API란 무엇인가요?**
   - HTTP를 통해 자원에 접근하는 방식으로, CRUD 작업을 지원합니다.

6. **버전 관리 시스템의 필요성은 무엇인가요?**
   - 코드 변경 이력을 관리하고, 여러 개발자 간 협업을 용이하게 합니다.

7. **SQL과 NoSQL의 차이점은 무엇인가요?**
   - SQL은 관계형 데이터베이스, NoSQL은 비관계형 데이터베이스입니다.

8. **디버깅을 어떻게 진행하나요?**
   - 로그를 확인하고, 디버거를 사용하여 문제를 추적합니다.

9. **프론트엔드와 백엔드의 차이점은 무엇인가요?**
   - 프론트엔드는 사용자 인터페이스, 백엔드는 서버와 데이터베이스를 다룹니다.

10. **애자일 개발 방법론에 대해 설명해주세요.**
    - 반복적이고 점진적인 개발 방법으로, 팀원 간의 협업을 강조합니다.

11. **쓰레드와 프로세스의 차이점은 무엇인가요?**
    - 프로세스는 독립적인 실행 단위, 쓰레드는 프로세스 내의 실행 단위입니다.

12. **클라우드 컴퓨팅이란 무엇인가요?**
    - 인터넷을 통해 데이터 저장, 처리 및 관리 서비스를 제공하는 것입니다.

13. **MVC 아키텍처에 대해 설명해주세요.**
    - Model, View, Controller로 구성되어, 애플리케이션의 구조를 분리합니다.

14. **상속과 인터페이스의 차이점은 무엇인가요?**
    - 상속은 클래스 간의 관계, 인터페이스는 클래스가 구현해야 할 메서드 집합입니다.

15. **코드 리뷰의 중요성은 무엇인가요?**
    - 코드 품질을 향상시키고, 버그를 사전에 발견할 수 있습니다.

16. **정규 표현식이란 무엇인가요?**
    - 문자열 패턴을 정의하고, 문자열 검색 및 변환에 사용됩니다.

17. **API란 무엇인가요?**
    - 애플리케이션 간의 상호작용을 위한 인터페이스입니다.

18. **데이터베이스 인덱스란 무엇인가요?**
    - 데이터 검색 속도를 높이기 위한 데이터 구조입니다.

19. **프로그래밍에서 주석의 중요성은 무엇인가요?**
    - 코드의 가독성을 높이고, 다른 개발자에게 설명을 제공합니다.

20. **리팩토링이란 무엇인가요?**
    - 코드의 외부 동작을 변경하지 않으면서 내부 구조를 개선하는 것입니다.

21. **HTTP와 HTTPS의 차이점은 무엇인가요?**
    - HTTPS는 HTTP의 보안 버전으로, SSL/TLS를 사용하여 데이터를 암호화합니다.

22. **세션과 쿠키의 차이점은 무엇인가요?**
    - 세션은 서버에 저장되고, 쿠키는 클라이언트에 저장됩니다.

23. **소프트웨어 테스트의 종류는 무엇이 있나요?**
    - 단위 테스트, 통합 테스트, 시스템 테스트 등이 있습니다.

24. **CI/CD란 무엇인가요?**
    - 지속적 통합(Continuous Integration)과 지속적 배포(Continuous Deployment)의 약자입니다.

25. **가비지 컬렉션이란 무엇인가요?**
    - 사용하지 않는 메모리를 자동으로 회수하는 프로세스입니다.

26. **다형성이란 무엇인가요?**
    - 같은 인터페이스를 통해 서로 다른 객체를 다룰 수 있는 능력입니다.

27. **소프트웨어 디자인 패턴이란 무엇인가요?**
    - 소프트웨어 설계 문제를 해결하기 위한 일반적인 해결책입니다.

28. **스프링 프레임워크에 대해 설명해주세요.**
    - 자바 기반의 애플리케이션 개발을 위한 경량 컨테이너입니다.

29. **REST와 SOAP의 차이점은 무엇인가요?**
    - REST는 경량, SOAP은 표준화된 프로토콜입니다.

30. **데이터베이스 정규화란 무엇인가요?**
    - 데이터 중복을 줄이고 데이터 무결성을 향상시키는 과정입니다.

31. **프로그래밍에서 예외 처리란 무엇인가요?**
    - 오류 발생 시 프로그램이 정상적으로 작동하도록 하는 과정입니다.

32. **서버와 클라이언트의 역할은 무엇인가요?**
    - 서버는 데이터와 서비스를 제공하고, 클라이언트는 이를 요청합니다.

33. **프로그래밍 언어의 타입 시스템이란 무엇인가요?**
    - 변수의 데이터 타입을 정의하는 규칙입니다.

34. **소스코드 관리 도구의 예시는 무엇인가요?**
    - Git, SVN 등이 있습니다.

35. **스케일링이란 무엇인가요?**
    - 시스템의 처리 능력을 확장하는 과정입니다.

36. **REST API의 상태 코드에 대해 설명해주세요.**
    - 요청 결과를 나타내는 숫자로, 예를 들어 200(성공), 404(찾을 수 없음) 등이 있습니다.

37. **클래스와 객체의 차이점은 무엇인가요?**
    - 클래스는 객체의 설계도, 객체는 클래스의 인스턴스입니다.

38. **소프트웨어 개발 생명 주기(SDLC)란 무엇인가요?**
    - 소프트웨어 개발의 단계(요구 분석, 설계, 구현, 테스트, 유지보수)를 정의합니다.

39. **애플리케이션의 성능을 측정하는 방법은 무엇인가요?**
    - 프로파일링, 벤치마킹, 로드 테스트 등을 사용합니다.

40. **안정성 있는 코드를 작성하는 방법은 무엇인가요?**
    - 코드 리뷰, 테스트, 예외 처리를 통해 안정성을 높입니다.

41. **UI/UX의 차이점은 무엇인가요?**
    - UI는 사용자 인터페이스, UX는 사용자 경험입니다.

42. **타입스크립트의 장점은 무엇인가요?**
    - 정적 타입 검사를 통해 코드의 오류를 사전에 발견할 수 있습니다.

43. **서버리스 아키텍처란 무엇인가요?**
    - 서버 관리 없이 코드만 작성하고 배포하는 방식입니다.

44. **모바일 앱 개발에서 고려해야 할 사항은 무엇인가요?**
    - 성능, 사용자 경험, 다양한 화면 크기 지원 등이 중요합니다.

45. **데이터 구조의 종류는 무엇이 있나요?**
    - 배열, 링크드 리스트, 스택, 큐, 해시 테이블 등이 있습니다.

46. **디자인 패턴 중 싱글턴 패턴에 대해 설명해주세요.**
    - 클래스의 인스턴스가 하나만 존재하도록 보장하는 패턴입니다.

47. **데이터베이스 트랜잭션이란 무엇인가요?**
    - 데이터베이스의 일련의 작업을 하나의 단위로 처리하는 것입니다.

48. **소프트웨어 아키텍처란 무엇인가요?**
    - 시스템의 구조와 구성 요소 간의 관계를 정의합니다.

49. **코드 성능을 최적화하는 방법은 무엇인가요?**
    - 알고리즘 개선, 메모리 관리, 캐싱 등을 통해 성능을 향상시킵니다.

50. **API 문서화의 중요성은 무엇인가요?**
    - 개발자 간의 의사소통을 원활하게 하고, API 사용법을 제공합니다.

51. **MVC 패턴의 장점은 무엇인가요?**
    - 코드의 재사용성과 유지보수성을 향상시킵니다.

52. **소프트웨어 품질 보증(QA)이란 무엇인가요?**
    - 소프트웨어의 품질을 보장하기 위한 활동입니다.

53. **프로그래밍에서 주의 깊게 다뤄야 할 보안 이슈는 무엇인가요?**
    - SQL 인젝션, 크로스 사이트 스크립팅(XSS) 등이 있습니다.

54. **디버깅 도구의 예시는 무엇인가요?**
    - Chrome DevTools, GDB, Visual Studio Debugger 등이 있습니다.

55. **애플리케이션 성능 모니터링 도구의 예시는 

이런 자료를 참고했어요.
[1] blog.naver.com - 면접 예상 질문 100개 리스트. 면접노트 준비는 합격으로 가는 올바른 ... (https://blog.naver.com/chiefer/223012001115?viewType=pc)
[2] amyhyemi.tistory.com - [면접준비] 신입 개발자 취업 면접 예상 질문 100개 뽑기 (https://amyhyemi.tistory.com/124)
[3] 씽크존 - 면접 대비 예상질문답변 Best 및 자주 나오는 면접질문 Best - 씽크존 (https://www.thinkzon.com/sale_quality/1501829)
[4] 개발새발 블로그 - 주니어 백엔드 개발자 기술면접 질문리스트 - 개발새발 블로그 (https://devsurimlee.tistory.com/50)
[5] Lab - 신입 개발자 면접에서 자주 묻는 질문과 답변 전략 - F-Lab (https://f-lab.kr/insight/interview-questions-for-junior-developers-20240522)
[6] 프로그래머스 커리어 - 기술면접대비 - 테크 피드 - 프로그래머스 커리어 (https://career.programmers.co.kr/posts/tag/%EA%B8%B0%EC%88%A0%EB%A9%B4%EC%A0%91%EB%8C%80%EB%B9%84)
[7] 크몽 - 승무원 면접 합격/불합격 답변 100선 - 크몽 (https://kmong.com/gig/552333)
[8] 티스토리 - 개발자 신입 이력서 작성법 (https://keepgoing98.tistory.com/21)
[9] oneoneone.kr - "요즘" 면접 예상 질문 100개 모음 (답변 가이드 및 역질문 15종 추가 ... (https://oneoneone.kr/content/927c5719)
[10] http://www.happycampus.com - KB 국민은행 대학생 봉사단 면접 예상질문 정리(최종합격자&amp (https://www.happycampus.com/intro-doc/25472306/) 

Q: 대한민국에서 내가 iOS 개발자를 하고 싶은데 취업을 꼭 알아야되는 기술을 중요도 순으로 알려주고 어느정도 시간을 투자해야하는지 알려줘

A: iOS 개발자가 되기 위해 알아야 할 기술들을 중요도 순으로 정리해 드리겠습니다. 또한 각 기술에 대해 필요한 시간도 대략적으로 안내하겠습니다.

1. **Swift 언어**
   - **중요도**: 매우 높음
   - **투자 시간**: 2-3개월 (기본 문법과 개념 이해)

2. **Xcode와 Interface Builder**
   - **중요도**: 매우 높음
   - **투자 시간**: 1-2개월 (기본적인 사용법과 UI 구성)

3. **iOS SDK 및 프레임워크**
   - **중요도**: 높음
   - **투자 시간**: 2-3개월 (UIKit, Core Data, Networking 등)

4. **모바일 앱 아키텍처 (MVVM, MVC 등)**
   - **중요도**: 높음
   - **투자 시간**: 1-2개월 (아키텍처 패턴 이해)

5. **버전 관리 시스템 (Git)**
   - **중요도**: 중간
   - **투자 시간**: 1개월 (기본적인 명령어와 사용법)

6. **테스트와 디버깅**
   - **중요도**: 중간
   - **투자 시간**: 1개월 (Unit Test, UI Test 등)

7. **API 통신 (RESTful API, JSON)**
   - **중요도**: 중간
   - **투자 시간**: 1개월 (HTTP, JSON 파싱 이해)

8. **앱 배포 및 App Store 이해**
   - **중요도**: 중간
   - **투자 시간**: 1개월 (앱 심사 과정, 배포 방법 이해)

9. **SwiftUI (선택적)**
   - **중요도**: 선택적
   - **투자 시간**: 1-2개월 (새로운 UI 구성 방식 이해)

### 총 시간
위의 기술들을 모두 학습하는 데 약 10-14개월 정도의 시간이 필요할 수 있습니다. 개인의 학습 속도와 배경에 따라 달라질 수 있으니 참고하시기 바랍니다.

이 외에도 실제 프로젝트 경험을 쌓는 것이 중요하니, 개인 프로젝트나 오픈 소스 기여를 통해 실력을 키우는 것도 추천드립니다. 


Q: MVC, MVP, MVVM 세 가지 차이
A:

### 1. MVC (모델-뷰-컨트롤러)

- **모델**: 데이터(정보)를 저장하는 부분입니다. 예를 들어, 좋아하는 만화 캐릭터의 이름이나 점수를 저장하는 곳입니다.
- **뷰**: 사용자가 보는 화면입니다. 만화 캐릭터의 그림이나 점수를 보여주는 부분이지요.
- **컨트롤러**: 사용자가 버튼을 누르거나 터치할 때 반응하는 역할을 합니다. 사용자가 원하는 대로 정보를 바꾸도록 도와줍니다.

**작동 방식**: 사용자가 버튼을 누르면 컨트롤러가 정보를 바꾸고, 그 정보가 다시 화면(뷰)에 보여집니다.

---

### 2. MVP (모델-뷰-프레젠터)

- **모델**: 데이터 저장소로, 같은 역할을 합니다.
- **뷰**: 화면으로, 변함이 없습니다.
- **프레젠터**: 정보를 정리하고 준비하여 화면에 보여주는 역할을 합니다.

**작동 방식**: 사용자가 버튼을 누르면 프레젠터가 정보를 바꿔서 화면에 보여줍니다. 프레젠터가 중간에서 도와주므로 더 깔끔하게 정보를 표시할 수 있습니다.

---

### 3. MVVM (모델-뷰-뷰모델)

- **모델**: 데이터 저장소로, 여전히 동일합니다.
- **뷰**: 화면으로, 변함이 없습니다.
- **뷰모델**: 화면에 보여줄 정보를 관리하는 역할을 하며, 화면과 자동으로 연결되어 있습니다.

**작동 방식**: 사용자가 버튼을 누르면 뷰모델이 정보를 바꾸고, 그 정보가 자동으로 화면에 보여집니다. 따라서 사용자가 직접 화면을 바꾸지 않아도 됩니다.

---



Q: 간단한 iOS 앱을 만들려고 해. 스토리보드, 코드, swiftUI 세 가지 방식으로 만들거야

A: 

간단한 iOS 앱을 만들기 위해 스토리보드, 코드, SwiftUI 세 가지 방식으로 각각의 기본적인 접근 방법을 안내해 드리겠습니다.

### 1. 스토리보드 방식

**프로젝트 생성**
- Xcode에서 새로운 프로젝트를 생성할 때 "App" 템플릿을 선택합니다.
- Interface를 "Storyboard"로 선택합니다.

**UI 구성**
1. Main.storyboard를 열어 UI를 구성합니다.
2. UILabel과 UIButton을 드래그하여 배치합니다.
3. UILabel의 Text를 초기값으로 설정합니다.

**코드 연결**
1. ViewController.swift 파일을 열고, IBOutlet과 IBAction을 생성합니다.

import UIKit

class ViewController: UIViewController {
   @IBOutlet weak var label: UILabel!

   override func viewDidLoad() {
       super.viewDidLoad()
       label.text = "안녕하세요!"
   }

   @IBAction func buttonTapped(_ sender: UIButton) {
       label.text = "버튼이 눌렸습니다!"
   }
}


2. 스토리보드에서 UILabel과 UIButton을 코드에 연결합니다.

### 2. 코드 방식

**프로젝트 생성**
- Xcode에서 새로운 프로젝트를 생성할 때 "App" 템플릿을 선택합니다.
- Interface를 "SwiftUI" 또는 "Storyboard"가 아닌 "None"으로 선택합니다.

**UI 구성**
1. ViewController.swift 파일을 수정하여 UI를 코드로 작성합니다.

import UIKit

class ViewController: UIViewController {
   let label = UILabel()
   let button = UIButton()

   override func viewDidLoad() {
       super.viewDidLoad()
       setupUI()
   }

   func setupUI() {
       label.text = "안녕하세요!"
       label.translatesAutoresizingMaskIntoConstraints = false
       view.addSubview(label)

       button.setTitle("누르세요", for: .normal)
       button.setTitleColor(.blue, for: .normal)
       button.addTarget(self, action: #selector(buttonTapped), for: .touchUpInside)
       button.translatesAutoresizingMaskIntoConstraints = false
       view.addSubview(button)

       // Auto Layout 설정
       NSLayoutConstraint.activate([
           label.centerXAnchor.constraint(equalTo: view.centerXAnchor),
           label.centerYAnchor.constraint(equalTo: view.centerYAnchor),
           button.centerXAnchor.constraint(equalTo: view.centerXAnchor),
           button.topAnchor.constraint(equalTo: label.bottomAnchor, constant: 20)
       ])
   }

   @objc func buttonTapped() {
       label.text = "버튼이 눌렸습니다!"
   }
}



### 3. SwiftUI 방식

**프로젝트 생성**
- Xcode에서 새로운 프로젝트를 생성할 때 "App" 템플릿을 선택합니다.
- Interface를 "SwiftUI"로 선택합니다.

**UI 구성**
1. ContentView.swift 파일을 수정하여 SwiftUI로 UI를 구성합니다.

import SwiftUI

struct ContentView: View {
   @State private var labelText = "안녕하세요!"

   var body: some View {
       VStack {
           Text(labelText)
               .font(.largeTitle)
               .padding()

           Button(action: {
               labelText = "버튼이 눌렸습니다!"
           }) {
               Text("누르세요")
                   .font(.title)
                   .foregroundColor(.blue)
           }
       }
       .padding()
   }
}

struct ContentView_Previews: PreviewProvider {
   static var previews: some View {
       ContentView()
   }
}



### 요약

- **스토리보드**: UI를 시각적으로 구성하고, IBOutlet과 IBAction으로 연결합니다.
- **코드**: UI를 코드로 직접 작성하고, Auto Layout을 사용하여 배치합니다.
- **SwiftUI**: 상태 변수를 사용하여 UI를 선언적으로 구성하고, 버튼 클릭 시 상태를 변경하여 화면을 업데이트합니다.

결론:

  • 스토리보드는 직관적이고 빠르게 UI를 디자인할 수 있는 장점이 있지만, 프로젝트가 커질수록 유지보수가 어려워질 수 있습니다.
  • 코드는 세밀한 제어가 가능하고 유연하지만, UI 작성이 번거로워지고 코드가 길어지기 쉽습니다.
  • SwiftUI는 선언적 문법을 사용하여 코드가 짧고 직관적이며, 최신 기능을 쉽게 사용할 수 있지만, 초기 학습이 필요하고 하위 버전의 iOS에서 문제가 있을 수 있습니다.

 

https://docs.swift.org/swift-book/documentation/the-swift-programming-language/basicoperators

 

 

https://docs.swift.org/swift-book/documentation/the-swift-programming-language/collectiontypes

 

 

A: 

함수형 언어의 주요 특징 중 하나는 **함수를 일급 객체로 취급**한다는 점입니다. 즉, 함수가 변수에 할당될 수 있고, 다른 함수의 인자로 전달될 수 있으며, 함수의 반환값으로도 사용될 수 있습니다. Swift에서도 이러한 특징을 활용할 수 있습니다.

다음은 Swift에서 함수형 프로그래밍의 특징을 보여주는 간단한 예제입니다:

// 두 숫자의 합을 계산하는 함수
func add(_ a: Int, _ b: Int) -> Int {
    return a + b
}

// 함수를 인자로 받아서 두 숫자의 합을 계산하는 함수
func calculate(_ a: Int, _ b: Int, operation: (Int, Int) -> Int) -> Int {
    return operation(a, b)
}

// main
let result = calculate(5, 3, operation: add)
print(result) // 출력: 8

 

### 설명

1. **일급 객체**: `add` 함수는 변수처럼 다른 함수의 인자로 전달되었습니다. `calculate` 함수는 두 개의 정수와 함수를 인자로 받아서 그 함수를 실행합니다.

2. **고차 함수**: `calculate`는 고차 함수입니다. 즉, 다른 함수를 인자로 받거나 반환할 수 있는 함수입니다.

3. **함수의 재사용성**: `calculate`라는 함수는 다양한 연산을 수행할 수 있도록 설계되었습니다. 다른 연산을 원할 경우, 다른 함수를 정의하고 인자로 전달하면 됩니다.

이 예제를 통해 함수형 프로그래밍의 특징을 쉽게 이해할 수 있습니다. Swift는 이러한 함수형 패러다임을 지원하며, 코드를 더 간결하고 재사용 가능하게 만들어 줍니다. 

 


https://bbiguduk.gitbook.io/swift

 

The Swift Programming Language (한국어) | Swift

Last updated 5 months ago

bbiguduk.gitbook.io

 


과제

 

이름 10번 찍기

let name = "secret" 

for _ in 1...10 {
    print(name)
}

 

 

영화순위

 

https://www.kobis.or.kr/kobisopenapi/webservice/rest/boxoffice/searchDailyBoxOfficeList.json?key=fecd5be7de01c30e13107d1967fe285d&targetDt=20250304

 

https://codebeautify.org/jsonviewer

 

 

출처: iOS 프로그래밍 실무 강의자료