iOS 프로그래밍 실무 1주차
생성형 AI 비교
Q: 신입 개발자 면접 질문 100개를 만들고 답변을 짧게 작성해줘
A:
Grok
프로그래밍 기초 (20개)
- 변수란 무엇인가요?
- 데이터를 저장하는 메모리 공간입니다.
- 상수와 변수의 차이는?
- 상수는 값이 변하지 않고, 변수는 변할 수 있습니다.
- 객체지향 프로그래밍(OOP)이란?
- 객체를 중심으로 데이터를 조작하는 프로그래밍 방식입니다.
- 캡슐화란 무엇인가요?
- 데이터와 메서드를 하나로 묶고 외부 접근을 제한하는 것입니다.
- 상속의 장점은?
- 코드 재사용성과 계층 구조를 제공합니다.
- 다형성이란?
- 같은 인터페이스로 다양한 구현을 하는 것입니다.
- 추상 클래스와 인터페이스의 차이는?
- 추상 클래스는 구현을 포함할 수 있고, 인터페이스는 선언만 가능합니다.
- 오버로딩과 오버라이딩의 차이는?
- 오버로딩은 같은 이름 다른 매개변수, 오버라이딩은 상위 클래스 메서드 재정의입니다.
- 가비지 컬렉션이란?
- 사용하지 않는 메모리를 자동으로 해제하는 기능입니다.
- 정적 변수란?
- 클래스에 속하며 인스턴스 없이 접근 가능한 변수입니다.
- call by value와 call by reference의 차이는?
- 값 복사 vs 참조 전달입니다.
- 포인터란 무엇인가요?
- 메모리 주소를 저장하는 변수입니다.
- 스택과 힙의 차이는?
- 스택은 정적 메모리, 힙은 동적 메모리입니다.
- 재귀 함수란?
- 자신을 호출하는 함수입니다.
- try-catch 블록의 역할은?
- 예외를 처리합니다.
- API란 무엇인가요?
- 소프트웨어 간 데이터를 주고받기 위한 인터페이스입니다.
- REST API란?
- HTTP를 사용해 자원을 주고받는 방식입니다.
- JSON과 XML의 차이는?
- JSON은 경량, XML은 구조화된 데이터 형식입니다.
- 컴파일러와 인터프리터의 차이는?
- 컴파일러는 전체 번역, 인터프리터는 줄 단위 실행입니다.
- 형변환이란?
- 데이터 타입을 변환하는 것입니다.
알고리즘과 자료구조 (20개)
- 배열과 리스트의 차이는?
- 배열은 고정 크기, 리스트는 동적 크기입니다.
- 스택과 큐의 차이는?
- 스택은 LIFO, 큐는 FIFO입니다.
- 해시 테이블이란?
- 키-값 쌍으로 데이터를 저장하는 자료구조입니다.
- 이진 탐색 트리(BST)란?
- 노드의 왼쪽은 작고 오른쪽은 큰 트리입니다.
- 빅오 표기법이란?
- 알고리즘의 시간/공간 복잡도를 나타냅니다.
- O(n)과 O(log n)의 차이는?
- O(n)은 선형, O(log n)은 로그 증가입니다.
- 버블 정렬이란?
- 인접 요소를 비교하며 정렬합니다.
- 퀵 정렬의 작동 방식은?
- 피벗을 기준으로 분할 후 정렬합니다.
- 힙이란 무엇인가요?
- 최대/최소 값을 빠르게 찾는 완전 이진 트리입니다.
- 그래프와 트리의 차이는?
- 그래프는 순환이 가능, 트리는 불가능합니다.
- DFS와 BFS란?
- 깊이 우선 탐색 vs 너비 우선 탐색입니다.
- 최단 경로 알고리즘은?
- 다익스트라나 벨만-포드입니다.
- 동적 프로그래밍이란?
- 문제를 작은 부분으로 나누어 해결합니다.
- 그리디 알고리즘이란?
- 현재 최적 선택을 반복합니다.
- 백트래킹이란?
- 해를 찾다가 막히면 돌아가는 기법입니다.
- 이진 탐색의 조건은?
- 데이터가 정렬되어 있어야 합니다.
- 연결 리스트란?
- 노드가 다음 노드를 가리키는 구조입니다.
- 큐를 배열로 구현하는 방법은?
- front와 rear 포인터를 사용합니다.
- 트리의 높이란?
- 루트에서 가장 깊은 노드까지의 거리입니다.
- 정렬 알고리즘의 안정성이란?
- 동일 값의 순서가 유지되는 특성입니다.
데이터베이스 (20개)
- 데이터베이스란 무엇인가요?
- 데이터를 체계적으로 저장한 시스템입니다.
- RDBMS란?
- 관계형 데이터베이스 관리 시스템입니다.
- SQL이란?
- 데이터베이스와 상호작용하는 언어입니다.
- primary key란?
- 테이블의 고유 식별자입니다.
- foreign key란?
- 다른 테이블의 primary key를 참조합니다.
- 정규화란?
- 데이터 중복을 줄이는 설계 과정입니다.
- 인덱스란 무엇인가요?
- 검색 속도를 높이는 데이터 구조입니다.
- 트랜잭션이란?
- 작업의 논리적 단위입니다.
- ACID 속성이란?
- 원자성, 일관성, 격리성, 지속성입니다.
- JOIN이란?
- 두 테이블을 연결하는 연산입니다.
- inner join과 outer join의 차이는?
- inner는 일치 행만, outer는 모든 행 포함입니다.
- NoSQL이란?
- 비관계형 데이터베이스입니다.
- 데이터베이스 락이란?
- 동시 접근을 제어하는 메커니즘입니다.
- 뷰(View)란?
- 가상 테이블입니다.
- 쿼리 최적화란?
- 실행 속도를 높이는 작업입니다.
- 트리거란?
- 특정 이벤트에 반응하는 코드입니다.
- 샤딩이란?
- 데이터를 분할해 저장하는 기법입니다.
- 복제(Replication)란?
- 데이터를 복사해 저장하는 것입니다.
- ORM이란?
- 객체와 데이터베이스를 매핑하는 도구입니다.
- �ormalization이란?
- 성능 향상을 위해 중복을 허용하는 설계입니다.
네트워크 (20개)
- OSI 7계층이란?
- 네트워크 통신을 7단계로 나눈 모델입니다.
- TCP와 UDP의 차이는?
- TCP는 신뢰성, UDP는 속도 중심입니다.
- HTTP란 무엇인가요?
- 웹에서 데이터를 주고받는 프로토콜입니다.
- HTTPS의 역할은?
- 데이터 암호화로 보안을 강화합니다.
- IP 주소란?
- 네트워크 장치를 식별하는 번호입니다.
- DNS란 무엇인가요?
- 도메인을 IP로 변환합니다.
- 포트 번호란?
- 특정 프로세스를 식별하는 번호입니다.
- GET과 POST의 차이는?
- GET은 데이터 요청, POST는 데이터 전송입니다.
- 쿠키와 세션의 차이는?
- 쿠키는 클라이언트, 세션은 서버에 저장됩니다.
- 로드 밸런서란?
- 트래픽을 분산하는 장치입니다.
- 프록시 서버란?
- 클라이언트와 서버 간 중개자입니다.
- 방화벽이란?
- 네트워크 보안을 위한 장치입니다.
- 웹소켓이란?
- 양방향 실시간 통신을 제공합니다.
- 패킷이란?
- 네트워크로 전송되는 데이터 단위입니다.
- NAT란?
- 사설 IP를 공인 IP로 변환합니다.
- VPN이란?
- 가상 사설망으로 보안 통신을 제공합니다.
- DHCP란?
- IP 주소를 자동 할당합니다.
- 라우터란?
- 네트워크 간 데이터를 전달합니다.
- 서브넷이란?
- 네트워크를 작은 단위로 나눈 것입니다.
- SSL/TLS란?
- 데이터 암호화 프로토콜입니다.
시스템 설계 및 기타 (20개)
- 캐시란 무엇인가요?
- 자주 사용하는 데이터를 빠르게 접근하도록 저장합니다.
- 로드 밸런싱의 장점은?
- 서버 부하를 줄이고 가용성을 높입니다.
- 마이크로서비스란?
- 작은 독립적 서비스로 나눈 아키텍처입니다.
- 모놀리식 아키텍처란?
- 단일 애플리케이션으로 구성된 구조입니다.
- 컨테이너란?
- 애플리케이션과 환경을 패키징한 것입니다.
- 도커란 무엇인가요?
- 컨테이너를 관리하는 플랫폼입니다.
- 쿠버네티스란?
- 컨테이너 오케스트레이션 도구입니다.
- CI/CD란?
- 지속적 통합과 배포입니다.
- 버전 관리 시스템이란?
- 코드 변경을 추적하는 도구입니다.
- Git과 GitHub의 차이는?
- Git은 도구, GitHub는 호스팅 플랫폼입니다.
- 테스트 주도 개발(TDD)이란?
- 테스트를 먼저 작성하고 코드를 개발합니다.
- 디버깅이란?
- 코드 오류를 찾고 수정하는 과정입니다.
- 스케일 업과 스케일 아웃의 차이는?
- 스케일 업은 성능 향상, 스케일 아웃은 서버 추가입니다.
- 클라우드 컴퓨팅이란?
- 인터넷을 통해 컴퓨팅 자원을 제공합니다.
- 백엔드와 프론트엔드의 차이는?
- 백엔드는 서버, 프론트엔드는 사용자 인터페이스입니다.
- 소프트웨어 개발 생명주기(SDLC)란?
- 소프트웨어를 개발하는 단계적 과정입니다.
- 애자일 방법론이란?
- 반복적이고 유연한 개발 방식입니다.
- 스프링 프레임워크란?
- 자바 기반 애플리케이션 개발 도구입니다.
- MVC 패턴이란?
- 모델, 뷰, 컨트롤러로 나눈 설계 패턴입니다.
- 데드락이란?
- 두 프로세스가 서로 자원을 기다리며 멈춘 상태입니다.
Perplexity
프로그래밍 기초
- Q: 객체 지향 프로그래밍의 4가지 특징은?
A: 캡슐화, 상속, 다형성, 추상화 - Q: 스택과 큐의 차이점은?
A: 스택은 LIFO, 큐는 FIFO 구조 - Q: 재귀 함수란?
A: 자기 자신을 호출하는 함수 - Q: 메모리 누수란?
A: 프로그램이 더 이상 필요하지 않은 메모리를 계속 점유하는 현상 - Q: 컴파일러와 인터프리터의 차이는?
A: 컴파일러는 전체 코드를 기계어로 변환, 인터프리터는 한 줄씩 실행
알고리즘 및 자료구조
- Q: 시간 복잡도 O(n)의 의미는?
A: 입력 크기에 비례하여 실행 시간이 증가 - Q: 이진 탐색 트리란?
A: 왼쪽 자식 노드 < 부모 노드 < 오른쪽 자식 노드 구조의 트리 - Q: 해시 테이블의 장점은?
A: 빠른 검색, 삽입, 삭제 연산 - Q: 버블 정렬의 시간 복잡도는?
A: O(n^2) - Q: 동적 프로그래밍이란?
A: 큰 문제를 작은 하위 문제로 나누어 해결하는 방법
데이터베이스
- Q: SQL과 NoSQL의 차이는?
A: SQL은 관계형, NoSQL은 비관계형 데이터베이스 - Q: 정규화란?
A: 데이터 중복을 최소화하고 무결성을 보장하는 과정 - Q: ACID 속성이란?
A: 원자성, 일관성, 고립성, 지속성 - Q: 인덱스의 장단점은?
A: 장점: 검색 속도 향상, 단점: 추가적인 저장 공간 필요 - Q: JOIN의 종류는?
A: INNER, LEFT, RIGHT, FULL OUTER JOIN
네트워크
- Q: HTTP와 HTTPS의 차이는?
A: HTTPS는 보안이 강화된 HTTP - Q: TCP와 UDP의 차이는?
A: TCP는 연결 지향적, 신뢰성 있음. UDP는 비연결성, 빠름 - Q: OSI 7계층이란?
A: 네트워크 통신을 7개의 계층으로 표준화한 모델 - Q: DNS란?
A: 도메인 이름을 IP 주소로 변환하는 시스템 - Q: REST API란?
A: HTTP 프로토콜을 기반으로 하는 웹 서비스 아키텍처
운영체제
- Q: 프로세스와 스레드의 차이는?
A: 프로세스는 독립적인 실행 단위, 스레드는 프로세스 내 실행 흐름 - Q: 교착상태(데드락)란?
A: 두 개 이상의 프로세스가 서로의 자원을 기다리며 blocked 된 상태 - Q: 가상 메모리란?
A: 물리적 메모리보다 큰 메모리를 사용할 수 있게 하는 기술 - Q: 페이징과 세그먼테이션의 차이는?
A: 페이징은 고정 크기, 세그먼테이션은 가변 크기로 메모리 관리 - Q: 컨텍스트 스위칭이란?
A: 실행 중인 프로세스를 변경하는 과정
웹 개발
- Q: MVC 패턴이란?
A: Model, View, Controller로 구성된 소프트웨어 디자인 패턴 - Q: 쿠키와 세션의 차이는?
A: 쿠키는 클라이언트, 세션은 서버에 저장 - Q: CORS란?
A: 다른 출처의 리소스를 공유할 수 있게 하는 보안 정책 - Q: 웹 소켓이란?
A: 실시간 양방향 통신을 위한 프로토콜 - Q: SPA란?
A: 단일 페이지로 구성된 웹 애플리케이션
보안
- Q: SQL 인젝션이란?
A: SQL 쿼리에 악의적인 코드를 삽입하는 공격 기법 - Q: XSS 공격이란?
A: 웹 페이지에 악성 스크립트를 삽입하는 공격 - Q: CSRF 공격이란?
A: 사용자의 권한을 이용해 공격자가 원하는 행동을 수행하게 하는 공격 - Q: 해시 함수란?
A: 임의의 길이의 데이터를 고정 길이의 데이터로 매핑하는 함수 - Q: HTTPS에서 사용하는 암호화 방식은?
A: 대칭키와 공개키 암호화 방식을 혼합하여 사용
소프트웨어 개발 방법론
- Q: 애자일 방법론이란?
A: 반복적이고 점진적인 개발 방법론 - Q: TDD란?
A: 테스트 주도 개발, 테스트를 먼저 작성하고 구현하는 방법 - Q: CI/CD란?
A: 지속적 통합과 지속적 배포를 의미하는 개발 방식 - Q: 스크럼이란?
A: 애자일 개발 방법론 중 하나로, 짧은 개발 주기를 반복하는 방식 - Q: 페어 프로그래밍이란?
A: 두 명의 개발자가 한 컴퓨터로 작업하는 방식
버전 관리
- Q: Git과 SVN의 차이는?
A: Git은 분산형, SVN은 중앙 집중식 버전 관리 시스템 - Q: Git의 merge와 rebase의 차이는?
A: merge는 브랜치를 통합, rebase는 커밋 이력을 재작성 - Q: Git flow란?
A: Git을 이용한 브랜치 관리 전략 - Q: Pull request란?
A: 변경사항을 merge하기 전에 리뷰를 요청하는 기능 - Q: Git의 cherry-pick이란?
A: 특정 커밋만 선택하여 현재 브랜치에 적용하는 기능
프로그래밍 언어 특화
- Q: Java의 JVM이란?
A: Java 바이트코드를 실행하는 가상 머신 - Q: Python의 GIL이란?
A: 한 번에 하나의 스레드만 파이썬 객체에 접근할 수 있게 하는 락 - Q: JavaScript의 호이스팅이란?
A: 변수와 함수 선언이 스코프의 최상단으로 끌어올려지는 현상 - Q: C++의 가상 함수란?
A: 파생 클래스에서 재정의될 것으로 기대되는 멤버 함수 - Q: Kotlin의 null 안정성이란?
A: 컴파일 시점에 null 참조로 인한 오류를 방지하는 기능
프레임워크 및 라이브러리
- Q: Spring Framework의 특징은?
A: DI, AOP, PSA 등을 지원하는 자바 기반 프레임워크 - Q: React의 Virtual DOM이란?
A: 실제 DOM의 추상화 버전으로 렌더링 성능을 개선 - Q: Django의 ORM이란?
A: 객체와 관계형 데이터베이스를 매핑하는 기술 - Q: Vue.js의 양방향 바인딩이란?
A: 모델과 뷰의 데이터를 실시간으로 동기화하는 기능 - Q: Express.js의 미들웨어란?
A: 요청과 응답 사이에서 작동하는 함수
클라우드 및 인프라
- Q: Docker란?
A: 애플리케이션을 컨테이너화하여 배포하는 플랫폼 - Q: Kubernetes란?
A: 컨테이너화된 애플리케이션의 자동 배포, 스케일링 등을 관리하는 시스템 - Q: AWS EC2란?
A: 아마존의 클라우드 컴퓨팅 서비스 - Q: 마이크로서비스 아키텍처란?
A: 애플리케이션을 작은 독립적인 서비스로 분할하는 아키텍처 - Q: 서버리스 컴퓨팅이란?
A: 개발자가 서버 관리 없이 애플리케이션을 실행할 수 있는 모델
테스트 및 품질 관리
- Q: 단위 테스트란?
A: 개별 코드 단위의 기능을 검증하는 테스트 - Q: 통합 테스트란?
A: 여러 모듈이나 시스템 간의 상호작용을 검증하는 테스트 - Q: 회귀 테스트란?
A: 기존 기능이 새로운 변경에 영향을 받지 않았는지 확인하는 테스트 - Q: 부하 테스트란?
A: 시스템의 성능과 안정성을 검증하는 테스트 - Q: 코드 리뷰의 목적은?
A: 코드 품질 향상, 버그 발견, 지식 공유
디자인 패턴
- Q: 싱글톤 패턴이란?
A: 클래스의 인스턴스가 하나만 생성되도록 보장하는 패턴 - Q: 팩토리 패턴이란?
A: 객체 생성을 서브 클래스에 위임하는 패턴 - Q: 옵저버 패턴이란?
A: 객체의 상태 변화를 다른 객체에 통지하는 패턴 - Q: 전략 패턴이란?
A: 알고리즘을 캡슐화하여 동적으로 교체할 수 있게 하는 패턴 - Q: 데코레이터 패턴이란?
A: 객체에 동적으로 새로운 책임을 추가하는 패턴
성능 최적화
- Q: 캐싱이란?
A: 자주 사용하는 데이터를 빠르게 접근할 수 있는 위치에 저장하는 기술 - Q: 레이지 로딩이란?
A: 필요한 시점에 데이터를 로드하는 기법 - Q: 인덱싱의 목적은?
A: 데이터베이스 검색 속도를 향상시키기 위함 - Q: 코드 최적화란?
A: 프로그램의 실행 속도와 메모리 사용을 개선하는 과정 - Q: CDN이란?
A: 콘텐츠를 사용자와 가까운 서버에서 제공하는 네트워크
프로젝트 관리
- Q: 애자일과 워터폴의 차이는?
A: 애자일은 유연하고 반복적, 워터폴은 순차적이고 계획 중심적 - Q: 스프린트란?
A: 스크럼에서 정해진 기간 동안의 개발 주기 - Q: 번다운 차트란?
A: 남은 작업량을 시각화한 차트 - Q: 리스크 관리란?
A: 프로젝트의 위험 요소를 식별하고 대응하는 과정 - Q: 이슈 트래킹 시스템이란?
A: 프로젝트의 문제와 작업을 관리하는 시스템
소프트웨어 아키텍처
- Q: 모놀리식 아키텍처란?
A: 모든 기능이 하나의 애플리케이션에 통합된 구조
Claude
프로그래밍 기초
- 변수와 상수의 차이점은 무엇인가요? 변수는 값을 변경할 수 있지만, 상수는 한 번 assigned되면 값을 바꿀 수 없습니다.
- 객체 지향 프로그래밍(OOP)의 4대 원칙을 설명해주세요.
- 캡슐화: 데이터와 메서드를 하나의 단위로 묶음
- 상속: 부모 클래스의 특성을 자식 클래스가 물려받음
- 다형성: 같은 메서드가 다른 방식으로 작동
- 추상화: 복잡한 시스템을 단순화하여 표현
- 스택(Stack)과 큐(Queue)의 차이점은 무엇인가요? 스택은 LIFO(Last In First Out), 큐는 FIFO(First In First Out) 구조입니다.
- Call by Value와 Call by Reference의 차이점은? Call by Value는 값을 복사해 전달하고, Call by Reference는 메모리 주소를 직접 참조합니다.
- 인터프리터 언어와 컴파일러 언어의 차이점은? 인터프리터는 런타임에 코드를 한 줄씩 해석하고, 컴파일러는 전체 코드를 한 번에 기계어로 변환합니다.
자료구조
- 배열과 링크드 리스트의 장단점은?
- 배열: 랜덤 접근 빠름, 고정 크기
- 링크드 리스트: 동적 크기, 삽입/삭제 용이
- 해시 테이블의 작동 원리는? 키-값 쌍을 저장하며, 해시 함수로 데이터의 저장 위치를 결정합니다.
- 이진 트리의 순회 방법 3가지는? 전위, 중위, 후위 순회
- 그래프와 트리의 차이점은? 트리는 루트가 있고 사이클이 없는 특별한 그래프입니다.
- 시간 복잡도가 O(n log n)인 정렬 알고리즘은? 퀵 정렬, 머지 정렬, 힙 정렬
데이터베이스
- SQL과 NoSQL의 차이점은? SQL은 관계형, NoSQL은 비관계형 데이터베이스입니다.
- 인덱스의 장점은? 데이터 검색 속도를 향상시키고 성능을 최적화합니다.
- ACID 원칙이란? 데이터베이스 트랜잭션의 신뢰성을 보장하는 4가지 특성입니다.
- LEFT JOIN과 INNER JOIN의 차이? LEFT JOIN은 왼쪽 테이블의 모든 레코드를, INNER JOIN은 두 테이블의 일치하는 레코드만 반환합니다.
- 정규화의 목적은? 데이터 중복을 최소화하고 데이터 무결성을 유지합니다.
웹 개발
- RESTful API의 특징은? 자원 기반, 상태 비저장, HTTP 메서드 사용
- 쿠키와 세션의 차이점은? 쿠키는 클라이언트, 세션은 서버에 저장됩니다.
- HTTPS의 보안 메커니즘은? SSL/TLS 암호화 프로토콜을 사용해 데이터를 암호화합니다.
- 크로스 사이트 스크립팅(XSS) 공격이란? 악성 스크립트를 웹 페이지에 주입하는 보안 취약점입니다.
- SPA(Single Page Application)의 장단점은? 장점: 빠른 사용자 경험, 단점: SEO 최적화 어려움
네트워크
- TCP와 UDP의 차이점은? TCP는 연결 지향, 신뢰성 보장, UDP는 비연결, 빠른 속도
- HTTP 상태 코드 분류는? 1xx: 정보, 2xx: 성공, 3xx: 리다이렉션, 4xx: 클라이언트 오류, 5xx: 서버 오류
- DNS의 역할은? 도메인 이름을 IP 주소로 변환합니다.
- 로드 밸런싱이란? 네트워크 트래픽을 여러 서버에 분산시키는 기술입니다.
- OSI 7계층이란? 네트워크 통신의 표준 모델로 7개 계층으로 구성됩니다.
보안
- 암호화의 대칭키와 비대칭키 차이점은? 대칭키는 동일한 키, 비대칭키는 공개키와 개인키를 사용합니다.
- SQL 인젝션 공격 방어 방법은? prepared statement 사용, 입력값 검증
- CSRF 공격이란? 사용자의 의도와 무관한 요청을 강제로 보내는 공격입니다.
- JWT(JSON Web Token)의 구조는? Header, Payload, Signature로 구성됩니다.
- 패스워드 해싱의 중요성은? 원문을 복원할 수 없도록 안전하게 저장하기 위함입니다.
프로그래밍 언어 기초
- 클로저(Closure)란? 외부 변수를 참조하는 함수 내부의 함수입니다.
- 제네릭 프로그래밍의 장점은? 타입에 독립적인 코드 작성이 가능합니다.
- 메모리 누수의 원인은? 불필요한 참조, 메모리 해제 누락 등입니다.
- 스레드와 프로세스의 차이점은? 프로세스는 독립된 메모리 공간, 스레드는 같은 메모리 공간을 공유합니다.
- 컴파일 타임 다형성과 런타임 다형성은? 컴파일 타임: 오버로딩, 런타임: 오버라이딩
소프트웨어 개발 프로세스
- 애자일 방법론의 특징은? 유연성, 점진적 개발, 고객 협업 중시
- CI/CD의 개념은? 지속적 통합(CI)과 지속적 배포(CD)를 의미합니다.
- 코드 리뷰의 목적은? 코드 품질 향상, 버그 발견, 지식 공유
- 테스트 주도 개발(TDD)이란? 테스트 코드를 먼저 작성하고 실제 코드를 개발하는 방법입니다.
- 기술 부채(Technical Debt)란? 빠른 개발을 위해 잠정적으로 발생하는 코드 품질 문제입니다.
개발 도구 및 환경
- Git의 브랜치 전략은? Git Flow, GitHub Flow 등 다양한 브랜치 관리 방법이 있습니다.
- 도커(Docker)의 장점은? 일관된 개발 환경, 이식성, 효율적인 리소스 사용
- 마이크로서비스 아키텍처란? 작고 독립적인 서비스들로 애플리케이션을 구성하는 방식입니다.
- 깃허브 액션(GitHub Actions)의 용도는? 자동화된 CI/CD 파이프라인 구축
- 가상환경의 필요성은? 프로젝트별 독립된 개발 환경 구축
알고리즘 및 문제 해결
- 시간 복잡도 O(1), O(n), O(log n), O(n^2)의 차이? 데이터 크기에 따른 알고리즘 성능 차이를 나타냅니다.
- 재귀 함수의 장단점은? 장점: 코드 간결, 단점: 메모리 오버헤드
- 그리디 알고리즘의 특징은? 매 순간 최적의 선택을 하는 알고리즘입니다.
- 동적 계획법(DP)이란? 복잡한 문제를 작은 하위 문제로 나누어 해결하는 방법입니다.
- 백트래킹 알고리즘의 개념은? 모든 가능한 경우의 수를 탐색하는 알고리즘입니다.
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 국민은행 대학생 봉사단 면접 예상질문 정리(최종합격자& (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://codebeautify.org/jsonviewer
출처: iOS 프로그래밍 실무 강의자료