UMC/iOS 교육

[iOS] 1주차

gom1n 2022. 3. 14. 03:25

INDEX

  • 절차 지향 언어 & 객체 지향 언어
  • [swift] Optional
  • UIKit
  • 변수 선언
  • 함수
  • Struct & Class
  • What is "init()" ?
  • Break Point

절차 지향 & 객체 지향

절차 지향 프로그래밍

절차 지향 프로그래밍이란 코드가 위에서 아래로 물 흐르듯이 순차적으로 처리되는 프로그래밍이다. 때문에 코드 전체가 유기적으로 연결되어있고, 컴퓨터의 처리구조와 비슷해 실행속도가 빠른 편이다. 대표적인 절차 지향 언어에는 C언어가 있겠다.

 

그러나, 실행 순서가 정해져있으므로 만약 코드의 순서가 바뀌면 동일한 결과를 얻지 못하는 경우가 생길 수 있다는 단점이 있다. 

또한 유지보수가 어렵다는 치명적인 단점이 있어, 이를 보완하기 위해 모듈화, 캡슐화하여 개념적으로 접근하는 형태를 갖는 객체 지향 프로그래밍이 탄생했다.

 

객체 지향 프로그래밍

객체 지향이란 실제 세계를 모델링하여 소프트웨어를 개발하는 방법이다. 

객체지향 프로그래밍에서는 데이터와 절차를 하나의 덩어리로 묶어서 다룬다. 

 

객체 지향 프로그래밍의 3대 특성은 다음과 같다.

- 캡슐화(encapsulation)

데이터와 알고리즘(코드)가 하나로 묶여저 있으며, 데이터를 감추고 외부와의 소통은 메소드로만 통해 가능하다.

- 상속(Inheritance)

이미 작성된 클래스를 받아 새로운 클래스를 생성하는 기법

- 다형성 (Polymorphism)

다형성이란 하나의 이름으로 많은 상황에 대처하는 기법이다. 개념적으로 동일한 함수들에 똑같은 이름을 부여하므로 코드가 더 간단해지는 효과가 있다.

 

위의 특성들로 인해 객체지향 프로그래밍은 코드 재활용성이 높고, 따라서 유지보수가 수월해진다는 장점을 가진다.


[swift] Optional

swift에서 Optional은 '?'을 통해 표현되는데, 의미는 다음과 같다

-> 이 변수에는 값이 들어갈 수도 있고, 아닐 수도 있다. (nil)

let str: String?

 

Wrapping

Optional 타입은 기본적으로 wrap되어있는 상태이다. 

즉, Optional으로 선언된 변수들은 wrap되어있기 때문에 값이 있는 건 지, nil인 것인 지 모르는 상태이다.

따라서 변수 안에 값이 있다고 해도 다음 코드는 이렇게 출력이 된다. 

var str: String? = "Hello"
print(str)
// 출력결과: Optional("Hello")

 

How to Unwrap?

Wrapping된 Optional을 벗기는 방법에는 크게 두가지가 있다.

 

- Forced Unwrapping

무조건 변수가 있는 상황이 보장될 경우, '!' 을 써 unwrap할 수 있다.

그러나 만약 변수가 nil 인 상황에서 !을 쓴다면 에러가 난다. 따라서 if문으로 예외처리를 꼭 해줘야한다.

let str: String? = nil
if(str != nil)	print(str!)

 

- Optional Binding

Optional Binding은 Optional으로 선언된 변수에 값이 있는 지 없는 지를 확인해주는 기능이다.

if let 조건문이라는 독특한 형태를 사용한다.

// Optional type으로 선언한 myNumber
let myNumber: Int? = 1234
if let actualNumber = myNumber {
 print(“\(myNumber)은 실제로 \(actualNumber)입니다.”)
} else {
 print(“\(myNumber)는 변환될 수 없습니다.”)
}
// 출력 결과 : Optional(1234)은 실제로 1234입니다.
print(actualNumber) // error

 

Optional Binding은 nil체크를 하는 동시에, nil이 아니라면 새로운 변수를 만드는 두가지 기능을 수행한다.


UIKit

UIKit란?

iOS 어플리케이션의 사용자 인터페이스를 구현하고 이벤트를 관리하는 프레임워크이다.

- 제스쳐 처리, 애니메이션, 그림 그리기 등 사용자 이벤트 처리를 위한 클래스를 포함한다.

- 테이블뷰, 슬라이더, 얼럿 창, 버튼, 텍스트필드 등 어플리케이션의 화면을 구성하는 요소를 포함한다.

- UIKit 클래스 중, UIResponder에서 파생된 클래스나 사용자 인터페이스에 관련된 클래스는, 어플리케이션의 메인 스레드에서만 사용해야 한다.

- iOS와 tvOS에서 사용한다.

 

구성

사용자 인터페이스

  • View and Control : 화면에 콘텐츠 표시
  • View Controller : 사용자 인터페이스 관리
  • Animation and Haptics : 애니메이션과 햅틱을 통한 피드백 제공
  • Window and Screen : 뷰 계층을 위한 윈도우 제공

 

사용자 액션

  • Touch, Press, Gesture: 제스처 인식기를 통한 이벤트 처리 로직
  • Drag and Drop: 화면 위에서 드래그 앤 드롭 기능
  • Peek and Pop: 3D 터치에 대응한 미리 보기 기능
  • Keyboard and Menu: 키보드 입력을 처리 및 사용자 정의 메뉴 표시

변수 선언

변수는 var, 상수는 let 이라는 키워드를 사용하여 선언한다.

//상수
let a: Int = 123
//변수
var b: Int = 123​

 

타입 추론

또한 swift에서는 타입 없이 변수를 선언할 수 있다.

let val = 123
//자동으로 val이 int형임을 추론한다.

 

let 과 var의 차이

- let : 선언시 처음입력된 데이터만 저장.
- var : 선언시 처음입력된 데이터 이후 추가로 입력가능하며 마지막에 입력된 데이터가 최종 데이터가 된다.

함수

간단한 예제로 쉽게 이해 가능하다.

 

예1)

func sum(a: Int, b: Int) -> Int {
	return a + b
}

​위 함수는 int값을 리턴하는 sum함수이다. 

 

예2)

func multiple(a: Int, b:Int) -> Int {	a * b	}

위 함수는 int값을 리턴하는 multiple함수인데, 함수가 간단하다면 위와 같이 한 줄만 적어도 된다.


Struct & Class

 

Struct (구조체)

struct Person {
	let a: Int
	let b: Int
}

Class

class Operator {
	let a: Int
	let b: Int
}

그러나 이렇게만 하면 오류가 난다. 반드시 init()을 선언해주어야 한다.


What is "init()" ?

 

클래스, 구조체, 열거형 등의 인스턴스를 사용하기 위해서는 초기화가 필수이다.

초기화를 하는 방법에는 두 가지가 있다.

1. 저장 프로퍼티에 초기값 지정

2. init()을 사용한 초기화

이 중 이니셜라이저(initializer)를 활용해 객체를 초기화시켜보자.

 

형태

init() {
  // 이 곳에서 초기화를 구현
}

 

클래스 예제)

class Operator {
	let a: Int
	let b: Int
    
    init(a: Int, b: Int) {
    	self.a = a
        self.b = b
    }
}

- 상수, 변수 상관없이 property에 값을 할당 가능하다.

- 만약 Optinal인 property가 있다면, 초기값이 없어도 된다. 자동으로 nil로 초기화된다.

 

+) 이니셜라이저 위임(initializer delegation)

이니셜라이저는 인스턴스의 초기화를 수행하기 위해 다른 이니셜라이저를 호출할 수 있으며, 이는 코드 중복을 예방할 수 있다.

struct Frame { 
	var x: Int
	var y: Int
    
    init(x: Int, y: Int) {
    	self.x = x
        self.y = y
    }
    init(y: Int) {
    	self.init(x: 0, y: y)	//다른 이니셜라이저를 호출
    }
}

 

+) 구조체에서의 이니셜라이저는 두 가지가 제공된다.

1. 멤버와이즈 이니셜라이저: property를 매개변수로 가지는 이니셜라이저

2. 기본 이니셜라이저: 매개변수가 없는 이니셜라이져


Break Point

break point의 사전적 의미

1. 중지점, 중단점

2. (일시) 정지 지점

 

말 그대로 멈추는 지점으로써, 디버깅할 때 유용하게 쓰일 기능이다.


REFERENCE

절차지향&객체지향

https://brownbears.tistory.com/407

 

절차지향 VS 객체지향

절차지향(Procedural Programming)이란? 절차지향 프로그래밍이란 물이 위에서 아래로 흐르는 것처럼 순차적인 처리가 중요시 되며 프로그램 전체가 유기적으로 연결되도록 만드는 프로그래밍 기법

brownbears.tistory.com

Optional

https://medium.com/@codenamehong/swift-optional-1-54ae4d37ee09

 

Swift Optional (1)

Optionals 기본 개념

medium.com

UIKit

https://gwangyonglee.tistory.com/34

 

[iOS] Cocoa Touch, Foundation, UIKit Framework에 대해서

안녕하세요. 이번 글에서는 iOS 애플리케이션 개발환경 토대인 코코아 터치 프레임워크와 그 하위 레벨 프레임워크인 UIKit, Foundation에 대해 알아보려고 합니다. Cocoa Touch Framework https://developer.appl.

gwangyonglee.tistory.com

init

https://medium.com/@jgj455/%EC%98%A4%EB%8A%98%EC%9D%98-swift-%EC%83%81%EC%8B%9D-%EC%B4%88%EA%B8%B0%ED%99%94-%EA%B0%92-%ED%83%80%EC%9E%85%EC%9D%98-initializer-1e3d329050c6

 

오늘의 Swift 상식 (초기화, 값 타입의 Initializer)

초기화

medium.com


UIComponents

1. TextView

TextField vs. TextView

Text Field: 한줄로만 작성 가능
Text View: 여러줄로 작성 가능하고 텍스트가 길어지면 자동으로 스크롤 기능을 제공

 

2. scroll view

3. navigation bar

4. button

5. image view