[iOS / Swift] iOS 메모리 구조와 앱 메모리
·
카테고리 없음
1. iOS 메모리 구조iOS에서 앱이 실행되면 메모리는 4가지 영역으로 나뉨메모리 영역하는 일예시Stack (스택)지역 변수 저장(자동 관리됨)함수 안에서 만든 변수 (`let`, `var`)Heap (힙)동적으로 할당되는 데이터 저장`class`인스턴스, `UIImage`등Date (데이터)전역 변수, static변수 저장`static var count = 0`Code (코드)실행할 코드 저장컴파일된 앱 코드 예제class Person { var name: String // Heap 영역에 저장됨 (동적 할당됨) init(name: String) { self.name = name }}func sayHello() { let greeting = "Hello" // S..
[iOS / Swift] 메모리 기초
·
Swift
우선 ARC를 공부하기 전에 메모리 구조를 알아야함. 처음 공부하는건데 와. 신난다. 후...1. 메모리 구조먼저 프로그램이 실행이 되면 OS는 메모리(RAM)에 이 프로그램을 위한 공간을 할당함그 공간은 코드, 데이터, 힙, 스택으로 나누어서 사용함1-1 코드 영역우리가 작성한 소스 코드가 기계어 형태로 저장됨 (기계어 : 0과 1)컴파일 타임에 결정되고, 중간에 코드가 변경되지 않도록 Read-Only 형태로 저장됨. 즉,코드 자체가 올라가는 영역앱의 기계어 코드(컴파일 결과물), 상수 문자열 같은 것들이 이곳에 저장됨수정이 불가능한 읽기 전용 메모리1-2 데이터 영역전역변수, static 변수가 저장됨프로그램의 시작과 동시에 할당되고, 프로그램이 종료되어야 메모리가 해제됨실행 중에 변수 값이 변경될..
[iOS / Swift] 객체 지향 프로그래밍
·
Swift/Swift 문법 정리
Swift에서 직접 타입을 만드는 방법: 개발자가 필요한 타입을 직접 만들게 되는데 열거형(Enum), 구조체(Struct), 클래스(Class)로 만들 수 있음 Swift의 프로그래밍 패러다임: Swift는 다양한 프로그래밍 패러다임을 지원하는 언어임객체지향 프로그래밍 `Object-Oriented Programming`(OOP)프로토콜 지향 프로그래밍 `Protocol-Oriented Programming`(POP)함수형 프로그래밍 `Functinal Programming`(FP)애플이 제공하는 프레임 워크는 객체지향으로 구현되어 있음. iOS의 앱개발을 공부할 때는 보통 객체지향부터 시작하는게 일반적임. 그렇다면 객체 지향은 무엇임??객체 지향 프로그래밍(OOP)이란?객체 지향 프로그래밍이란 프로그..
[iOS / Swift] IUO(Implicitly Unwrapped Optional)정리
·
Swift/Swift 문법 정리
1. `Int?`와 `Int!`의 차이`Int?`(Optional타입)값을 가지고 있거나(`nil`이 아님), `nil`일 수도 있는 타입임.값을 사용하려면 명시적으로 언래핑(옵셔널 바인딩 or 강제언래핑)을 해줘야함let a: Int? = 0print(a) // Optional(0)`Int!`(IUO타입)마치 일반 타입처럼 사용할 수 있는 옵셔널임자동으로 언래핑되지만, `nil`일 경우 런타임 에러가 발생함실수로 크래시를 일으킬 위험이 크기 때문에 되도록 사용을 안하는 것이 좋음let b: Int! = 0print(b) // 0 (자동 언래핑)2. IUO의 자동 언래핑 시점: IUO는 Non-Optional 타입으로 저장하거나 처리할 때 자동으로 언래핑 됨.let a: Int? = 0let b: Int..
[iOS / Swift] Storyboard 간단한 로그인 기능 구현(2) 코드 개선
·
Swift Study/Storyboard
지난번에 간단한 계산기앱 코드개선을 할 때 강제언래핑한 부분을 옵셔널 바인딩으로 변경하고 아이디와 패스워드를 입력하지 않았을 때알림창(경고창)을 띄우는 코드를 추가할 것임 이건 이전 계산기앱 코드개선과 마찬가지로 하면 됨.func showAlert(message: String) { let alert = UIAlertController(title: "알림", message: message, preferredStyle: .alert) let okAction = UIAlertAction(title: "확인", style: .default) alert.addAction(okAction) present(alert, animated: t..
[iOS / Swift] 함수 (Function) 정리
·
Swift/Swift 문법 정리
함수는 어떤 작업을 수행하는 코드 묶음임. Swift에서 함수는 코드의 재사용성을 높이고, 깔끔하게 관리하기 위해 필수적인 요소임.1. 함수의 기본 구조func 함수이름(매개변수: 매개변수 타입) -> 반환타입 { 실행될 코드}함수 이름은 Low Camel Case로 작성.매개변수(Parameter): 함수 내부에서 사용할 변수.반환 타입(Return Type): 함수가 결과로 반환하는 값의 타입.반환값이 없을 때는 `Void`(또는 생략 가능).예제로 가장 간단한 함수를 만들어 보겠음func sayHello() { print("Hello")}`sayHello`라는 함수를 만들었고 저 함수가 호출됐을 떄 실행되는 코드는 Hello라는 텍스트임. 호출 하는 방법은 아래와 같음sayHello() // ..
[iOS / Swift] Storyboard 간단한 계산기 만들기(3) 코드개선
·
Swift Study/Storyboard
지난 글에서 말했듯이 이번엔 값이 입력되지 않았을 때 경고창을 띄우는 기능을 추가해 볼것임.func showAlert(message: String) { let alert = UIAlertController(title: "알림", message: message, preferredStyle: .alert) let okAction = UIAlertAction(title: "확인", style: .default) alert.addAction(okAction) present(alert, animated: true) }먼저 showAlert라는 함수를 생성해 알림을 띄우는 함수를 만드는 것이 첫번쨰임. 이걸 넣어주면 되는데 적용해 ..
[코딩테스트] 문자열 뒤집기
·
코딩테스트
import Foundationfunc solution(_ my_string:String) -> String { return String(my_string.reversed())}이전 배열 뒤집기랑 같은 맥락임. 하지만 `reversed()`는 문자열을 뒤집어서 반환하지만, 결과는 `ReversedCollection`타입임자세한건 아래 공식문서로 확인해보시길https://developer.apple.com/documentation/swift/reversedcollection ReversedCollection | Apple Developer DocumentationA collection that presents the elements of its base collection in reverse orde..
[iOS / Swift] Storyboard 간단한 계산기 만들기(2) 코드개선
·
Swift Study/Storyboard
옵셔널을 적용해서 코드를 개선해보겠음.let a = Int(firstOperandField.text!)! // 이 코드를 안전하게 옵셔널 바인딩으로 바꾼 코드가 아래 코드if let text = firstOperandField.text, let a = Int(text) {}아래처럼 하면 컴파일 에러가 발생하는 이유는?=> 맨위 `if let text =` 안에 `let a`와 `let b`, 그리고 개별의 `let op`가 있는데 아래 `if op`, `a`, `b`가 위의 `if`문 안에 있어야 하는데 있지 않아서 찾을 수 없다는 컴파일 에러가 발생하는 것임. 오류 해결=> 맨위 `if let text = firstOperandField.text, let a = Int(text)`코드블럭 안에 아래의 ..