Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
54ca433
feat: 과제1 풀이 추가
coduhee Jan 7, 2026
dc2312f
feat: 과제2 풀이
coduhee Jan 7, 2026
e1afc8e
# 과제1 코드 수정
coduhee Jan 8, 2026
fe65b99
# 과제 2 수정
coduhee Jan 8, 2026
6037fb1
#feat : 문제3,4번 풀이 업로드
coduhee Jan 9, 2026
5e61532
# 과제 5번 풀이 업로드
coduhee Jan 9, 2026
e0a4f28
refactor: 1번 문제 sum 타입 명시
coduhee Jan 9, 2026
c083865
chore: -> Void 생략
coduhee Jan 9, 2026
23d5527
chore: 문제2 변수타입변경,줄바꿈
coduhee Jan 9, 2026
ab3797c
feat: 조건문 조건 수정
coduhee Jan 9, 2026
353f33e
feat: 문제4 프로토콜의 프로퍼티 제약조건 수정
coduhee Jan 9, 2026
ca48552
chore: 들여쓰기 정리
coduhee Jan 9, 2026
882f2ad
feat: willset문에 있던 불필요한 값 대입과정 삭제
coduhee Jan 9, 2026
3ac98fa
chore: 문제3 반복문 리팩토링, 문제4 willSet self. 삭제
coduhee Jan 10, 2026
0c0411a
chore: 문제 3번 배열 추가 리펙토링
coduhee Jan 10, 2026
0babfa1
chore: 주석 추가
coduhee Jan 10, 2026
b9c03da
Add README for Swift basic assignments
coduhee Jan 10, 2026
391551a
feat: 도전문제 2,3번 풀이 업로드
coduhee Jan 12, 2026
7551ff0
Merge branch 'juhee' of https://github.com/mastarTrack/Chapter02assig…
coduhee Jan 12, 2026
8b7f901
Revise README for better organization and clarity
coduhee Jan 12, 2026
3b172e1
Revise README for clarity and project organization
coduhee Jan 12, 2026
05daeb4
Update README.md
coduhee Jan 12, 2026
7868876
feat: return 생략
coduhee Jan 12, 2026
e834ba7
feat: 문제3 리펙토링
coduhee Jan 12, 2026
0336f57
# feat: 문제 4번 리펙토링
coduhee Jan 12, 2026
3d58f8f
feat: 문제4 리펙토링
coduhee Jan 12, 2026
a8aa22b
# chore: 도전문제 2 리펙토링
coduhee Jan 12, 2026
a40866d
refactor: 타입추론 기능 이용 코드 간결화
coduhee Jan 14, 2026
31bd975
refactor: 오탈자 수정
coduhee Jan 14, 2026
fb8f3dc
refactor: 용도에 맞게 willSet -> didSet 변경
coduhee Jan 14, 2026
b8077af
refactor: 오탈자 수정
coduhee Jan 14, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
91 changes: 90 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,90 @@
## 내일배움캠프 2주차 과제입니다.
# Swift 과제 정리

Swift 기본 문법을 연습하면서 작성한 과제 풀이 코드입니다.
클로저, 고차함수, 제네릭, 프로토콜, 에러 처리까지 직접 구현해봤습니다.

---

## 📁 프로젝트 구성

- `main.swift`
Playground / Command Line Tool 환경에서 실행 가능한 단일 파일

---

## ✅ 과제 1: 클로저 (Closure)

- `(Int, Int) -> String` 타입의 클로저 정의
- 클로저를 파라미터로 받아 호출하는 함수 구현

---

## ✅ 과제 2: 고차함수 (map / filter)

- `map`으로 타입 변환
- `filter` + `map` 체이닝
- 클로저를 받아 동작하는 커스텀 `map` 구현

---

## ✅ 과제 3: 제네릭 (Generic)

- Int / String 배열에서 동일한 로직을 타입별로 구현
- 제네릭으로 공통 로직 통합
- `Numeric` 제약을 걸어 특정 타입만 받도록 처리

---

## ✅ 과제 4: 프로토콜 & 타입 캐스팅

### Introducible 프로토콜

- `name` 프로퍼티
- `introduce()` 메서드 요구

### 구현 타입

- `Robot / Cat / Dog`

### 확인한 내용

- 프로토콜 타입 배열에 담으면 프로토콜에 정의된 멤버만 접근 가능
- 구체 타입의 기능은 다운캐스팅 후 사용 가능

---

## ✅ 과제 5: 에러 처리 (throws)

- enum + associated value로 에러 케이스 정의
- throwing 함수 구현
- do–try–catch로 상황별 분기 처리

---

## 🚀 도전 과제 2: 제네릭 제약 + 조건부 메서드

- `SortableBox<T>` 제네릭 구조체 구현 (`items: [T]`)
- `T: Comparable`일 때만 `sortItems()`가 보이도록 확장
- Comparable이 아닌 타입은 `sortItems()` 호출 시 컴파일 오류로 막히는 것 확인

---

## 🚀 도전 과제 3: 프로토콜 기본 구현

- `Introducible` extension에서 기본 `introduce()` 제공
- `Cat`, `Dog`는 `introduce()` 구현 없이 기본 동작 사용
- `Robot`은 기본 동작 대신 커스텀 `introduce()` 구현

---

## ▶️ 실행 방법

- Xcode Playground 또는 Command Line Tool 프로젝트에서
`main.swift` 실행

---

## 🙋‍♀️ 작성자

- 김주희
- 내일배움캠프 iOS 9기 `🤓왜_되는지_증명못함` 팀
301 changes: 301 additions & 0 deletions juhee.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,301 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 77;
objects = {

/* Begin PBXCopyFilesBuildPhase section */
B96062ED2F0CF71F0082C173 /* CopyFiles */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = /usr/share/man/man1/;
dstSubfolderSpec = 0;
files = (
);
runOnlyForDeploymentPostprocessing = 1;
};
/* End PBXCopyFilesBuildPhase section */

/* Begin PBXFileReference section */
B96062EF2F0CF71F0082C173 /* juhee */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = juhee; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */

/* Begin PBXFileSystemSynchronizedRootGroup section */
B96062F12F0CF71F0082C173 /* juhee */ = {
isa = PBXFileSystemSynchronizedRootGroup;
path = juhee;
sourceTree = "<group>";
};
/* End PBXFileSystemSynchronizedRootGroup section */

/* Begin PBXFrameworksBuildPhase section */
B96062EC2F0CF71F0082C173 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */

/* Begin PBXGroup section */
B96062E62F0CF71F0082C173 = {
isa = PBXGroup;
children = (
B96062F12F0CF71F0082C173 /* juhee */,
B96062F02F0CF71F0082C173 /* Products */,
);
sourceTree = "<group>";
usesTabs = 0;
};
B96062F02F0CF71F0082C173 /* Products */ = {
isa = PBXGroup;
children = (
B96062EF2F0CF71F0082C173 /* juhee */,
);
name = Products;
sourceTree = "<group>";
};
/* End PBXGroup section */

/* Begin PBXNativeTarget section */
B96062EE2F0CF71F0082C173 /* juhee */ = {
isa = PBXNativeTarget;
buildConfigurationList = B96062F62F0CF71F0082C173 /* Build configuration list for PBXNativeTarget "juhee" */;
buildPhases = (
B96062EB2F0CF71F0082C173 /* Sources */,
B96062EC2F0CF71F0082C173 /* Frameworks */,
B96062ED2F0CF71F0082C173 /* CopyFiles */,
);
buildRules = (
);
dependencies = (
);
fileSystemSynchronizedGroups = (
B96062F12F0CF71F0082C173 /* juhee */,
);
name = juhee;
packageProductDependencies = (
);
productName = juhee;
productReference = B96062EF2F0CF71F0082C173 /* juhee */;
productType = "com.apple.product-type.tool";
};
/* End PBXNativeTarget section */

/* Begin PBXProject section */
B96062E72F0CF71F0082C173 /* Project object */ = {
isa = PBXProject;
attributes = {
BuildIndependentTargetsInParallel = 1;
LastSwiftUpdateCheck = 2620;
LastUpgradeCheck = 2620;
TargetAttributes = {
B96062EE2F0CF71F0082C173 = {
CreatedOnToolsVersion = 26.2;
};
};
};
buildConfigurationList = B96062EA2F0CF71F0082C173 /* Build configuration list for PBXProject "juhee" */;
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
);
mainGroup = B96062E62F0CF71F0082C173;
minimizedProjectReferenceProxies = 1;
preferredProjectObjectVersion = 77;
productRefGroup = B96062F02F0CF71F0082C173 /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
B96062EE2F0CF71F0082C173 /* juhee */,
);
};
/* End PBXProject section */

/* Begin PBXSourcesBuildPhase section */
B96062EB2F0CF71F0082C173 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */

/* Begin XCBuildConfiguration section */
B96062F42F0CF71F0082C173 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
DEVELOPMENT_TEAM = YSBKYH9JX6;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GCC_C_LANGUAGE_STANDARD = gnu17;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
MACOSX_DEPLOYMENT_TARGET = 26.1;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = macosx;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
};
name = Debug;
};
B96062F52F0CF71F0082C173 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEVELOPMENT_TEAM = YSBKYH9JX6;
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GCC_C_LANGUAGE_STANDARD = gnu17;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
MACOSX_DEPLOYMENT_TARGET = 26.1;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
SDKROOT = macosx;
SWIFT_COMPILATION_MODE = wholemodule;
};
name = Release;
};
B96062F72F0CF71F0082C173 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
CODE_SIGN_STYLE = Automatic;
DEVELOPMENT_TEAM = YSBKYH9JX6;
ENABLE_HARDENED_RUNTIME = YES;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_APPROACHABLE_CONCURRENCY = YES;
SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES;
SWIFT_VERSION = 5.0;
};
name = Debug;
};
B96062F82F0CF71F0082C173 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
CODE_SIGN_STYLE = Automatic;
DEVELOPMENT_TEAM = YSBKYH9JX6;
ENABLE_HARDENED_RUNTIME = YES;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_APPROACHABLE_CONCURRENCY = YES;
SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES;
SWIFT_VERSION = 5.0;
};
name = Release;
};
/* End XCBuildConfiguration section */

/* Begin XCConfigurationList section */
B96062EA2F0CF71F0082C173 /* Build configuration list for PBXProject "juhee" */ = {
isa = XCConfigurationList;
buildConfigurations = (
B96062F42F0CF71F0082C173 /* Debug */,
B96062F52F0CF71F0082C173 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
B96062F62F0CF71F0082C173 /* Build configuration list for PBXNativeTarget "juhee" */ = {
isa = XCConfigurationList;
buildConfigurations = (
B96062F72F0CF71F0082C173 /* Debug */,
B96062F82F0CF71F0082C173 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = B96062E72F0CF71F0082C173 /* Project object */;
}
Loading