본문 바로가기

IOS

나만의 iOS 앱 개발 입문 : iOS개발 강의 1주차

1주차 배운 것들

Xcode설치 / PlayGround / Swift / 상수와 변수 / 기본 데이터 타입 / 컬렉션 타입 / 함수 사용법 / 조건문 / 반복문 / 옵셔널 / 옵셔널 바인딩 / 구조체 / 클래스 / 초기화 구문 init / 프로퍼티 / 클래스와 구조체의 차이 / 상속 / 타입캐스팅 / assert 와 guard / 프로토콜 / 익스텐션 / 열거형/ 옵셔널 체이닝 / Try-Catch / 클로저 / 일급객체 / 고차함수
  Dart Swift
공통점 널(닐)세이프티와 옵셔널 기능(?,!)
타입 추론(타입 생략 가능)
등등 
주요 특징 - C언어의 문법과 거의 같으며 Java, C#, Javascript와 같은 기능적 스트럭쳐를 추가한 언어 -20년 이상 사용되며 Object-C가 언어사용빈도 3위에 오를 때쯤
앱스토어에 백만 개 이상의 앱이 Object-C로 작성되어 있었음.
- 2014.6 WWDC 통해 공개
- 세련된 문법
- 안전을 위한 설계(엄격한 타이핑)
- 함수형 프로그래밍
- Safe, Fast, Expressive(안전성, 신속성, 더 나은 표현성) 지향
- C기반 언어를 대체하기 위해 만들어짐
상수와 변수(변하지 않는 값, 변할 수 있는 값) 변수
- var : 해당 변수가 참조하고 있는 객체에 따라 타입이 결정
- dynamic : 하나의 변수가 여러 타입으로 변경되어야 할 때 사용

상수 
- const : 컴파일 시 상수화
const String name = 'jamescode';
- final : 런타임 시 상수화
변수
-var 변수명 : 타입

상수
-let 상수명 : 타입
기본 데이터 타입 -int : 정수
-double : 실수
-num : int와 double의 상위타입
-bool : 논리
-String : 문자열

+ 타입 추론 가능으로 타입 생략 가능
var age = 29; // int type
- Int : 64bit 정수형
- UInt : 부호가 없는 64bit 정수형(Unsign)
- Float : 32bit 부동 소수점(1은 1.0으로 자동 변환)
- Double : 64bit 부동 소수점(Float과 비슷하나 특별한 이유 없을 땐 Double사용 큰 숫자들을 보다 정확하게 표현이 가능하기 때문)
- Bool : true, false
- Character : 문자("a")
- String : 문자열("abc")
- Any : 모든 타입을 지칭하는 키워드

+ 타입 추론 가능으로 타입 생략 가능
var age = 29 //int type
컬렉션 타입(데이터들의 집합 묶음) List : 데이터 순서가 있고 중복 허용(배열), '[]'사용 
Set : 데이터 순서가 없고 중복 허용x , '{}'사용
Map : 키(key) 와 값(value)로 구성되며 키는 중복되지 않고 값은 중복 가능

Array : 데이터 타입의 값들을 순서대로 지정하는 리스트(배열)
Dictionary : 순서없이 키와 값 한 쌍으로 데이터를 저장하는 컬렉션 타입
Set : 같은 데이터 타입의 값을 순서없이 저장하는 리스트
함수 사용법
(작업의 가장 작은 단위이자 코드의 집합)
bool isNoble(int atomicNumber) {
  return _nobleGasses[atimicNumber] != null;
}

- 타입 생략 가능(권장x)

bool isNoble(int atomicNumber) => _nobleGasses[atimicNumber] != null;
}
- 하나의 표현식인 경우 약식 가능(화살표 표기문)

https://dart.dev/guides/language/language-tour#functions
func를 사용해 함수 선언

func greet(person: String, day: String) -> String {
return "Hello \(person), today is \(day)."
}
greet(person: "Bob", day: "Tuesday")

https://docs.swift.org/swift-book/GuidedTour/GuidedTour.html
조건문(주어진 조건에 따라 app을 다르게 동작하도록 하는 것) if, switch, assert, guard는 없음 if, switch, guard
반복문(반복적으로 코드가 실행되게 만드는 구문) for, for-in, while for-in, while, repeat-while

1. for-in (일정 횟수 동한 반복해야 하는 경우)
for 루프상수 in 순회대상 {
 //실행할 구문
}

2. while (일정 조건이 유지 되는 동안)
while 조건식 {
 //실행할 구문
}

3. repeat-while
repeat {
 //실행할 구문
} while 조건식
옵셔널(값이 있을 수도 있고 없을 수도 있다) null 
사용 허용 : ? , !

nil
사용 허용 : ? , !

옵셔널 바인딩 비슷 1.명시적 해제
- 강제 해제
var number: Int? = 3
print(number)   // 옵셔널 타입
print(number!)  // 옵셔널 강제 해제 
-> 강제 해제는 위험, 값이 nil것을 강제 해제 시 에러 발생해 프로그램 강제 종료됨.
- 비강제 해제(옵셔널 바인딩) (좀 더 안전)
if else , guard문으로 옵셔널 바인딩 가능

2.묵시적 해제
- 컴파일러에 의한 자동 해제(비교 연산자를 활용)
let value: Int? = 6
if value == 6 b{
 print("value가 6입니다.")
} else {
 print("value가 6이 아닙니다.")
}
- 옵셔널의 묵시적 해제(! 사용)
let string = "12" //12
var stringToInt: Int! = Int(string) //12
print(stringToInt + 1) //13
구조체 Dart Keyword에 없음 - 값 타입
- 구조체 변수를 새로운 변수에 할당할 때마다 새로운 구조체가 할당됨.
- 같은 구조체를 여러 개의 변수에 할당한 뒤 값을 변경해도 다른 변수에 영향을 주지 않음(값 자체를 복사)

struct 구조체 이름 {
 프로퍼티와 메서드
}
클래스 class 클래스 이름 {
 
}
참조타입, ARC로 메모리 관리

class 클래스 이름 {
 
}
클래스와 구조체 공통점  - 프로퍼티 정의 가능
 - 메소드 정의 가능
 - initializer 정의 가능
 - extention 가능
 - protocol 가능
초기화 구문 init
(클래스 구조체 또는 열거형의 인스턴스를 사용하기 위한 준비 과정)
@override
void initState() {
 super.initState();
}

StatefulWidget의 라이프 사이클
위젯 생성 시 처음 호출되는 메서드

initState에서 실행되면 좋은 것들
-생성된 위젯 인스턴스의 BuildContext에 의존적인 것들의 데이터 초기화
-동일 위젯트리내에 부모위젯에 의존하는 속성 초기화
-Stream구독, 알림변경 또는 위젯의 데이터 변경할 수 있는 다른 객체 핸들링
init(매개변수 : 타입, ...) {
 //프로퍼티 초기화
// 인스턴스 생성시 필요한 설정을 해주는 코드 작성

 

 

기존에 Dart언어 기반의 플러터를 배우던 중 주변의 용품들 전부 애플 제품을 쓰고 애플을 좋아하는 사람인지라 iOS 언어에 대해서 배우고 싶었기 때문에 Swift언어 입문을 가르치는 코스를 발견하게 되어 지원했습니다. 패스트캠퍼스에서 운영하는 '나만의 iOS 앱 개발 입문 : iOS개발 강의'를 국비지원 크레딧을 통해 거의 90%를 지원해 합리적인 가격에 일정 조건을 채우면 환급도 되기 때문에 망설임 없이 지원했습니다. 앞으로 5주간 배운 것들에 대해 포스팅할 예정이고 오늘은 1주차 배운 것들에 대한 회고를 작성해보려 합니다.

 

Swift 강의를 들으면서 익숙한듯 익숙하지 않다는 걸 느꼈습니다. 기존에 알고 있던 개념들이 있으나 아직 플러터도 완전히 다 써보지 못한 것들도 많아 작성하면서도 100% 비교하기 어려웠습니다. 분명 유사한 개념들이 무척 많았고 100%로 같은 형태는 아니지만 대응하는 개념들이 있다는 것도 알게 되었습니다. dart는 C언어 문법과 거의 같고 Swift는 C기반의 언어를 대체하기 위해 탄생한 만큼 대체로 비슷한 모습을 보이고 있음을 알 수 있었습니다. Dart는 OOP라고 불리는 객체지향 프로그래밍을 지향하고 Swift는 많은 프로그래밍 패러다임 중 객체지향형, 함수형, 프로토콜 지향 프로그래밍을 모두 다룰 수 있는 언어입니다. 하지만 iOS 프레임워크가 객체지향형 프로그래밍으로 구현되어 있어서, 객체 지향 프로그래밍을 하도록 권장한다고 해요.  객체지향, 함수형, 프로토콜 세 개념에 대해서 구분해서 알아두면 좋을 것 같습니다. 아래의 공식 문서를 통해 부족한 부분을 보충하면서 주차별 강의를 들을 수 있도록 해야할 것 같네요.

 

스위프트 공식 문서 한국어 : https://bbiguduk.gitbook.io/swift/welcome-to-swift/swift-about-swift