본문 바로가기

전체 글

[Swift] Extension Extension 에 대하여 정리해 봅니다. 간단히 말해, 기존 타입에 새로운 기능을 추가하거나 확장할 수 있는 기능으로, 해당 타입의 소스에 접근하지 않고도 기능을 확장할 수 있다. ☑️ 확장(Extension) structure, class, enum, protocol 타입에 새로운 기능을 추가 → 기존 타입에 기능을 추가하는 확장! 타입에 새로운 기능을 추가할 수는 있지만, 기존에 존재하는 기능을 재정의(Override)할 수는 없다. 외부에서 가져온 타입에 내가 원하는 기능을 추가하고자 할 때 확장을 사용할 수 있다. extension 확장할 타입 이름 { //타입에 추가될 새로운 기능 구현 } extension 확장할 타입 이름: 프로토콜1, 프로토콜2, 프로토콜3 { //프로토콜 요구사항 구현.. 더보기
[Swift] protocol, associatedtype, typealias 메서드, 속성 및 기타 요구사항의 청사진을 정의하여 클래스, 구조체 또는 열거형에서 구현할 수 있는 일종의 인터페이스인 프로토콜에 대해 공부해 봅니다. #1. protocal #2. associatedtype #1. protocal ☑️ protocol 프로토콜에서는 이름과 타입 그리고 gettable, settable을 명시한다. 프로토콜은 설계된 조건만 정의를 하고 제시를 할 뿐 스스로 기능을 구현하지 않는다. class, structure, enum이 프로토콜을 ‘채택’하고 요구사항을 충족하면 프로토콜을 ‘준수’했다고 한다. 프로퍼티는 항상 var로 선언해야 한다. 메서드를 정의할 때 메서드 이름과 리턴값을 지정할 수 있고, ****{}(구현 코드)는 적지 않는다. 상속과 유사하다고 볼 수도 있겠지.. 더보기
[Swift] Exception (throws, throw, do-catch, try) Swift에서의 예외 처리 방법에 대해 공부해 봅니다. #1. 실패 가능한 상황과 예외 처리 #2. Throws 와 do-catch 문 #3. try , try?, try! #1 실패 가능한 상황과 예외 처리 ☑️ 에러 처리 프로그램에서 에러가 발생한 상황에 대응하고 이에 대응하는 과정 Swift에서는 런타임에 에러가 발생한 경우, 이를 처리를 지원하는 클래스를 제공한다. 예외 처리를 통해 예외 상황을 구별하고 프로그램 자체적으로 오류를 해결하거나, 사용자에게 어떤 에러가 발생했는지 알려주는 등 대응을 해야한다. ☑️ Error Error는 던져질 수 있는 오류 값을 나타내는 유형 Error 프로토콜을 채택하여 사용자 정의 에러를 정의하여 사용할 수 있다. ※ 프로토콜 알아보기 참고 자료: https:/.. 더보기
[Swift] Property Observer, Type Casting, Access Modifier 2024년 3월 13일 수요일 observing하여 특정 preperty의 값 변경 전후에 추가 동작을 수행할 수 있는 Property Observer와, 변수나 객체의 타입을 다른 타입으로 변환하는 프로세스인 Type Casting, 코드 요소에 대한 외부 접근을 제한하여 모듈 간의 접근성과 보안을 조절하는 Access Modifier 이해하기 #1. Property Observer (프로퍼티 옵저버) #2. Type Casting (타입 캐스팅) #3. Access Modifier (접근 제한자) #1. Property Observer 변수에 프로퍼티 옵저버를 정의하여 프로퍼티 값의 변경 사항을 모니터링하고, 미리 구현한 코드로 이에 대응 다시 말해, 해당 프로퍼티를 관찰(observe)하면서 변경 .. 더보기
[Project] 숫자 야구 게임 만들기 (Lv3) 전체 프로젝트 중, 레벨 3 도전 .. class BaseballGame { /** 1에서 9까지의 서로 다른 임의의 수 3개를 정하고 맞추는 게임입니다 정답은 랜덤으로 만듭니다.(1에서 9까지의 서로 다른 임의의 수 3자리) */ func start() { var tryCountPerGame: [Int] = [] while true { showGreetingMessage() let option = readLine() ?? "" switch option { case "1": let tryCount = playOneGame() tryCountPerGame.append(tryCount) case "2": showGameLog(tryCountPerGame) case "3": print("< 숫자 야구 게임을 .. 더보기
[Project] 숫자 야구 게임 만들기 (Lv2) 전체 프로젝트 내용 중, 레벨 2 도전 .. #1) if문을 사용한 코드 struct BaseballGame { func start() { let answer = makeAnswer() // 정답을 만드는 함수 호출 while true { print("세 자리 숫자를 입력하세요:", terminator: " ") // 유저에게 입력값을 받는 안내 메시지 출력 if let input = readLine() { if let number = Int(input) { if input.count == 3 { let digits = String(number).compactMap { Int(String($0)) } // 입력값을 각 자리 숫자로 분리하여 배열로 저장 if digits.count == 3, Set(dig.. 더보기
[GitHub] 충돌(Conflict) 해결하기 merge 과정에서 일어날 수 있는 충돌과 해결 방법을 알아봅니다. ▼ 브랜치에서 개발하고 원본 브랜치와 합치는 과정에서 git pull 로 코드를 가져왔는데, 아래와 같은 충돌이 발생했다..? ▼ 충돌 (conflict) 결과 Q. 왜 충돌이 일어나는가 그 이유는 같은 파일의 같은 위치에 코드가 변경되었기 때문 A 개발자 - index.html 의 2번째 줄 코드 변경 B 개발자 - index.html 의 2번째 줄 코드 변경 A 개발자가 git pull 명령어 실행 시 git에서 같은 파일의 같은 위치에서 코드가 변경되었다고 (conflict 발생) 말해준다. ※ git pull 시 발생하는 conflict를 해결하는 법 4182…. 삭제 원하는 코드로 수정 (코드를 변경한 팀원과 상의하는 것을 추천.. 더보기
[Project] 숫자 야구 게임 만들기 (Lv1) 전체 프로젝트 레벨 중, 레벨 1부터 도전 .. ♡ Level 1 import Foundation // 정답 생성 함수 func makeAnswers() -> [Int] { var numbers = [Int]() while numbers.count < 3 { let randomNum = Int.random(in: 1...9) if !numbers.contains(randomNum) { numbers.append(randomNum) } } return numbers } // 게임 플레이 함수 func playGame() { let targetNumbers = makeAnswers() // 정답 생성 var attempts = 0 // 시도 횟수를 저장하는 변수 print("1에서 9까지의 서로 다른 숫자 .. 더보기