본문 바로가기
TIL

240721 데일리 포스팅 | iOS 앱의 메모리 구조, 프로그래머스 양꼬치 swift, 앱 만들기, 클래스와 구조체

by 23g 2024. 7. 21.

0. 

하2염

일욜날도 열심히 공부하는 나,, 제법 멋져요...

( 현실 : 진도 밀려서 눈물 광광 중)

1. 데일리 루틴 ✅ ❌ 

  cs 질문 공부하기 

질문 : iOS 앱의 메모리 구조(힙, 스택, 코드 영역 등)와 각 영역의 특징에 대해 설명해주세요.

 

답변 : 

iOS 앱의 메모리 구조는 일반적으로 다음과 같은 주요 영역들로 구성됩니다: 힙(Heap), 스택(Stack), 코드 영역(Code Segment), 데이터 영역(Data Segment). 각 영역은 특정한 목적을 가지고 있으며, 메모리 관리에 중요한 역할을 합니다.

1. 코드 영역 (Code Segment)

  • 특징: 이 영역에는 실행할 프로그램의 기계어 코드가 저장됩니다.
  • 속성: 읽기 전용으로, 실행 중에 수정되지 않습니다.
  • 역할: 애플리케이션의 실행 코드를 저장하여 프로세서가 명령을 수행할 수 있게 합니다.

2. 데이터 영역 (Data Segment)

  • 특징: 전역 변수와 static 변수가 저장되는 영역입니다.
  • 초기화된 데이터 영역: 초기화된 전역 변수와 static 변수가 저장됩니다.
  • 초기화되지 않은 데이터 영역(BSS): 초기화되지 않은 전역 변수와 static 변수가 저장됩니다.
  • 속성: 읽기 및 쓰기가 가능합니다.

3. 힙 영역 (Heap)

  • 특징: 동적으로 할당된 메모리가 저장되는 영역입니다.
  • 속성: 런타임 동안 크기가 동적으로 변경될 수 있습니다.
  • 역할: 객체 및 클래스 인스턴스가 주로 저장됩니다. 필요에 따라 메모리를 할당하고 해제할 수 있습니다.
  • 메모리 관리: 자동 참조 카운팅(ARC)이나 수동으로 메모리를 관리해야 합니다.

4. 스택 영역 (Stack)

  • 특징: 함수 호출 시 생성되는 지역 변수와 매개변수가 저장되는 영역입니다.
  • 속성: 함수 호출과 함께 스택 프레임이 생성되고, 함수가 종료되면 스택 프레임이 해제됩니다.
  • 역할: 함수 호출 시 필요한 메모리를 효율적으로 관리합니다.
  • 메모리 관리: 자동으로 해제되므로 명시적으로 관리할 필요가 없습니다.

메모리 관리

iOS는 주로 **자동 참조 카운팅(ARC, Automatic Reference Counting)**을 통해 메모리를 관리합니다. ARC는 컴파일 타임에 메모리 관리 코드를 자동으로 삽입하여, 객체가 더 이상 필요 없을 때 자동으로 해제합니다.

  • 강한 참조(Strong Reference): 객체의 참조 횟수를 증가시켜 객체의 생명을 연장합니다.
  • 약한 참조(Weak Reference): 참조 횟수를 증가시키지 않으며, 참조 대상이 해제되면 nil로 설정됩니다. 주로 참조 순환을 방지하는 데 사용됩니다.
  • 비소유 참조(Unowned Reference): 참조 횟수를 증가시키지 않으며, 참조 대상이 해제되더라도 nil로 설정되지 않습니다. 참조 대상이 항상 존재한다고 가정할 때 사용됩니다.

요약

  • 코드 영역(Code Segment): 프로그램의 실행 코드를 저장합니다. 읽기 전용입니다.
  • 데이터 영역(Data Segment): 전역 변수와 static 변수를 저장합니다. 읽기/쓰기가 가능합니다.
  • 힙 영역(Heap): 동적으로 할당된 메모리를 저장합니다. 런타임 동안 크기가 동적으로 변경됩니다.
  • 스택 영역(Stack): 함수 호출 시 생성되는 지역 변수와 매개변수를 저장합니다. 자동으로 해제됩니다.

이와 같은 메모리 구조와 관리 방식은 iOS 앱의 성능과 안정성을 보장하는 데 중요한 역할을 합니다.

 

  1일 1커밋

📜 문제 설명

머쓱이네 양꼬치 가게는 10인분을 먹으면 음료수 하나를 서비스로 줍니다. 양꼬치는 1인분에 12,000원, 음료수는 2,000원입니다. 정수 n k가 매개변수로 주어졌을 때, 양꼬치 n인분과 음료수 k개를 먹었다면 총얼마를 지불해야 하는지 return 하도록 solution 함수를 완성해보세요.

 

⌨️ 입출력 예

✏️ 나의 코드

import Foundation

func solution(_ n:Int, _ k:Int) -> Int {
    return n * 12000 + k * 2000 - (n / 10) * 2000
}

📚 개선 코드

간단해서 개선할 것도 없슈

  swift 문법 강의 듣기

 

일단 오늘 이만큼 들었네유..

 

역시 문법 보다 앱 만들기가 훨씬 잼나다 ㅎ

하지만 앱 만들기 1차는 이제 끝났고 다시 문법의 세계로,,,>///<