자료구조 자료를 효율적으로 표현하고 저장하고 처리할 수 있도록 정리하는 것 자료구조 분류 단순구조 프로그래밍 언어에서 제공하는 정수, 실수, 문자, 문자열 같은 데이터 타입 선형구조 자료 사이 관계가 1:1 비선형구조 자료 사이 관계가 1:다 / 다:다 파일구조 선형구조 순차 리스트 자료의 논리적 순서와 관계 없이 기억 장소에 저장되는 물리적 순서가 일치하는 구조 연결 리스트 자료의 물리적 순서와 관계 없이 포인터를 사용하여 논리적인 순서로 연결하는 구조 스택 큐 데크 순차 자료구조 구현할 자료들을 논리적인 순서대로 메모리에 연속하여 저장하는 구현방식 논리적 순서와 물리적 순서가 항상 일치해야 한다 EX) 배열 삽입,삭제 연산을 해도 빈자리 없이 자료가 순서대로 연속하여 저장된다 ( 중간이 비면 뒷 자료..
전체 글
To do check button todolist를 만들던 도중, 투두 완료 여부를 체크하기 위한 부분이 필요했다. 기본적으로 내장된 CheckMark를 사용할 지 커스텀해서 만들지 고민했는데 커스텀하는게 더 이쁜것 같아서 하트로 만들어봤다. button tag delegate closure 이렇게 세가지 방법으로 구현할 수 있는데, 나는 간단히 모양을 보고 싶었던 것이기 때문에 tag를 사용해서 구현해보았다. 데이터 안정성을 고려하면 2번) delegate protocol을 만들어서 처리하는 게 맞는 것 같다. button.tag를 사용한 tableviewcell 안에 있는 button action cell.todoCompleteButton.tag = indexPath.row cell.todoCompl..
UITableView https://developer.apple.com/documentation/uikit/uitableview UITableView | Apple Developer Documentation A view that presents data using rows in a single column. developer.apple.com 단일 열의 세로행을 사용해서 데이터를 표시하는 뷰 각 행에는 1개의 콘텐츠가 포함된다 실제 콘텐츠를 표시하는 Cell을 제공한다 -> UITableViewCell reloadData() https://developer.apple.com/documentation/uikit/uitableview/1614862-reloaddata reloadData() | Apple D..
AutoLayout 다양한 디바이스, 화면 방향에 따라 유연하게 UI를 배치하고 조정한다 크기에 따른 반응형 조정이 없다면, 오른쪽같이 storyboard와 다른 화면에서 출력 될 때는 전부 깨져서 나올 수 있다 제약 조건 (Constraints) 뷰와 뷰 사이의 관계를 나타낸다 뷰의 위치와 크기를 결정하는 데 사용 뷰의 상대적인 위치를 설정 ㄴ Add New Alignment Constraints 각 값을 0으로 두면 가운데 정렬을 할 수 있다 이렇게 정렬하면 아이패드와 같은 화면에서도 가운데에 정렬이 된다 ㄴ Add New Constraints 오토레이아웃 엔진 (AutoLayout Engine) 제약 조건을 기반으로 뷰의 최종 위치와 크기를 계산 다양한 화면 크기와 방향에 대응할 수 있는 유연한 ..
프로토콜 Protocol 특정 역할을 하기 위한 메소드, 프로퍼티, 기타 요구사항 등을 정의해둔 규약/약속 설계 조건만 제시하고 내부에서 기능을 구현하는 코드는 적지 않습니다! protocol 프로토콜이름 { // 프로토콜 정의 } // 상속받는 클래스의 프로토콜 채택 class 클래스이름: 슈퍼클래스, 프로토콜1, 프로토콜2 { // 클래스 정의 } 특징 상속과 비슷하지만 class 뿐만 아니라, struct와 enum에서도 사용할 수 있다 이름과 타입, gettable, settable을 명시한다 다중 상속이 가능하여 확장성이 좋다 타입으로 사용할 수 있다 associatedtype 프로토콜에서 실제 타입을 명시하지 않고 해당 프로토콜을 채택하는 타입에서 실제 타입을 결정하게 한다 typealias ..
프로그래머스 문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/131705 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 💡 내가 제출한 풀이 import Foundation func solution(_ number:[Int]) -> Int { var result = 0 for first in 0..
내일배움캠프 앱개발 iOS 트랙 본캠프 3주차 Today I Learned 예외처리, 에러처리 프로그램에서 에러가 발생하는 상황에 대응하는 것 프로그램이 원하는대로 동작하지 않을 경우를 대비해야 하므로! 예외 처리를 통해서 예외적인 상황을 구별하고 사용자에게 어떤 에러가 발생했는지 알려주는 조치를 해야한다. Swift는 런타임에서 에러 발생한 경우 처리를 지원하는 클래스를 제공한다. Error 던져질 수 있는 오류 값을 나타내는 유형 Error 프로토콜을 사용해서 사용자 정의 에러를 만들 수 있다 enum KioskError: Error { case invalidSelection case inIsString(String) } throws , throw thorws 리턴값을 반환하기 전에 오류가 발생했을 ..
내일배움캠프 앱개발 iOS 트랙 본캠프 3주차 Today I Learned Stack Overflow 지정한 스택 메모리 사이즈보다 더 많은 스택 메모리를 사용하게 되어 에러가 발생하는 상황 class Main { func printMainMenu() { // 메인 메뉴 출력 print(""" -------------------------------------------------------- [ SHAKESHACK MENU ] 1. Burgers | 앵거스 비프 통살을 다져만든 버거 2. Frozen Custard | 매장에서 신선하게 만드는 아이스크림 3. Drinks | 매장에서 직접 만드는 음료 4. Beer | 뉴욕 브루클린 브루어리에서 양조한 맥주 0. 프로그램 종료 """) if !isCar..
내일배움캠프 앱개발 iOS 트랙 본캠프 3주차 Today I Learned 키오스크 기능 구현 키오스크 기능 구현하기 Lv1 readLine으로 값 입력받기 입력받은 숫자에 따라 다른 로직 실행하는 코드 (조건문 사용) 특정 번호가 입력되면 프로그램 실행 종료 Lv 2 버거, 아이스크림, 음료, 맥주, 주문, 공통 등 클래스 설계 클래스의 프로퍼티와 메소드 정의 Lv 3 2의 클래스를 상속 관계로 만들어보기 하나의 객체 리스트로 모든 메뉴를 관리할 수 있도록 수정하기 readLIne() 으로 값 입력받기 if let choice = readLine() { ,,, } 입력받은 숫자에 따라 다른 로직을 실행하는 코드 if let choice = readLine() { switch choice { case 1..
프로그래머스 문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/12930 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 💡 내가 제출한 풀이 import Foundation func solution(_ s:String) -> String { let arr = s.components(separatedBy: " ") var value = "" for i in arr { for (j, v) in i.enumerated() { value += (Int(j) % 2 == 0 ? v.uppercas..
내일배움캠프 앱개발 iOS 트랙 본캠프 3주차 Today I Learned 열거형 Enum 공통된 주제에 대해 이미 정해둔 값만 선택해서 사용하고 싶을 때 데이터에 별칭을 붙여주는 개념. enum RockPaperScissors { case rock case paper case scissors } var person1: RockPaperScissors = .rock var person2: RockPaperScissors = .scissors var person3: RockPaperScissors = .paper 매번 같은 값을 사용해야 할 경우, 데이터에 별명을 붙여서 그것을 사용하면 메모리 측면에서 굉장히 좋다. 구조체 Struct 하나의 새로운 사용자 정의 데이터 타입을 만들어 주는 것 일종의 모둠 ..
프로그래머스 문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/68935 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 💡 내가 제출한 풀이 import Foundation func solution(_ n:Int) -> Int { let value = String(n, radix: 3) let reversedValue = String(value.reversed()) let result = Int(reversedValue, radix: 3)! return result } 💡 풀이 과정 주어..