
오늘은 inout 파라미터에 대해 알아보겠습니다! inout 파라미터를 알아보기 전에 먼저 알아야 할 것이 있습니다! 값 타입, 참조타입, 메모리인데요! 간단하게 살펴보고 inout 파라미터에 대해 살펴보겠습니다! 혹시 구조체는 값 타입, 클래스는 참조타입 들어보셨나요? 너무나 유명한 얘기죠 .. 그렇다면 값 타입은 무엇이고 참조 타입은 무엇일까요? 그 전에 메모리의 구조에 대해서 간단하게 살펴보겠습니다! 메모리는 코드, 데이터, 힙, 스택 총 4개의 구역으로 나누어 사용합니다!! 코드(프로그램)에는 앱의 모든 코드가 존재합니다. 데이터는 전역변수 / 타입(static/class)변수가 존재하며 앱이 실행되는 동안 불변합니다. 힙은 동적할당을 위한 영역이며 크기가 크고, 개발자가 잘 관리할 필요가 있는 ..

오랜만에 블로그 포스팅이네요. . 현실에서 벗어나 힐링도 좀 하고 . . 하느라 소홀했네요 . . 다시 갓생을 살아보겠습니다. . 오늘은 switch문과 where에 대해 살펴볼 예정입니다! 그 전에 if문에 대해 간단하게 살펴볼게요! 대게 조건문이라고 하면 If문과 switch문이 떠오를 것입니다! if문은 참과 거짓을 판단할 수 있는 문장을 조건으로 넣고 해당 조건이 만족한다면 중괄호 안에 코드를 실행합니다. seungchanAge라는 변수를 조건문에 넣고 true이면 정답ㅋㅋ이 나올 것이고 아니라면 else를 추가해 else 중괄호 안에서 처리할 수 있겠죠? 따라서, if문을 사용할 때에는 논리적은 구조 및 조건의 순서가 중요하다. 여러가지 조건을 한번에 처리할 수 있다. (&&, ||) 중첩해서도..

소복소복에서 MVVM과 RxSwift를 녹여보겠다는 다짐을 하고 공부를 하고 있는데요! 제가 설계한 뷰의 구조와 Rx를 사용한 CollectionView 만드는 법에 대해 포스팅 하려고 합니다. (아직 공부하고 있는 단계라 많이 부족하니 .. ) 우선 위와 같이 뷰를 잘게잘게 나눴습니다. 뷰를 나누면서 고민한 것은 버튼의 모듈화, 재사용 뷰 이 2가지 입니다. NavgatiionBar같은 경우 다른 뷰에서 계속 사용이 됩니다. 따라서 NavigationView라는 클래스를 새로 만들어 뒤로가기 버튼, 약 전송하기, 취소 컴포넌트를 넣어 재사용할 수 있게끔 만들었습니다. 버튼 같은 경우는 SobokButton이라는 새로운 CustomButton을 만들어 enum에 따라 사용할 수 있게끔 하였습니당. (추후..
요즘 들어 제가 사용하는 코드들에 대한 의미를 알고 쓰는 것이 맞는지, 왜 쓰는 것인지 에 대한 의문이 듭니다.. 그 중 하나가 private 키워드인데요. 프로젝트를 진행하면서 private 키워드를 붙여서 파일 내 변수나 함수를 만들었습니다. 코드리뷰 단계에서 특히 이 부분을 유심하게 체크하기도 하고 새삼 중요하다고 생각을 했었습니다. 그러던 중 왜 써야하나? 라는 의문이 들었고 아 부분에 대해 정리를 해보려고 합니다. (private를 포함해서 접근제어자는 다양한 키워드가 있지만 포괄해서 정리를 하겠습니다.) private 비공개 접근수준은 가장 한정적인 범위이다. 비공개 접근수준으로 지정된 요소는 그 기능을 정의하고 구현한 범위 내에서만 사용할 수 있다. 비공개 접근수준으로 지정한 기능은 같은 소..
lazy 키워드를 정리하게 된 이유는 코드로 UI를 작성하면서 궁금증이 생겨서입니다. 친구와 let과 private lazy var 둘의 차이점이 무엇일까에 대해 얘기를 나눴었는데 정리하면 좋을 것 같아서 정리를 해봅니다! 우선 간단하게 터치를 할 수 있는 버튼을 만들어보겠습니당 let letButton = UIButton().then { $0.addTarget(self, action: #selector(letButton), for: .touchUpInside) } private lazy var lazyButton = UIButton().then { $0.addTarget(self, action: #selector(lazuyButton), for: .touchUpInside) } 요 둘의 차이가 가장 큰..

@main에 대해 작성하게 된 이유는 AppDelegate와 SceneDelegate의 역할과 기능을 공부하면서 궁금한 것들이 많이 생겨서 입니당 2021.09.29 - [SSAC - iOS] - [SSAC - iOS] 09월 28일 TIL [SSAC - iOS] 09월 28일 TIL 1. 앱의 구조와 동작 원리 화면 기능 데이터 데이터가 앱 내부에 저장이 되어 있을 경우 : 백업/복구 필수 (ex. 혼자 사용하는 투두, 일기, 영화 관리 앱 등) 데이터가 서버에 저장이 되어 있을 경우 seungchan.tistory.com 기존에 간단하게 포스트했었는데 다시 한 번 정리해보겠습니다. (다음 글에서는 AppDelegate와 SceneDelegate에 대해 작성해보겠습니다.) 프로젝트를 생성하면 기본적으로..
diggin을 개발하면서 생긴 이슈를 정리하기 전에 diggin 회고를 해보려고 한다. 오늘 기준으로 diggin은 앱스토어 심사 대기중이다! 앱스토어에 출시되면 링크를 걸어 놓겠다. Let's diggin! diggin에 대해 간단히 소개하자면 오늘 하루 들은 음악을 기록하고 다양한 LP와 diggin의 플레이리스트를 받아볼 수 있는 앱이다. 나는 평소 음악 듣는 것과 소위 디깅이라 말하는 보석같은 음악을 찾아 듣는 것을 좋아한다.. 이러한 다소 황당한 이유가 diggin을 기획한 가장 큰 이유가 아닐까 싶다. 말 그대로 좋아하고 내 서비스를 오래오래 애정할 수 있는.. 마지막 이유로는 대략 일 년 전부터 LP를 모으기 시작했다. LP를 모으면서 현재 LP 커뮤니티가 흩어져 있는 느낌을 받았고 그러다 ..

SeSAC 과제를 하다가 특정 뷰컨트롤러로 넘어갈 때 Navigation Bar가 보이지 않게끔 설정해야 할 때가 있었습니다. 들어가기에 앞서 ViewController의 생명주기에 대해 살펴 보고 넘어가겠습니다! viewDidLoad()와 viewWillAppear()를 살펴보면 viewDidLoad() 뷰계층이 최초 메모리에 로드 된 후 호출되는 메서드 메모리에 처음 로딩 될 때 1회만 호출된다. viewWillAppear() 다른 뷰에 갔다가 다시 돌아오는 상황에 해주고 싶은 처리에서 사용한다. viewDidLoad()와 구분할 것 이렇게 설명을 할 수 있습니다. 네비게이션바를 특정 뷰컨에서 없애는 것과 이게 무슨 관련이 있는데? 라고 의문이 드실텐데요. 위의 사진에서 보듯이 viewDidLoad(..
이 글을 쓰게 된 이유는 ... 무엇일까요 ... 배열에서 랜덤으로 가져와야 하는 부분이 있었는데 코드를 보시죠 .. @IBAction func tapQuoteGenerationButton(_ sender: Any) { // 0 ~ 4 사이의 난수를 생성 let random = Int(arc4random_uniform(5)) let quote = quotes[random] self.quoteLabel.text = quote.contents self.nameLabel.text = quote.name } 버튼을 클릭하면 배열의 값을 받아 랜덤으로 바뀌는 부분이었습니다..! 서론이 길었으니 ,, 본론으로 바로 가시죠 Swift에서 제공하는 랜덤함수에는 세가지가 있습니다. arc4random() arc4rand..

사실 이 부분을 정리하게 된 가장 큰 이유는 라벨 텍스트에 값을 받아오는 부분이 있었는데 오토레이아웃을 어떻게 잡아야 할지 생각이 많았었다. UIView 안에 라벨을 넣는데 만약 라벨이 길어지면 UIView에 보기 좋게 차지 않으니까 두 오브젝트의 우선순위를 비교해서 UIView가 늘어난다면? 이란 생각을 가지고 공부를 하게 되었다. Content Hugging priority - 최대 크기에 대한 제한 - 우선순위가 높으면 내 크기 유지. 우선순위가 낮으면 크기 늘어남 - 250단위로 사용 가능 Compression Resistance priority - 최소 크기에 대한 제한 - 우선순위가 높으면 내 크기 유지. 우선순위 낮으면 크기 작아짐 - 250단위로 사용 가능 두 오브젝트 중 하나가 커져야 하..