신입 개발자로 취업하려고 하는 데 면접 때 가장 많이 듣는 질문과 답변을 알려줘
wrtn.ai 답변
아래에는 신입 개발자로서 면접에서 자주 물어보는 질문들과 그에 대한 간략한 답변을 작성해봤습니다.
-
질문: 자신을 간략하게 소개해주세요. 답변: 저는 (대학명)에서 컴퓨터 공학을 전공했으며, (사용 가능한 프로그래밍 언어)를 주로 사용합니다. 학교에서 진행한 프로젝트나 개인적으로 진행한 프로젝트를 통해 실제 개발 경험을 쌓았습니다.
-
질문: 어떤 프로그래밍에 능숙하신가요? 답변: 저는 (능숙한 프로그래밍 언어)에 대해 깊이 있게 공부했고 이를 활용한 여러 프로젝트를 해 보았습니다.
-
질문: 소프트웨어 개발에서 가장 중요하다고 생각하는 것은 무엇인가요? 답변: 저는 팀워크와 효율적인 커뮤니케이션을 중요하게 생각합니다. 또한 사용자를 위한 개발이라는 마인드를 가지고 있습니다.
-
질문: 최근에 참여했던 프로젝트에 대해 설명해주세요. 답변: (당신이 최근에 참여했던 프로젝트에 대한 설명을 제공해주세요). 이는 당신의 기획력, 창의력 그리고 문제 해결 능력을 보여줄 수 있는 기회입니다.
-
질문: 어떤 개발 도구나 기술을 사용해 본 경험이 있나요? 답변: 저는 (당신이 사용해 본 개발 도구나 기술)을 사용한 경험이 있습니다. 이를 통해 효과적인 개발을 수행했습니다.
-
질문: 앞으로 어떤 개발자가 되고 싶으신가요? 답변: 저는 사용자와 시장의 필요성을 끊임없이 연구하는 개발자가 되고 싶습니다. 또한, 계속해서 새로운 기술을 배워 나가는 성장하는 개발자가 되고 싶습니다.
이러한 질문들은 면접관이 신의 커뮤니케이션 능력과 문제 해결 능력을 평가하는 데 사용됩니다. 따라서 이에 대한 준비를 철저히 해야 합니다.
Swift 문법 VS Kotlin 문법
항목 | Swift | Kotlin |
---|---|---|
변수 선언 | 변경 가능: var, 변경 불가능: let | 변경 가능: var, 변경 불가능: val |
Null 가능성 | 옵셔널을 통한 Null 가능성 표현 | Null 가능성을 타입 시스템에 통합 |
클래스 정의 | class 키워드 사용 | class 키워드 사용 |
함수 선언 | func 키워드 사용 | fun 키워드 사용 |
상수 선언 | let 키워드 사용 | val 키워드 사용 |
문자열 템플릿 | () 문법 사용 | $ 또는 ${} 문법 사용 |
배열 선언 | [] 문법 사용 | arrayOf 함수를 이용한 문법 사용 |
딕셔너리 선언 | [:] 문법 사용 | mapOf 함수를 이용한 문법 사용 |
범위 정의 | …, ..< 사용 | .. 사용 |
예외 처리 | do, try, catch 문 사용 | try, catch 문 사용 (체크 예외 없음) |
cross platform으로 앱을 개발할 때 RN과 Flutter의 장단점
항목 | React Native | Flutter |
---|---|---|
개발 언어 | JavaScript | Dart |
개발 회사 | ||
성능 | 네이티브에 가까운 성능 | 네이티브와 비슷한 성능 |
UI 구성 | 네이티브 컴포넌트 사용 | 위젯 시스템 사용 |
학습 곡선 | 비교적 낮음 (많은 개발자가 JS에 익숙함) | 비교적 높음 (Dart에 익숙한 개발자가 적음) |
코드 재사용 | 가능 | 가능 |
커뮤니티 지원 | 강력 (오래된 기술) | 점점 강해지는 중 (신생 기술) |
대표 사례 | Facebook, Instagram, Airbnb 등 | Google Ads, Alibaba, Reflectly 등 |
Hot Reload | 지원 | 지원 |
사람인 기준 공고가 많은 기술스택
자신의 이름 10번 출력하기
// for-loop를 시작합니다. '_'는 반복 변수로, 이 경우에는 사용되지 않습니다.
for _ in 1...10 {
// "Choi"라는 문자열을 콘솔에 출력합니다. 이 작업을 10번 반복하게 됩니다.
print("Choi")
}
for (i in 1..10) {
println("Choi")
}
for (int i = 0; i < 10; i++) {
System.out.println("Choi");
}
for (let i = 0; i < 10; i++) {
console.log("Choi");
}
Swift의 중요한 문법을 이해할 수 있는 소스를 작성해줘
// 변수 선언: var 키워드를 사용해 변수를 선언합니다. 값은 변경이 가능합니다.
var name = "Choi"
// 상수 선언: let 키워드를 사용해 상수를 선언합니다. 한 번 할당된 값은 변경이 불가능합니다.
let birthYear = 1990
// 함수 선언: func 키워드를 사용해 함수를 선언합니다.
func greet(person: String) -> String {
// 문자열 보간: \(변수명) 형태로 문자열 내에 변수를 삽입할 수 있습니다.
return "Hello, \(person)!"
}
// 함수 호출: 함수명과 함께 괄호 안에 인자를 전달해 함수를 호출합니다.
let greeting = greet(person: name)
// 조건문: if-else 문을 사용해 조건에 따른 로직을 작성할 수 있습니다.
if birthYear < 2000 {
print("\(name) is a 90's kid.")
} else {
print("\(name) is a 2000's kid.")
}
// 배열: 여러 값을 한 번에 저장할 수 있는 컬렉션 타입입니다.
var numbers = [1, 2, 3, 4, 5]
// for-in 문: 컬렉션 내의 각 요소에 대해 반복 작업을 수행합니다.
for number in numbers {
print("Number is \(number)")
}
// 옵셔널: 값이 있을 수도, 없을 수도 있는 상황을 표현할 수 있습니다.
var optionalString: String? = "Hello"
// 옵셔널 바인딩: 옵셔널의 값을 안전하게 추출하는 방법입니다.
if let unwrappedString = optionalString {
print("Unwrapped string is \(unwrappedString)")
} else {
print("The string is nil")
}
Swift 언어의 문법을 중요한 순서대로 설명해줘
- 변수와 상수 선언: Swift에서는
var
키워드를 사용해 변수를,let
키워드를 사용해 상수를 선언합니다.
var name = "Choi" // 변수
let birthYear = 1990 // 상수
- 타입 어노테이션: Swift는 타입 추론을 지원하지만, 필요에 따라 변수나 상수의 타입을 명시적으로 선언할 수 있습니다.
var name: String = "Choi" // String 타입 변수
let birthYear: Int = 1990 // Int 타입 상수
- 함수 선언 및 호출: Swift에서는
func
키워드를 사용해 함수를 선언하고, 함수 이름과 괄호를 사용해 호출합니다.
func greet(name: String) -> String {
return "Hello, \(name)"
}
let greeting = greet(name: "Choi") // 함수 호출
- 조건문: Swift는
if
문을 사용해 조건에 따른 로직을 작성할 수 있습니다.
if birthYear < 2000 {
print("\(name) is a 90's kid.")
} else {
print("\(name) is a 2000's kid.")
}
- 반복문: Swift는
for-in
문을 사용해 컬렉션 내의 각 요소에 대해 반복 작업을 수행합니다.
var numbers = [1, 2, 3, 4, 5]
for number in numbers {
print("Number is \(number)")
}
- 옵셔널: Swift는 값이 있을 수도, 없을 수도 있는 상황을 표현하는 옵셔널 타입을 제공합니다. 옵셔널은
?
를 사용해 선언하며, 옵셔널 바인딩(if let
)이나 강제 추출(!
)을 통해 값에 접근할 수 있습니다.
var optionalString: String? = "Hello"
if let unwrappedString = optionalString {
print("Unwrapped string is \(unwrappedString)")
} else {
print("The string is nil")
}
함수형 언어가 어떤 특징을 가지고 있는지 예를들어 설명해줘.
함수형 프로그래밍 언어는 몇 가지 중요한 특징을 가지고 있습니다:
-
불변성(Immutability): 함수형 프로그래밍에서는 데이터의 상태를 변경하지 않습니다. 대신, 변경된 상태를 가진 새로운 객체를 생성합니다. 이로 인해 프로그램의 복잡성이 줄어들고, 코드의 예측 가능성과 안정성이 향상됩니다.
-
순수 함수(Pure Functions): 순수 함수는 동일한 입력에 대해 항상 동일한 출력을 반환하며, 부작용(side effects)가 없습니다. 이는 테스트와 디버깅을 쉽게 만들고, 코드의 재사용성을 높입니다.
-
고차 함수(Higher-Order Functions): 함수형 프로그래밍에서는 함수를 다른 함수의 인자로 전달하거나 함수에서 함수를 반환할 수 있습니다. 이를 통해 코드의 재사용성이 높아지며, 복잡한 연산을 간단하게 표현할 수 있습니다.
-
재귀(Recursion): 함수형 프로그래밍에서는 반복문 대신 재귀를 사용합니다. 이는 코드의 가독성을 높이며, 알고리즘을 더 명확하게 표현할 수 있게 합니다.
-
지연 계산(Lazy Evaluation): 함수형 언어는 필요할 때까지 표현식 평가를 미룰 수 있습니다. 이를 통해 무한한 데이터 구조를 다루거나, 성능 최적화를 할 수 있습니다.
박스오피스 앱 만들기 (영화 순위 정보)
{
"boxOfficeResult": {
"boxofficeType": "일별 박스오피스",
"showRange": "20240306~20240306",
"dailyBoxOfficeList": [
{
"rnum": "1",
"rank": "1",
"rankInten": "0",
"rankOldAndNew": "OLD",
"movieCd": "20234675",
"movieNm": "파묘",
"openDt": "2024-02-22",
"salesAmt": "1646514458",
"salesShare": "62.7",
"salesInten": "-150610462",
"salesChange": "-8.4",
"salesAcc": "63426452903",
"audiCnt": "174679",
"audiInten": "-15860",
"audiChange": "-8.3",
"audiAcc": "6606398",
"scrnCnt": "2021",
"showCnt": "7646"
},
{
"rnum": "2",
"rank": "2",
"rankInten": "0",
"rankOldAndNew": "OLD",
"movieCd": "20236295",
"movieNm": "듄: 파트2",
"openDt": "2024-02-28",
"salesAmt": "534462770",
"salesShare": "20.4",
"salesInten": "55456524",
"salesChange": "11.6",
"salesAcc": "10582691576",
"audiCnt": "45584",
"audiInten": "5110",
"audiChange": "12.6",
"audiAcc": "951050",
"scrnCnt": "990",
"showCnt": "2658"
},
{
"rnum": "3",
"rank": "3",
"rankInten": "39",
"rankOldAndNew": "OLD",
"movieCd": "20236732",
"movieNm": "가여운 것들",
"openDt": "2024-03-06",
"salesAmt": "128182104",
"salesShare": "4.9",
"salesInten": "127607804",
"salesChange": "22219.7",
"salesAcc": "186024709",
"audiCnt": "13536",
"audiInten": "13480",
"audiChange": "24071.4",
"audiAcc": "18975",
"scrnCnt": "471",
"showCnt": "838"
},
{
"rnum": "4",
"rank": "4",
"rankInten": "8",
"rankOldAndNew": "OLD",
"movieCd": "20234789",
"movieNm": "패스트 라이브즈",
"openDt": "2024-03-06",
"salesAmt": "71103168",
"salesShare": "2.7",
"salesInten": "66201968",
"salesChange": "1350.7",
"salesAcc": "134675834",
"audiCnt": "8376",
"audiInten": "7826",
"audiChange": "1422.9",
"audiAcc": "15009",
"scrnCnt": "606",
"showCnt": "1112"
},
{
"rnum": "5",
"rank": "5",
"rankInten": "-1",
"rankOldAndNew": "OLD",
"movieCd": "20236180",
"movieNm": "웡카",
"openDt": "2024-01-31",
"salesAmt": "59841799",
"salesShare": "2.3",
"salesInten": "-5508882",
"salesChange": "-8.4",
"salesAcc": "31923696035",
"audiCnt": "6263",
"audiInten": "-634",
"audiChange": "-9.2",
"audiAcc": "3319947",
"scrnCnt": "530",
"showCnt": "881"
},
{
"rnum": "6",
"rank": "6",
"rankInten": "-3",
"rankOldAndNew": "OLD",
"movieCd": "20247074",
"movieNm": "건국전쟁",
"openDt": "2024-02-01",
"salesAmt": "46281334",
"salesShare": "1.8",
"salesInten": "-26199339",
"salesChange": "-36.1",
"salesAcc": "10374706987",
"audiCnt": "5591",
"audiInten": "-2855",
"audiChange": "-33.8",
"audiAcc": "1114199",
"scrnCnt": "397",
"showCnt": "520"
},
{
"rnum": "7",
"rank": "7",
"rankInten": "-2",
"rankOldAndNew": "OLD",
"movieCd": "20247076",
"movieNm": "귀멸의 칼날: 인연의 기적, 그리고 합동 강화 훈련으로",
"openDt": "2024-02-14",
"salesAmt": "28977400",
"salesShare": "1.1",
"salesInten": "5137800",
"salesChange": "21.6",
"salesAcc": "5302024000",
"audiCnt": "3021",
"audiInten": "658",
"audiChange": "27.8",
"audiAcc": "466199",
"scrnCnt": "174",
"showCnt": "268"
},
{
"rnum": "8",
"rank": "8",
"rankInten": "0",
"rankOldAndNew": "NEW",
"movieCd": "19970037",
"movieNm": "비트",
"openDt": "1997-05-03",
"salesAmt": "19639500",
"salesShare": "0.7",
"salesInten": "19639500",
"salesChange": "100",
"salesAcc": "29306600",
"audiCnt": "2745",
"audiInten": "2745",
"audiChange": "100",
"audiAcc": "4306",
"scrnCnt": "71",
"showCnt": "154"
},
{
"rnum": "9",
"rank": "9",
"rankInten": "0",
"rankOldAndNew": "NEW",
"movieCd": "20230614",
"movieNm": "대결! 애니메이션",
"openDt": "2024-03-06",
"salesAmt": "13590263",
"salesShare": "0.5",
"salesInten": "13590263",
"salesChange": "100",
"salesAcc": "30566263",
"audiCnt": "2122",
"audiInten": "2122",
"audiChange": "100",
"audiAcc": "4244",
"scrnCnt": "103",
"showCnt": "170"
},
{
"rnum": "10",
"rank": "10",
"rankInten": "-3",
"rankOldAndNew": "OLD",
"movieCd": "20231415",
"movieNm": "소풍",
"openDt": "2024-02-07",
"salesAmt": "10707600",
"salesShare": "0.4",
"salesInten": "-2721900",
"salesChange": "-20.3",
"salesAcc": "2931893449",
"audiCnt": "1274",
"audiInten": "-278",
"audiChange": "-17.9",
"audiAcc": "327321",
"scrnCnt": "87",
"showCnt": "96"
}
]
}
}
출처 : 영화진흥위원회 일별 오피스 OPEN API
JSON 데이터를 가독성이 좋게 수정하기
Code beutyfi 사이트를 이용하면 JSON 데이터를 가독성이 좋게 수정할 수 있다.
tree view
Swift 구조체 형식으로 수정
struct BoxOfficeResult: Codable {
let officeType: String
let showRange: String
let dailyBoxOfficeList: [DailyBoxOffice]
struct DailyBoxOffice: Codable {
let rnum: String
let rank: String
let rankInten: String
let rankAndNew: String
let movie: String
let openDt: String
let salesAmt: String
let salesShare: String
let salesInten: String
let salesChange: String
let salesAcc: String
let audiCnt: String
let audiInten: String
let audiChange: String
let audiAcc: String
let scrCnt: String
let showCnt: String
}
}
Java의 클래스 형식으로 수정
import java.util.List;
public class BoxOfficeResult {
private String boxofficeType;
private String showRange;
private List<DailyBoxOfficeList> dailyBoxOfficeList;
// Getters and Setters
public static class DailyBoxOfficeList {
private String rnum;
private String rank;
private String rankInten;
private String rankOldAndNew;
private String movieCd;
private String movieNm;
private String openDt;
private String salesAmt;
private String salesShare;
private String salesInten;
private String salesChange;
private String salesAcc;
private String audiCnt;
private String audiInten;
private String audiChange;
private String audiAcc;
private String scrnCnt;
private String showCnt;
// Getters and Setters
}
}
출처
- Smile Han의 iOS 프로그래밍 실무, 한성현(출판 예정), PPT로 제공
- Do it! 스위프트로 아이폰 앱 만들기 입문(개정 7판)(이지스퍼블리싱,송호정, 이범근, 2023.1)
- 핵심만 골라 배우는 SwiftUI 기반의 iOS 프로그래밍(제이펍, 닐 스미스, 2023.12)
- https://www.techotopia.com/index.php/IOS_iPhone_iPad_eBooks
- 스위프트 프로그래밍(Swift 5) 3판(한빛미디어, 야곰, 2019.10)
- 꼼꼼한 재은 씨의 스위프트 기본편 (루비페이퍼, 이재은, 2018.05)
- 꼼꼼한 재은 씨의 스위프트 실전편 (Swift) (루비페이퍼, 이재은, 2018.08)
- 꼼꼼한 재은 씨의 Swift 문법편 (루비페이퍼, 이재은, 2017.12)