Skip to content

Latest commit

ย 

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Academy GroupFinder

์•„์นด๋ฐ๋ฏธ ๋Ÿฌ๋„ˆ๋“ค์—๊ฒŒ ์ฒด๊ณ„์ ์ธ ๋ชจ์ž„ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜์—ฌ, ํฌํ•ญ์—์„œ๋„ ์•ˆ์ •์ ์œผ๋กœ ๋ชจ์ž„์„ ์ฐพ๊ณ  ์ด์–ด๊ฐˆ ์ˆ˜ ์žˆ๋„๋ก ๋•๋Š” ์•ฑ์ž…๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ

Academy GroupFinder๋Š” ์•„์นด๋ฐ๋ฏธ ๋‚ด์—์„œ ๋ชจ์ž„์„ ์ฐพ๊ณ ์ž ํ•˜๋Š” ๋Ÿฌ๋„ˆ๋“ค์ด ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ํ•œ๋ˆˆ์— ํ™•์ธํ•˜๊ณ , ์ž์‹ ์—๊ฒŒ ๋งž๋Š” ๋ชจ์ž„์„ ๋ณด๋‹ค ์‰ฝ๊ฒŒ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•๊ธฐ ์œ„ํ•ด ๋งŒ๋“  iOS ์•ฑ์ž…๋‹ˆ๋‹ค.
ํฌํ•ญ์ด๋ผ๋Š” ์ง€์—ญ์  ํ™˜๊ฒฝ ์†์—์„œ๋„ ๋ชจ์ž„์ด ์ผํšŒ์„ฑ์œผ๋กœ ๋๋‚˜์ง€ ์•Š๊ณ , ์ง€์†์ ์ด๊ณ  ์•ˆ์ •์ ์œผ๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋ฐ˜์„ ๋งˆ๋ จํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ ๋ชฉ์ 

  • ์•„์นด๋ฐ๋ฏธ ๋‚ด ๋ชจ์ž„ ์ •๋ณด๋ฅผ ์ง๊ด€์ ์œผ๋กœ ์ œ๊ณต
  • ๋Ÿฌ๋„ˆ๊ฐ€ ์ž์‹ ์—๊ฒŒ ๋งž๋Š” ๋ชจ์ž„์„ ์‰ฝ๊ฒŒ ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›
  • ์ง€์—ญ์  ์ œ์•ฝ ์†์—์„œ๋„ ๋ชจ์ž„์ด ๊พธ์ค€ํžˆ ์ด์–ด์งˆ ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ ์กฐ์„ฑ

์ฃผ์š” ๊ธฐ๋Šฅ

  • ์‚ฌ์šฉ์ž ๋‹‰๋„ค์ž„ ์ž…๋ ฅ ๋ฐ ์ €์žฅ
  • ๋ชจ์ž„ ๋ชฉ๋ก ๋ณด๊ธฐ
  • ๋ชจ์ž„ ์ƒ์„ธ ์ •๋ณด ํ™•์ธ
  • ๋ชจ์ž„ ๊ฐœ์„ค
  • ๋ชจ์ž„ ์‹ ์ฒญ ๋ฐ ์ทจ์†Œ

ํ™”๋ฉด ๊ตฌ์„ฑ

1. ๋‹‰๋„ค์ž„ ์„ค์ • ํ™”๋ฉด

  • ์•ฑ ์‹คํ–‰ ์‹œ ๊ฐ€์žฅ ๋จผ์ € ํ‘œ์‹œ๋˜๋Š” ํ™”๋ฉด์ž…๋‹ˆ๋‹ค.
  • ์‚ฌ์šฉ์ž๋Š” ๋‹‰๋„ค์ž„์„ ์ž…๋ ฅํ•˜๊ณ  ์ €์žฅํ•œ ๋’ค ์•ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ž…๋ ฅํ•œ ๋‹‰๋„ค์ž„์€ @AppStorage๋ฅผ ํ†ตํ•ด ๋กœ์ปฌ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

2. ๋ฉ”์ธ ํ™”๋ฉด

  • ๋“ฑ๋ก๋œ ๋ชจ์ž„ ๋ชฉ๋ก์„ 2์—ด ๊ทธ๋ฆฌ๋“œ ํ˜•ํƒœ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ฐ ๋ชจ์ž„์€ ์•„์ด์ฝ˜, ๋ชจ์ž„ ์ด๋ฆ„, ๋ชจ์ง‘ ๊ฐ€๋Šฅ ์—ฌ๋ถ€๋ฅผ ์ง๊ด€์ ์œผ๋กœ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.
  • ์šฐ์ธก ์ƒ๋‹จ์˜ Make Group ๋ฒ„ํŠผ์„ ํ†ตํ•ด ์ƒˆ ๋ชจ์ž„ ๊ฐœ์„ค ํ™”๋ฉด์œผ๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3. ๋ชจ์ž„ ์ƒ์„ธ ํ™”๋ฉด

  • ์„ ํƒํ•œ ๋ชจ์ž„์˜ ์‹œ๊ฐ„, ์žฅ์†Œ, ์„ค๋ช…, ๊ฐœ์„ค์ž, ํ˜„์žฌ ์ธ์›์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์‹ ์ฒญ์ž ๋ชฉ๋ก์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํ˜„์žฌ ์‚ฌ์šฉ์ž์˜ ์ƒํƒœ์— ๋”ฐ๋ผ ๋ชจ์ž„ ์‹ ์ฒญ ๋˜๋Š” ์‹ ์ฒญ ์ทจ์†Œ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • ์ •์› ์ดˆ๊ณผ, ๊ฐœ์„ค์ž ๋ณธ์ธ ์‹ ์ฒญ ๋“ฑ ์˜ˆ์™ธ ์ƒํ™ฉ์€ ์•Œ๋ฆผ์œผ๋กœ ์•ˆ๋‚ดํ•ฉ๋‹ˆ๋‹ค.

4. ๋ชจ์ž„ ๊ฐœ์„ค ํ™”๋ฉด

  • ๋ชจ์ž„ ์ด๋ฆ„, ์‹œ๊ฐ„, ์žฅ์†Œ, ์„ค๋ช…, ์ตœ๋Œ€ ์ธ์›์„ ์ž…๋ ฅํ•ด ์ƒˆ ๋ชจ์ž„์„ ๊ฐœ์„คํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ชจ๋“  ํ•ญ๋ชฉ ์ž…๋ ฅ ์—ฌ๋ถ€์™€ ์ตœ๋Œ€ ์ธ์› ์ˆซ์ž ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž ํ๋ฆ„

  1. ์•ฑ ์‹คํ–‰
  2. ๋‹‰๋„ค์ž„ ์ž…๋ ฅ ๋ฐ ์ €์žฅ
  3. ๋ฉ”์ธ ํ™”๋ฉด์—์„œ ๋ชจ์ž„ ๋ชฉ๋ก ํƒ์ƒ‰
  4. ๋ชจ์ž„ ์ƒ์„ธ ์ •๋ณด ํ™•์ธ
  5. ์‹ ์ฒญ ๋˜๋Š” ์ทจ์†Œ ์ง„ํ–‰
  6. ํ•„์š” ์‹œ ์ƒˆ ๋ชจ์ž„ ๊ฐœ์„ค

ํด๋” ๊ตฌ์กฐ

ADA_Challenge1/
โ”œโ”€โ”€ challenge1/
โ”‚   โ”œโ”€โ”€ challenge1App.swift          # ์•ฑ ์ง„์ž…์ 
โ”‚   โ”œโ”€โ”€ ContentView.swift            # ๋ฉ”์ธ ํ™”๋ฉด
โ”‚   โ”œโ”€โ”€ NicknameSetupView.swift      # ๋‹‰๋„ค์ž„ ์„ค์ • ํ™”๋ฉด
โ”‚   โ”œโ”€โ”€ ClubDetailView.swift         # ๋ชจ์ž„ ์ƒ์„ธ ํ™”๋ฉด
โ”‚   โ”œโ”€โ”€ AddClubView.swift            # ๋ชจ์ž„ ๊ฐœ์„ค ํ™”๋ฉด
โ”‚   โ”œโ”€โ”€ Club.swift                   # ๋ชจ์ž„ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ
โ”‚   โ”œโ”€โ”€ ClubData.swift               # ์ƒ˜ํ”Œ ๋ชจ์ž„ ๋ฐ์ดํ„ฐ
โ”‚   โ”œโ”€โ”€ Assets.xcassets/             # ์•ฑ ์•„์ด์ฝ˜ ๋ฐ ์ปฌ๋Ÿฌ ์—์…‹
โ”‚   โ”œโ”€โ”€ piano.jpg
โ”‚   โ”œโ”€โ”€ soccer.jpg
โ”‚   โ””โ”€โ”€ swim.JPEG
โ”œโ”€โ”€ challenge1.xcodeproj/            # Xcode ํ”„๋กœ์ ํŠธ ํŒŒ์ผ
โ””โ”€โ”€ readme.md

๋ฐ์ดํ„ฐ ๊ตฌ์กฐ

์•ฑ์€ Club ๋ชจ๋ธ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ชจ์ž„ ์ •๋ณด๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

  • clubName: ๋ชจ์ž„ ์ด๋ฆ„
  • clubTime: ๋ชจ์ž„ ์‹œ๊ฐ„
  • clubPlace: ๋ชจ์ž„ ์žฅ์†Œ
  • clubDescription: ๋ชจ์ž„ ์„ค๋ช…
  • clubOwner: ๋ชจ์ž„ ๊ฐœ์„ค์ž
  • maxMembers: ์ตœ๋Œ€ ๋ชจ์ง‘ ์ธ์›
  • members: ์‹ ์ฒญ์ž ๋ชฉ๋ก
  • imageName: ๋ชจ์ž„ ์•„์ด์ฝ˜๋ช…

๊ตฌํ˜„ ํฌ์ธํŠธ

  • NavigationStack์„ ์‚ฌ์šฉํ•ด ํ™”๋ฉด ์ด๋™์„ ๊ตฌ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.
  • sheet๋ฅผ ํ™œ์šฉํ•ด ๋‹‰๋„ค์ž„ ์„ค์ • ๋ฐ ๋ชจ์ž„ ์ƒ์„ธ ํ™”๋ฉด์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
  • @State, @Binding, @AppStorage๋ฅผ ์‚ฌ์šฉํ•ด ํ™”๋ฉด ์ƒํƒœ์™€ ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • ์ •์› ์ดˆ๊ณผ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ๋ฉ”์ธ ํ™”๋ฉด ์นด๋“œ ์ƒ‰์ƒ์„ ๋‹ค๋ฅด๊ฒŒ ํ‘œ์‹œํ•ด ๋ชจ์ง‘ ์ƒํƒœ๋ฅผ ์ง๊ด€์ ์œผ๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋Œ€ ํšจ๊ณผ

  • ๋Ÿฌ๋„ˆ๋“ค์ด ๋ชจ์ž„ ์ •๋ณด๋ฅผ ๋น ๋ฅด๊ฒŒ ํŒŒ์•…ํ•˜๊ณ  ์ฐธ์—ฌ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋‹จ๋ฐœ์„ฑ ์ฐธ์—ฌ๊ฐ€ ์•„๋‹ˆ๋ผ ์ง€์†์ ์ธ ์ปค๋ฎค๋‹ˆํ‹ฐ ํ˜•์„ฑ์— ๊ธฐ์—ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํฌํ•ญ์—์„œ๋„ ์•ˆ์ •์ ์œผ๋กœ ๋ชจ์ž„์„ ์ฐพ๊ณ  ์ด์–ด๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๊ฐœ์„ ์ 

ํ–ฅํ›„์—๋Š” ์‚ฌ์šฉ์ž ๊ฒฝํ—˜๊ณผ ๊ธฐ๋Šฅ ํ™•์žฅ์„ ์ค‘์‹ฌ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฐœ์„ ์„ ์ง„ํ–‰ํ•  ์˜ˆ์ •์ด๋‹ค.

  • ๋‹‰๋„ค์ž„ ์„ค์ • ํ™”๋ฉด, ๋ชจ์ž„ ์ƒ์„ธ ํ™”๋ฉด, ๋ชจ์ž„ ๊ฐœ์„ค ํ™”๋ฉด์˜ UX/UI๋ฅผ ์ „๋ฐ˜์ ์œผ๋กœ ๋ฆฌ๋””์ž์ธ
  • ๋‹‰๋„ค์ž„๊ณผ ๊ฐœ์„ค๋œ ๋ชจ์ž„ ์ •๋ณด๊ฐ€ ์•ฑ ์ข…๋ฃŒ ํ›„์—๋„ ์œ ์ง€๋  ์ˆ˜ ์žˆ๋„๋ก ์˜๊ตฌ ์ €์žฅ ๊ธฐ๋Šฅ ์ถ”๊ฐ€
  • ๋ชจ์ž„ ๊ฐœ์„ค ์‹œ ์ด๋ฏธ์ง€ ์ฒจ๋ถ€ ๊ธฐ๋Šฅ์„ ๋„์ž…ํ•˜๊ณ , ํ™ˆ ํ™”๋ฉด์—์„œ ๋ชจ์ž„ ๋Œ€ํ‘œ ์ด๋ฏธ์ง€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฐœ์„ 

์‚ฌ์šฉ ๊ธฐ์ˆ 

  • Swift
  • SwiftUI
  • Xcode

์Šคํฌ๋ฆฐ์ƒท


Academy GroupFinder

An app that provides academy learners with organized group information, helping them find and continue groups more steadily in Pohang.

Project Overview

Academy GroupFinder is an iOS app designed to help learners within the academy quickly check the information they need at a glance and discover groups that fit them more easily.
Its goal is to create a foundation where groups do not end as one-time events, but can continue in a stable and sustainable way even within the regional environment of Pohang.

Project Goal

  • Provide group information within the academy in an intuitive way
  • Help learners easily explore and find groups that suit them
  • Build an environment where groups can continue consistently despite regional limitations

Key Features

  • Entering and saving a user nickname
  • Viewing the group list
  • Checking detailed group information
  • Creating a new group
  • Applying to a group and canceling an application

Screen Structure

1. Nickname Setup Screen

  • This is the first screen shown when the app launches.
  • Users can start using the app after entering and saving a nickname.
  • The entered nickname is stored locally using @AppStorage.

2. Main Screen

  • Users can browse registered groups in a two-column grid layout.
  • Each group visually shows its icon, group name, and recruitment availability.
  • The Make Group button in the top-right corner moves the user to the group creation screen.

3. Group Detail Screen

  • Users can check the selected group's time, location, description, host, and current member count.
  • The applicant list is also available on this screen.
  • Depending on the current user's status, they can either apply to the group or cancel their application.
  • Exceptional cases such as a full group or the host trying to apply are communicated through alerts.

4. Group Creation Screen

  • Users can create a new group by entering the group name, time, location, description, and maximum number of members.
  • The app validates whether all fields are filled in and whether the maximum member count is valid.

User Flow

  1. Launch the app
  2. Enter and save a nickname
  3. Browse the group list on the main screen
  4. Check detailed group information
  5. Apply or cancel
  6. Create a new group if needed

Folder Structure

ADA_Challenge1/
โ”œโ”€โ”€ challenge1/
โ”‚   โ”œโ”€โ”€ challenge1App.swift          # App entry point
โ”‚   โ”œโ”€โ”€ ContentView.swift            # Main screen
โ”‚   โ”œโ”€โ”€ NicknameSetupView.swift      # Nickname setup screen
โ”‚   โ”œโ”€โ”€ ClubDetailView.swift         # Group detail screen
โ”‚   โ”œโ”€โ”€ AddClubView.swift            # Group creation screen
โ”‚   โ”œโ”€โ”€ Club.swift                   # Group data model
โ”‚   โ”œโ”€โ”€ ClubData.swift               # Sample group data
โ”‚   โ”œโ”€โ”€ Assets.xcassets/             # App icon and color assets
โ”‚   โ”œโ”€โ”€ piano.jpg
โ”‚   โ”œโ”€โ”€ soccer.jpg
โ”‚   โ””โ”€โ”€ swim.JPEG
โ”œโ”€โ”€ challenge1.xcodeproj/            # Xcode project file
โ””โ”€โ”€ readme.md

Data Structure

The app manages group information based on the Club model.

  • clubName: Group name
  • clubTime: Group schedule
  • clubPlace: Group location
  • clubDescription: Group description
  • clubOwner: Group host
  • maxMembers: Maximum number of members
  • members: Applicant list
  • imageName: Group icon name

Implementation Points

  • NavigationStack is used to build screen navigation.
  • sheet is used to present the nickname setup and group detail screens.
  • @State, @Binding, and @AppStorage are used to manage UI state and user information.
  • The main screen card color changes depending on whether the group is full, making recruitment status easy to understand.

Expected Effects

  • Learners can quickly understand group information and decide whether to participate.
  • The app can contribute to building an ongoing community rather than one-time participation.
  • It provides a user experience that helps users find and continue groups more steadily in Pohang.

Improvements

The following improvements are planned with a focus on enhancing user experience and expanding functionality.

  • Redesign the nickname setup screen, group detail screen, and group creation screen from a UX/UI perspective
  • Add persistent storage so that the user's nickname and created group information remain saved even after the app is closed
  • Introduce an image attachment feature when creating a group, and improve the home screen so that each group's representative image can be displayed

Tech Stack

  • Swift
  • SwiftUI
  • Xcode

Screenshots


About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages