분류 전체보기 198

음료수 얼려 먹기

'이것이 코딩테스드다 with 파이썬' 실전문제 5-3번 음료수 얼려 먹기 문제입니다. DFS를 사용하여 해결하는 문제입니다. □ 소스 코드 #include int n,m; int** input; bool dfs(int x,int y){ // 범위를 벗어나는 경우 false 리턴 if(x=m ) return false; //상하좌우를 탐색하고 찾은 경우 true 리턴 if(input[x][y] == 0){ input[x][y] = 1; dfs(x-1, y); dfs(x+1, y); dfs(x, y-1); dfs(x, y+1); return true; } return false; } void frozenJuice(){ cin>>n>>m; input = new int* [n]; for(int i=0;i

Swift - Class 성능 향상 시키는 방법

final을 붙이면 성능이 향상된다. 왜??? 이유를 알기 위해서는 Dispatch라는 것을 알아야 한다. Dispatch 내가 호출할 함수를 컴파일 타임에 결정하냐, 런타임에 결정하냐에 따른 방식이다. StaticDispatch (Direct Call) 컴파일 타임에 호출되니 함수를 결정하고 런타임에 그대로 실행된다. 컴파일 시간에 결정되기 때문에 성능상 이점이 있다. Dynamic Dispatch (Indirect Call) 런타임에 호출될 함수를 결정한다. swift는 클래스마다 함수 포인터들의 배열인 vTable이라는 것을 유지한다. 하위 클래스가 메서드를 호출할 때, vTable을 참조하여 실제 호출할 함수를 결정한다. 위와 같은 과정이 런타임에 발생하기 때문에 성능상 손해를 보게 된다 Refe..

iOS/Swift 상식 2023.01.07

iOS - Storyboard vs Code

StoryBoard 장점 - 결과물 예층 쉬움, 속성 쉽게 확인 가능 - 쉽게 UI 생성 가능 - pop, push, present, dismiss등의 코드를 사용하지 않아도 됨 단점 - 화면 로딩 시 무거움 - 링크가 끊어진 경우 파악하기 힘듬 - 협업 문제 발생 가능 ( 오류가 발생한 경우 파악하기 힘듬) - 데이터 흐름이 표시되지 않음 - 앱이 커지면 가독성이 떨어짐 Code 장점 - 가볍다 - 협업 하기 편리하다 - 모든 UI요소에 제어감각이 생긴다. - 재사용하기 용이 - Launch Screen을 제외한 모든 코드가 코드로 구현 가능하다. - 스토리보드는 및 nib는 loading 및 parsing 오버헤드에 영향을 받는다. 단점 - 해당 컴포넌트를 숙지해야 함 - 어떤 화면이 만들어질지 파악..

iOS/Swift 상식 2023.01.07

Autolayout 제약걸기 (코드 - 1)

□ 버튼 생성 및 제약 걸기 let btn1: UIButton = .init(frame: .init()) btn1.backgroundColor = .yellow btn1.setTitle("안녕하세요", for: .normal) btn1.setTitleColor(UIColor.black, for: .normal) self.view.addSubview(btn1) btn1.translatesAutoresizingMaskIntoConstraints = false // false - AutoLayout을 따르겟다 // true - frame을 따르겠다. btn1.topAnchor.constraint(equalTo: self.view.topAnchor,constant: 100).isActive = true btn1..

iOS/AutoLayout 2023.01.07

Intrinsic Content Size, Priority

Intrinsic Content Size 컨텐트의 본질적인 크기를 의미한다. 다음 표를 보면 쉽게 이해할 수 있다. Label, Button, Switch, TextField는 본질적인 크기를 가지고 있어서 오토레이아웃을 지정하는 경우 에러가 나지 않는다. Priority Hugging Priority 두 오브젝트 중 한 오브젝트가 커져야 하는 상황일 때 우선순위가 낮은 오브젝트는 Instrinsic size를 유지하지 않고 커진다. Compression Resistance Priority Hugging Priority와 반대되는 상황이다. 한 오브젝트가 크기 및 내용이 너무 길어서 다른 오브젝트 영역을 넘어갈 때 둘의 우선순위가 같아서 어떤 오브젝트를 줄여야 할지 모를 때 사용한다. 해당 우선순위가 높..

iOS/AutoLayout 2023.01.07

Frame vs Bounds

Frame Super View 좌표계에서 View의 위치와 크기를 나타냄 FirstView의 SuperView는 루트 View가 된다. SecondView의 SuperView는 FirstView이다. (클래스 상속할 때 슈퍼클래스와 같은 Super 같다) frame origin(x, y) frame의 origin(x, y) 좌표는 SuperView의 원점을 (0,0)으로 놓고 원점으로부터 얼마나 떨어져 있는지 나타낸다. SuperView의 원점은 왼쪽 맨 위에 해당한다. 그래서 frame의 origin좌표는 SuperView에서 x, y 만큼 떨어져 있다고 표현할 수 있다. □ frame origin 좌표 변경한 경우 secondView의 frame origin 좌표를 변경하는 경우 thirdView도 ..

iOS/AutoLayout 2023.01.07

Swift 문법과 친해지기 - MRC/MMR(Objective-C 잔재)

제목에서 보다시피 MRC/MMR은 과거 Objective-C에서 사용하던 메모리 관리 기법이다. ARC의 RC는 Reference Counting이지만 MRC의 RC는 Retain Counting이라고 한다. 소들이 님의 블로그를 보고 이해한 결과 TestClass *test = [[TestClass alloc] init]; 라고 선언을 하면 alloc을 통해 힙 영역에 자동적으로 할당이 되고 Retain Count는 1 증가한다. 그 후 TestClass *test2 = test; test2에 test 주소값을 복사하는 경우 Retain Count이 증가하지 않는다.!!!! 이런 것 때문에 수동 메모리 관리 기법이라고 한다.. Retain Count를 올려주기 위해 TestClass *test2 = t..

iOS/문법 2023.01.07

Swift 문법과 친해지기 - Strong, Weak, unowned, 순환 참조

Strong - 강한 참조 강한 참조는 인스턴스가 할당되고 RC가 증가하면 강한 참조라고 한다. default값이 강한 참조로 구성된다고 한다. 순환 참조 ARC의 단점으로 '순환 참조가 발생될 경우 영구적으로 메모리가 해제되지 않을 수 있다'가 있다. □ 순환 참조 예시 1 class Man { var name: String var girlfriend: Woman? init(name: String) { self.name = name } deinit { print("Man Deinit!") } } class Woman { var name: String var boyfriend: Man? init(name: String) { self.name = name } deinit { print("Woman Dein..

iOS/문법 2023.01.07

Swift 문법과 친해지기 - ARC(Automatic Reference Counting)

우리가 Swift를 사용할 때 인스턴스 클로저 등의 참조타입은 자동적으로 힙에 할당되어 사용되었다. class Human { var name: String? var age: Int? init(name: String?, age: Int?) { self.name = name self.age = age } } let sodeul = Human(name: "sodeul", age: 26) Human이라는 클래스를 우리가 인스턴스를 생성하고 초기화했을 때 다음과 같이 할당된다. 스택 영역에 먼저 지역 변수가 할당되고 실질적인 Human 클래스의 인스턴스들은 힙영역에 할당되게 된다. 스택 영역에 있는 지역 변수에는 힙영역의 인스턴스들의 주소값이 저장된다. 다른 언어에서 참조값을 다루어 보았다면 알다시피 다른 변수에..

iOS/문법 2023.01.07

Swift 문법과 친해지기 - 패턴

Swift 패턴에는 크게 두 가지가 존재한다. 어떤 종류의 값과 일치하는 패턴 어떤 종류의 값과 일치하지 않는 패턴 2가지 종류의 패턴들은 또 여러 가지 패턴으로 구분되어 있다. 어떤 종류의 값과 일치하는 패턴 와일드카드 패턴 식별자 패턴 값 바인딩 패턴 튜플 패턴 어떤 종류의 값과 일치하지 않는 패턴 열거형 케이스 패턴 옵셔널 패턴 타입 캐스팅 패턴 표현 패턴 어떤 종류의 값과 일치하는 패턴 단순 상수, 변수 및 옵셔널 바인딩에서 값을 소멸시키는 데 사용된다. 어노테이션을 지정하여 특정 유형과 일치하도록 제한을 둘 수 있다. 와일드카드 패턴 와일드카드 패턴은 모든 값을 일치시키고 무시하며 밑줄(_)로 구성된다. □ 와일드카드 패턴 예시 let hello = ("안녕","hi") switch hello{..

iOS/문법 2023.01.06