3주차 시험에 대한 오답 노트를 작성하면서
개념들을 다시 정리하고 부족한 부분을 보완하겠어요 !
⭐️ : 정답 혹은 더 나은 답
❌ : 내가 쓴 오답
[ 1번 문제 ]
랜덤 값을 이용해 배열의 엘리먼트 출력하기
var result = array[num % 4]
//⭐️var result = array[num % array.count]
: 나는 배열 속 엘리먼트 갯수가 4개라 %4를 썼지만
.count를 사용하는게 유연성에 좋음
[ 4번 문제 ]
배열 속 가장 큰 숫자 찾기
var numArray = [4, 0, 1, 7, 9, 3]
func findMaxNumber(array: [Int]) -> Int{
var maxNum = 0
for i in numArray{
if i > maxNum{
maxNum = i
}
}
return maxNum
}
// 함수의 실행
findMaxNumber(array: numArray)
// 오답 ❌
// 대략적인 힌트
//func findMaxNumber(array: ) -> Int{
// var maxNum = 0
// for i in numArray {
// if numArray[i] > maxNum {
// maxNum = numArray[i]
// }
// }
// return maxNum
//}
: 다시 풀어보니 풀렸던 문제
[ 5번 문제 ]
요소 변경
var alphabetArray = ["A", "B", "C", "D", "E", "F", "G"]
// 아래 배열을 이용
["x", "y", "z"]
// 1. 서브스크립트
//오답 ❌ alphabetArray.insert(contentsOf: ["x", "y", "z"], at: 0)
// ⭐️
alphabetArray[0...2] = ["x", "y", "z"]
// 2. 정식 문법
// ⭐️
alphabetArray.replaceSubrange(0...2, with: ["x", "y", "z"])
: 어렵게 생각하다가 헷갈린,,,
- count: 배열에 있는 요소의 개수를 반환함.
- isEmpty: 배열이 비어있는지 여부를 나타냄. 비어있으면 true, 아니면 false.
- first: 배열의 첫 번째 요소를 반환함. 배열이 비어있으면 nil.
- append(요소): 배열의 끝에 요소를 추가함.
- insert(요소, at:인덱스): 배열의 특정 인덱스에 요소를 삽입함.
- remove(at:인덱스): 배열의 특정 인덱스에 있는 요소를 삭제하고, 삭제된 요소를 반환함.
- array[index] = newValue: 배열의 특정 인덱스에 있는 값을 새로운 값으로 교체함.
[ 6번 문제 ]
해당 마지막 요소 삭제
var puppy = ["p", "u", "p", "p", "y"]
//❌
//var puppyResult = puppy.lastIndex(of: "p")
//puppy.remove(at: puppyResult!)
//⭐️
if let puppyResult = puppy.lastIndex(of: "p"){
puppy.remove(at: puppyResult)
}
// 배열 확인 및 출력
print(puppy)
: 옵셔널 타입을 항상 염두에 두기
[ 7번 문제 ]
value 출력
var dic = ["A": "Apple", "B": "Banana", "C": "City"]
var result2 = dic["A"]
if let result3 = result2{
print(result3)
}
//위에도 맞지만 아래처럼도 가능
// 딕셔너리의 결과값이 옵셔널 타입이기 때문에.. 옵셔널 바인딩과 합쳐서 작성⭐️
if let result2 = dic["A"] {
print(result2)
}
: 코드의 중복을 최소화!!!
[ 8번 문제 ]
소수 판별
func primeNumber(num: Int) {
for i in 2...num {
if num % i == 0{
print("소수가 아닙니다.")
break
}else{
print("소수입니다.")
break
}
}
// 더 나은 코드 ⭐️
// for i in 2..<num {
// if num % i == 0 {
// print("소수가 아닙니다.")
// return
// }
// }
// print("소수입니다.")
}
: return을 활용해서 불필요한 else 절 줄이기
[ 9번 문제 ]
제어 전송문 설명
// 1.break문
// 반복문 for / while
// (가장 가까운) 반복문을 종료시킴
//⭐️ switch
// 해당하는 case문이 하나도 없을 때 입력하는 약속
// 4.return문
// 리턴값 있을 때
// ⭐️return 문 뒤의 표현식을 평가한 후, 그 값을 반환하면서 함수를 종료하고 벗어남
// 리턴값 없을 때
// 함수를 종료시킴
: 표현식 평가 -> 반환 -> 종료!
"표현식을 평가한다"는 말은
단순히 계산을 수행하거나, 변수의 값을 확인하거나, 함수를 호출하는 등의 작업을 통해 최종적인 결과 값을 얻는 과정을 의미!!!
[ 11번 문제 ]
열거형을 switch문으로 분기 처리하기
열거형 case 패턴
enum SiteLogin {
case google(email: String, password: String)
case facebook(email: String, password: String)
case naver(email: String, password: String)
}
var login1 = SiteLogin.google(email: "google@gmail.com", password: "0000")
// ⭐️⭐️⭐️ 스위치문으로 이메일과 비밀번호를 출력하는 코드를 완성
switch login1 {
case .google(email: let email, password: let password):
print("이메일 주소: \(email), 비밀번호: \(password)")
case .facebook(email: let email, password: let password):
print("이메일 주소: \(email), 비밀번호: \(password)")
case .naver(email: let email, password: let password):
print("이메일 주소: \(email), 비밀번호: \(password)")
}
:
[열거형 case 패턴]
케이스 내부에 구체적인 정보(연관값)가 들어 있고,
그 구체적인 정보를 꺼내서 활용하기 위해 변수에 바인딩해서 사용하는 패턴
[ let 변수이름 = 열거형 내부의 연관값 ]
[ 12번 문제 ]
클래스의 저장 속성
:
// let, var 데이터를 저장하는 것
// ⭐️ 인스턴스 내에 실제 데이터값을 저장할 수 있는 데이터 저장 공간 / 인스턴스 내의 변수(상수)
[ 13번 문제 ]
클래스의 계산 속성 :
// get을 통해 값을 받아오거니 set을 통해 값을 설정하는 것
// ⭐️
// 속성의 형태를 가진 실질적인 메서드 (실제 데이터 값은 없음)
// get블록(getter) / set블록(setter)가 존재
// 1) getter - 외부에서 인스턴스에 접근해서 값을 얻어가는 메서드 (필수/최소한)
// 2) setter - 외부에서 인스턴스에 접근해서 값을 셋팅하는 메서드 (선택)
[ 14번 문제 ]
클래스와 구조체의 차이
// 클래스는 상속 가능, 구조체는 상속 불가능
// ⭐️
// 실제로 디테일하게는 여러가지 차이점이 있지만, 아래 가장 중요한 차이점 2가지는
// 반드시 외우고 있어야 함
// 1) 상속 가능 여부
// (1) 클래스는 상속가능
// (2) 구조체는 상속 불가능
// 2) 메모리 저장의 차이
// (1) 클래스의 인스턴스는 Heap (참조 타입)
// (2) 구조체의 인스턴스는 Stack (값 타입)
확실히 강의에서 완전히 이해하고 넘어가지 못한 부분은
시험 문제에서 걸린다...!!!
복습을 철저히 해야할 것 같다
'iOS' 카테고리의 다른 글
Swift 입력 받기 (0) | 2024.09.08 |
---|---|
속성과 메서드를 붕어빵으로 아라보자 (0) | 2024.08.06 |
[앨런 Swift문법 마스터 스쿨] 열거형 case 패턴, 속성과 메서드 정리 복습! (2) | 2024.07.27 |
[앨런 swift문법 마스터 스쿨] 클래스, 초기화 함수 init, self (2) | 2024.07.22 |
[앨런 Swift문법 마스터 스쿨] 2주차 시험 오답 노트 (3) | 2024.07.20 |