Point II 어떤 것을 입력하든 문자열로 입력되기 때문에 형 변환이 필요 int() : 정수형 변환, str() : 문자열 변환 등…
var1 = input() #4 입력
var1 = int(var1)
var2 = int(input()) #3 입력
print(3+var1+var2) #10 출력
2. 논리 자료형(Boolean Data)
Point I 논리 자료형 : 참(True) 혹은 거짓(False)을 나타내는 자료형
True,False
Point II 비교 연산자 : 숫자나 문자의 값을 비교하는 연산자 주어진 진술이 참이면 True, 거짓이면 False
A == B #A와 B가 같다
A != B #A와 B가 다르다
A >= B #A가 B보다 크거나 같다
A <= B #A가 B보다 작거나 같다
A > B #A가 B보다 크다
A < B #A가 B보다 작다print(3 == 3) #Trueprint(3 != 3) #False
Point III 논리 연산자 : 논리 자료형 사이의 연산
AND :각논리가모두True이면결과가TrueOR :각논리중True가존재하면결과가TrueNOT :논리값을뒤집는연산
3. 조건문
조건에 따라 특정 명령을 수행하는 구문
Point I if문 : 조건이 참이면 명령을 수행
if a >= 5:
print("a는 5 이상입니다!")
Point II elif문 : 이전 조건이 거짓인 상황에서 조건이 참이면 명령을 수행
if a >= 5:
print("a는 5 이상입니다!")
elif a >= 3:
print("a는 3 이상 5 미만입니다!")
Point III else문 : 위의 조건에 해당하지 않는 모든 경우에 수행
if a >= 5:
print("a는 5 이상입니다!")
elif a >= 3:
print("a는 3 이상 5 미만입니다!")
else:
print("a는 3 미만입니다!")
// ---------- 03. enum ----------// 서로 관계있는 값들을 모아서 표현한 것enumWeekDay{
case mon
case tue
case wed
case thu
case fri
}
var today: WeekDay= .mon
// var tod: String = "mon" // error(mom)시 찾기 힘듦enumMediaType{
case audio
case video
}
var mediaType: MediaType= .audio
// 위에서 만들어본 미디어 타입에, 파일 확장자도 문자열로 받을 수 있게 수정enumMediaType2{
case audio(String)
case video(String)
}
var mp3: MediaType2= .audio("mp3")
var h264: MediaType2= .video("h264")
04. 조건문, 반복문
// ---------- 04. 조건문, 반복문 ----------let age =10// if문의 조건절에는 boolean 타입을 사용 (e.g. age > 20)if age >20 {
print("성인 입니다")
} else {
print("미성년 입니다")
}
if age >=10&& age <20 {
print("10대 입니다")
} elseif age >=20&& age <30 {
print("20대 입니다")
} elseif age >=30&& age <40 {
print("30대 입니다")
} elseif age >=40&& age <50 {
print("40대 입니다")
} else {
print("......")
}
enumWeather{
case sun
case cloud
case rain
}
var weather: Weather= .sun
switch weather {
case .sun:
print("맑아요")
case .cloud:
print("흐려요")
case .rain:
print("비와요")
}
// 배열과 딕셔너리 아이템을 순차적으로 체크할 때 사용let ages2 = [3, 20, 60]
let languageCode2 = [
"한국" : "ko",
"미국" : "en",
"일본" : "ja",
]
for age in ages2 {
print("age: \(age)")
}
for (key, value) in languageCode2 {
print("\(key)의 언어코드는 \(value)")
}
// 일정 횟수를 단순 반복print("전방에 다짐 10번 발사~~!")
for_in0..<10 {
print("나는 iOS 개발자다!")
}
// while: 특정 조건을 이용해서 반복var count =10print("Ready!")
while count >0 {
print("\(count)...")
count -=1
}
print("START!")
05. 옵셔널
// ---------- 05. 옵셔널 ----------// 값이 있을수도 있고 없을수도 있음을 표현// Dictionary (Key: Value)let languageCode3 = [
"한국" : "ko",
"미국" : "en",
"일본" : "ja",
]
// let 상수 타입은 String? (타입 + ?)let krCode = languageCode3["한국"] // "ko"let jpCode = languageCode3["일본"] // "ja"let deCode = languageCode3["독일"] // nil// 이름이 있을 수도 있고 없을 수도 있는 타입 선언 - String?var name2: String? =nil
name2 ="Jason"
name2 =nil
06. 함수, 클로저
// ---------- 06. 함수, 클로저 ----------// 함수는 func 키워드를 사용해서 선언funcprintGugu(dan: Int) {
for i in1...9 {
print("\(dan) * \(i) = \(dan * i)")
}
}
printGugu(dan: 5)
funcrollDice() -> Int {
returnInt.random(in: 1...6)
}
let random2 = rollDice()
// 클로저: 이름이 존재하지 않는 함수// 함수funccall(name: String) {
print("hello, \(name)")
}
call(name: "Jason")
// 상수에 함수를 할당하고, 해당 상수를 호출let callName = call
callName("Aha")
// 상수에 클로저 할당하고, 해당 상수 호출let helloName = { (name: String) inprint("hello, \(name)")
}
helloName("Oho")
// 클로저 형태: 함수와 거의 동일, in을 통해 파라미터 및 반환 타입과 실제 클로저 코드 분리// { (name: String) -> Bool in ~ some code ~ }// filterlet members = ["Jason", "Greg", "Tiffany"]
let nameHasT = members.filter { name inreturn name.hasPrefix("T")
}
// maplet prices = [1000, 2000, 3000]
let doubledPrices = prices.map { price inreturn price *2
}
// reducelet revenues = [100, 200, 300]
let totalRevenue = revenues.reduce(0) { partialResult, next inreturn partialResult + next
}
07. 클래스 구조체1
// ---------- 07. 클래스 구조체1 ----------structAlbum{
// 멤버 변수들 - stored propertylet title: Stringlet artist: Stringvar isReleased =false// 생성자: 클래스 또는 구조체를 생성할 때 사용하는 특별한 함수(init 키워드로 선언)// init(title: String, artist: String) {// self.title = title// self.artist = artist// }funcdescription() -> String {
return"\(title) by \(artist)"
}
// 구조체 내부 멤버 변수의 값을 변경하는 경우, mutating 키워드 이용mutatingfuncrelease() {
self.isReleased =true
}
}
var easyOnMe =Album(title: "Easy On Me", artist: "Adele")
print(easyOnMe.description())
print(easyOnMe.isReleased)
easyOnMe.release()
print(easyOnMe.isReleased)
// 클래스: 상속 가능 참조(reference) 생성자를 기본으로 만들어주지 않음// 구조체: 상속 불가능 복사(copy)classEmployee{
var name: Stringvar hours: Intinit(name: String, hours: Int) {
self.name = name
self.hours = hours
}
funcwork() {
print("I'm working now...")
}
funcsummary() {
print("I work \(self.hours) hours a day. ")
}
}
classiOSDeveloper: Employee{
overridefuncwork() {
print("I'm developing iOS app now.")
}
overridefuncsummary() {
print("I work \(self.hours/2) hours a day.")
}
}
structPhone{
var modelName: Stringvar manufacturer: Stringvar version: Double=1.0
}
let normalWorker =Employee(name: "Kim", hours: 8)
normalWorker.work()
normalWorker.summary()
// I'm working now...// I work 8 hours a day.let developer = iOSDeveloper(name: "Jason", hours: 8)
developer.work()
developer.summary()
// I'm developing iOS app now.// I work 4 hours a day.// Reference vs. Copyvar iPhone1 =Phone(modelName: "iPhone 13", manufacturer: "Apple")
var iPhone2 = iPhone1
iPhone2.modelName ="iPhone 14"print(iPhone2.modelName)
print(iPhone1.modelName)
// iPhone 14// iPhone 13var jrDeveloper1 = iOSDeveloper(name: "John", hours: 8)
var jrDeveloper2 = jrDeveloper1
jrDeveloper1.name ="Billy"print(jrDeveloper1.name)
print(jrDeveloper2.name)
// Billy// Billy
08. 클래스 구조체2
// ---------- 08. 클래스 구조체2 ----------// stored property: 클래스, 구조체가 값을 저장하고 있는 프로퍼티// computed property: 따로 값 저장하지 않음, stored property를 활용학거나 특정값을 전달할 때 사용하는 프로퍼티structWatch{
let model: Stringlet manufacturer: Stringvar description: String {
return"\(model) by \(manufacturer)"
}
}
structPerson{
let firstName: Stringlet lastName: Stringvar fullName: String {
return"\(firstName)\(lastName)"
}
}
let appleWatch =Watch(model: "Watch 7", manufacturer: "Apple")
print(appleWatch.description)
// Watch 7 by Applelet jason =Person(firstName: "Jason", lastName: "Lee")
print(jason.fullName)
// Jason Lee
09. 프로토콜
// ---------- 09. 프로토콜 ----------// 제공하고 싶은 역할(기능, 속성)을 미리 정의해 놓은 것// 이후에 다른 타입이 해당 프로토콜의 역할을 제공하고 싶으면, conform해서 제공함protocolCoach{
var name: String { getset }
var currentTeam: String { get }
functraining()funcdirect()
}
structMourinho: Coach{
var name: String="Jose Mourinho"var currentTeam: String="AS Roma"functraining() {
print("Traing Player")
}
funcdirect() {
print("Direct Game")
}
}
let mourinho =Mourinho()
print("\(mourinho.name), \( mourinho.currentTeam)")
mourinho.training()
mourinho.direct()
// Jose Mourinho, AS Roma// Traing Player// Direct Game