Swift 조건문 실습으로 알아보는 인터페이스와 로직 연결
🧠 Swift/Xcode – UI 구성, IBAction, 조건문(if/else), 윤년 계산기
📌 학습 주제 요약
- 스토리보드(Storyboard)로 UI 구성
- UILabel, UIButton, UIImageView 속성 조절
- IBAction 연결 (버튼 다중 연결)
- 조건문(IF, ELSE IF, ELSE)로 로직 분기
- 윤년 판별 로직 구현 (중첩 조건문)
- Xcode 뷰 계층 vs Photoshop 레이어 차이 이해
1️⃣ 프로젝트 시작: UI 기본기 익히기
🎯 목표
- 스토리보드 기반 UI 배치 이해
- 텍스트 잘림 등 기본적인 시각 문제 해결
🧪 실습: UILabel 잘림 해결
- 문제: 긴 텍스트가 잘림
- 해결:
- numberOfLines = 0 → 줄 수 무제한
- Auto Shrink 설정 → 글꼴 최소 크기 제한
label.numberOfLines = 0
🔎 작은 화면에서도 텍스트가 깨지지 않게 하는 핵심 설정
2️⃣ UI 계층 구조 & 이미지 겹침 문제
🥚 실습 예제: ‘계란 삶기 앱’
- 구성:
- 버튼 3개 (Soft, Medium, Hard)
- 이미지 뷰 3개 (삶기 상태별 이미지)
- 문제 발생: 버튼 위에 이미지뷰가 있어서 텍스트가 가려짐
✅ 해결
- Document Outline 창 열고 뷰 순서 확인
- 이미지뷰가 버튼보다 위에 있으면 텍스트 가림
- → 이미지뷰를 버튼 아래로 이동 (문서 개요에서 드래그)
📌 포토샵 레이어와 Xcode의 차이점
도구 | 문서 상 위에 있음 | 실제로 위에 보임? |
Photoshop | 예 (텍스트 위에 있으면 앞에) | 예 |
Xcode (Document Outline) | 예 (텍스트 위에 있으면 뒤에) | 아니오 |
📌 Xcode에서는 아래쪽에 있는 뷰가 화면 상 위에 그려진다.
즉, 시각적으로 보이는 순서 = Document Outline의 하단 → 상단 순서로 위로 보임
view.addSubview()의 호출 순서와 관련 있음
3️⃣ IBAction 연결 (여러 버튼 → 하나의 액션)
목표
- 버튼 클릭 시 각각의 삶기 상태(Soft, Medium, Hard) 구분
- 3개의 버튼 → 하나의 IBAction으로 연결
@IBAction func hardnessSelected(_ sender: UIButton) {
print(sender.currentTitle!)
}
- sender.currentTitle → 어떤 버튼이 눌렸는지 확인 가능
🧩 버튼들을 개별 연결하지 않고, 공통 액션으로 처리하는 게 유지 관리에 유리
4️⃣ 도전 과제 1: 버튼별 삶기 시간 출력
조건
- Soft → 5초
- Medium → 7초
- Hard → 12초
let softTime = 5
let mediumTime = 7
let hardTime = 12
if hardness == "Soft" {
print(softTime)
} else if hardness == "Medium" {
print(mediumTime)
} else {
print(hardTime)
}
나중에는 Timer를 연결해 실제 카운트다운 기능 구현 가능:)
5️⃣ 도전 과제 2 – 윤년(leap year) 판별기
📋 문제 설명
- 윤년 조건:
- 4로 나누어떨어짐
- 단, 100으로 나누어떨어지면 윤년 아님
- 단, 400으로 나누어떨어지면 다시 윤년임
🧾 제공된 문제 코드
//Don't change this
var aYear = Int(readLine()!)!
func isLeap(year: Int) {
// 여기에 로직을 작성하세요
}
- aYear는 사용자의 입력값
- 함수 호출은 자동으로 실행됨 → isLeap(year:) 함수 내부만 작성하면 됨
- readLine()은 이미 포함되어 있으므로 신경 쓸 필요 없음 (*** 참고로 readLine()은 Swift에서 콘솔 입력을 받을 수 있는 공식 함수이며, iOS 앱 UI와는 별개다. 실습이나 알고리즘 문제에선 자주 등장하지만, 실제 앱 개발에선 거의 안 쓴다.)
✅ 내 코드 (함수 내부)
func isLeap(year: Int) {
if year % 4 == 0 {
if year % 100 == 0 {
if year % 400 == 0 {
print("YES")
} else {
print("NO")
}
} else {
print("YES")
}
} else {
print("NO")
}
}
💡 핵심 개념
- % : 나머지 연산자
- 중첩 조건문을 통해 복잡한 논리를 단계적으로 처리
⚠️ 시행착오 & 디버깅 팁
- IBOutlet 대신 IBAction을 잘못 연결 → 버튼 눌러도 반응 없음
- 사용하지 않는 상수 선언 → 경고 발생
: Swift는 변수나 상수를 선언하고 사용하지 않으면 경고를 표시한다. 하지만 이후에 사용할 계획이라면, 경고는 무시해도 괜찮다. (예: 버튼 타이틀을 저장해두고 아래 조건문에서 사용할 예정일 때) 반대로 정말 사용하지 않는다면 _로 바꾸거나 삭제하는 것이 좋다.
- Xcode 경고 메시지 복사해서 구글 검색 → StackOverflow에서 해결됨
- =(대입) vs ==(비교) 혼동 주의
반응형
'IT' 카테고리의 다른 글
Swift Optional과 Dictionary로 데이터 다루는 실용적인 방법 (3) | 2025.06.13 |
---|---|
Swift 코드 가독성을 바꾸는 switch 문 핵심정리 (1) | 2025.06.12 |
UIButton에 감각적인 터치 피드백 넣기: Swift 비동기 처리 실습 (1) | 2025.06.10 |
Swift AVFoundation 제대로 활용하기: 실로폰 앱 개발 기록 (0) | 2025.06.09 |
디자이너가 앱을 직접 만들며 깨달은 iOS Auto Layout의 본질 (4) | 2025.06.08 |
댓글
이 글 공유하기
다른 글
-
Swift Optional과 Dictionary로 데이터 다루는 실용적인 방법
Swift Optional과 Dictionary로 데이터 다루는 실용적인 방법
2025.06.13 -
Swift 코드 가독성을 바꾸는 switch 문 핵심정리
Swift 코드 가독성을 바꾸는 switch 문 핵심정리
2025.06.12 -
UIButton에 감각적인 터치 피드백 넣기: Swift 비동기 처리 실습
UIButton에 감각적인 터치 피드백 넣기: Swift 비동기 처리 실습
2025.06.10 -
Swift AVFoundation 제대로 활용하기: 실로폰 앱 개발 기록
Swift AVFoundation 제대로 활용하기: 실로폰 앱 개발 기록
2025.06.09