23.10.30 Codable을 이용한 JSON 디코딩법 / Auto Layout 에서 스택뷰와 같은 컨테이너 뷰의 역할과 사용법

2023. 10. 30. 16:20IOS [ 개념정리 ]

먼저 디코딩을 위한 JSON 데이터와 일치하는 데이터모델을 정의해준다.

{
    "name": "John",
    "age": 30,
    "email": "john@example.com"
}

위의 예시 데이터 모델을 보면 , 

name , age , email 의 세가지 정보를 받게끔 정해두었다.

 

struct User: Codable {
    let name: String
    let age: Int
    let email: String
}

그리고 name , age , email 의 세가지 정보의 형태를 각각 지정해준다.

 

import Foundation

let json = """
{
    "name": "John",
    "age": 30,
    "email": "john@example.com"
}
""".data(using: .utf8)!

do {
    // JSON 데이터를 디코딩하여 User 객체로 변환
    let user = try JSONDecoder().decode(User.self, from: json)
    
    // User 객체 사용
    print("Name: \(user.name)")
    print("Age: \(user.age)")
    print("Email: \(user.email)")
} catch {
    print("JSON 디코딩 오류: \(error)")
}

지정해준 데이터모델을 사용하려면 위의 코드에서 JSON데이터를 User 구조체로 디코딩 해주고 , ( let json )

결과를 user 상수에 저장해준다. ( let user )

JSONDecoder().decode() 메서드를 사용하여 디코딩해주고, 

뒤에 붙은 매개변수 User.self 는 디코딩할 데이터 모델이며

두번째 매개변수 from: json 은 JSON 데이터를 포함한 Data 객체( User 구조체 ) 이다.

 

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

 

다음으로 Auto Layout 에서 , 스택뷰같이 겉표면을 감싸주는 레이아웃의 역할은 무엇이고 사용법은 어떻게되는지 알아보자

 

 

보통 컨테이너형 뷰 ( ex 스택뷰 ) 들은 이렇게 다른 뷰 몇개씩을 감싸고 있다

 

스택뷰가 있고 > 그 안에 다른 뷰가 두개가있는 보통 이런형태.

 

만약에 저 스택뷰가 없다면 안에있는 뷰 두개는

이렇게 덩그러니 놓아질것이다.

 

저번 개념정리에서 배운 frame을 회상해보면 , 우리는 상위뷰를 중심으로 오브젝트들의 위치를 잡는다고했는데,

 

지금 위의 그림과 아래그림의 차이점이 딱 상위뷰가 있냐 없냐의 차이인것이다.

 

물론 아래의 그림도 최상위뷰인 SuperView는 있겠지만 ,

그건 말그대로 슈퍼뷰이기때문에 저 뷰두개만을 위한 상위뷰는 아닌것이다.

그렇다면 왜 ' 저 뷰두개만을 위한 상위뷰' 가 필요한 것일까?

 

보통 스택뷰를 쓰려고하는 이유가 , view를 일정하게 정렬시키는것의 편의성을 위해서인데

만약 아래그림처럼 view를 superview로 하여금 위치를 잡아버리면

각각의 view를 따로따로 위치선정해주어야하고 , 그 따로따로 위치가선정된 view들의 간격을 또 따로따로 일정하게 주어야한다.

 

그러나 위의 그림처럼 스택뷰안에 view를 넣어주게되면 

스택뷰라는 상위뷰에 속한 view로 위치선정이 가능하고 , 그 스택뷰는 오로지 이 뷰 두개만을 위한 뷰이게 된다.

그럼 스택뷰 안에있는 뷰 두개는 오로지 자신들만을 위한 위치선정이 가능한 스택뷰를 통해 일정간격을 유지하기도 쉽고 , 정렬이 간편해지며 , 코드로써의 간결함도가져갈 수 있고 , 효율성도 증대되는 여러가지의 이점이 있는것이다.