1์ฃผ์ฐจ ๊ณผ์ ์ ๋ํ ํผ๋๋ฐฑ์ ๋ฐ์์ต๋๋ค.
์๊ฐ๋ณด๋ค ๊ธด ๊ธ์ ์์ฃผ ๊ธด์ฅํ๋ฉฐ ์ฒ์ฒํ ์ฝ์ด๋๊ฐ์ด์!
ํ..! ๋ด๊ฐ ์ด๋ ๊ฒ ์ค์ํ ๋ถ๋ถ์ด ๋ง์๋..? ์ถฉ๊ฒฉ๊ณผ ๊ณตํฌ..
์ฐ์ ์ธ ๊ฐ์ง์ ํผ๋๋ฐฑ์ ๋ฐ์์ต๋๋ค.
์ฒซ ๋ฒ์งธ๋ ๋๋์ ๊ตฌํ์ ๊ดํ ํผ๋๋ฐฑ์ด์๊ณ
๋ ๋ฒ์งธ๋ ์ถ์ํ์ ๊ดํ ํผ๋๋ฐฑ, ์ธ ๋ฒ์งธ๋ Git์ ๊ดํ ํผ๋๋ฐฑ์ด์์ด์.
๊ทธ๋ผ ์ด์ ์ ๊ฐ ํด์ผํ ์ผ์ ํผ๋๋ฐฑ ํ ์์ฉ ์ ๋๋ค.
ํผ๋๋ฐฑ 1) ๋๋์ ๊ตฌํ ์ค ๋ถ๋ชจ๊ฐ 0์ผ ๋ ๊ณ ๋ ค
๋๋์ ์ฐ์ฐ์ ๊ตฌํํ๋ ์ค์ ๋ถ๋ชจ๊ฐ 0์ผ ๋๋ฅผ ๊ตฌํํ์ง ์์์ด์.
์๋.. ๋ ์ํ ๊ฐ์ฌ๋ผ๊ณ ํ ์ ์๋ ๊ฑฐ ๋ง์..? ใ ใ ใ ( ์ค๋๋ถํฐ ์ ์ํ ๊ฐ์ฌ ์๋๋๋ค. )
y๋ฅผ 0์ผ๋ก ํด์ ๋๋ฆฌ๋
Swift/arm64-apple-ios-simulator.swiftinterface:34781: Fatal error: Division by zero in remainder operation
์ด๋ฐ ์ฝ๋๊ฐ ๋์ค๋ค์!
์ ๊ทธ๋ผ DivideOperation์ ํด๋์ค ๋ถํฐ ๊ณ ์ณ๋ด ์๋ค.
์ฐ์ if๋ฌธ์ ์ฌ์ฉํ์ฌ ๊ณ ์ณ๋ณด์์ต๋๋ค.
// ์ฒซ๋ฒ์งธ ๊ฐ์์ ๋๋ฒ์งธ ๊ฐ์ ๋๋ ๋๋ ์ฃผ๋ ํด๋์ค
class DivideOperation: AbstractOperation {
override func calculate(_ x: Int ,_ y: Int) -> Double {
if y == 0 {
print("๋ถ๋ชจ๊ฐ 0์ผ๋ก ๋๋์
์ ์งํํ ์ ์์ต๋๋ค.")
return 0.0
}else{
return Double(x) / Double(y)
}
}
}
๋๋จธ์ง ์ฐ์ฐ๋ ์๋ฐํ ๋งํ๋ฉด ๋๋๊ธฐ๋๊น ๊ณ ์ณ์ค์ผ๊ฒ ์ฃ ?!
// ์ฒซ๋ฒ์งธ ๊ฐ์์ ๋๋ฒ์งธ ๊ฐ์ ๋๋ ๋๋จธ์ง๋ฅผ ๊ตฌํ๋ ํด๋์ค
class ModulusOperation: AbstractOperation {
override func calculate(_ x: Int ,_ y: Int) -> Double {
if y == 0 {
print("๋ถ๋ชจ๊ฐ 0์ผ๋ก ๋๋จธ์ง๋ฅผ ์งํํ ์ ์์ต๋๋ค.")
return 0.0
}else {
return Double(x % y)
}
}
}
guard ๋ฌธ์ ์ฌ์ฉํด์๋ ์๋ํด๋ณด์์ต๋๋ค.
class DivideOperation: AbstractOperation {
override func calculate(_ x: Int ,_ y: Int) throws -> Double {
guard y != 0 else { return nil }
return Double(x) / Double(y)
}
}
ํผ๋๋ฐฑ 2) ์ถ์ํ์ ๊ดํ ํผ๋๋ฐฑ
์ ๋ ์ถ์ํ์ ๋ํ ์๋ฒฝํ ์ดํด๋ฅผ ํ์ง ๋ชปํ๊ณ ๋ฌธ์ ๋ฅผ ํผ ๊ฒ ๊ฐ์์.
๋จผ์ ์ถ์ํ์ ๋ํ ์ดํด๋ฅผ ํด๋ด ์๋ค.
์ถ์ํ๋ ๊ฐ์ฒด์ ๊ณตํต์ ์ธ ์์ฑ๊ณผ ๊ธฐ๋ฅ์ ์ถ์ถํ์ฌ ์ ์ํ๋ ๊ฒ
๋ง์ ์์๋ก ์ฐ์ด๋ ํ ๊ฒ์ ํ ๋ฒ ์๊ฐํด๋ด ์๋ค.
์ฌ๊ธฐ ์๋์ฐจ, ์์ ๊ฑฐ, ์คํ ๋ฐ์ด ํด๋์ค๊ฐ ์์ด์.
Bicycle ํด๋์ค
class Bicycle {
func goForward() {
print("\(Self.self)๊ฐ ์์ผ๋ก ์ ์งํ๋ค.")
}
}
MotorBike ํด๋์ค
class MotorBike {
func goForward() {
print("\(Self.self)๊ฐ ์์ผ๋ก ์ ์งํ๋ค.")
}
}
Car ํด๋์ค
class Car {
func goForward() {
print("\(Self.self)๊ฐ ์์ผ๋ก ์ ์งํ๋ค.")
}
}
๊ทผ๋ฐ ์ธ ๊ฐ์ง์๋ ๊ณตํต์ ์ด ์์ฃ .
๋ฐ๋ก ' ์์ผ๋ก ์ ์งํ๋ค.' ์ ๋๋ค.
์ฌ๊ธฐ์ ๊ณตํต ๋ถ๋ถ์ธ ' ์์ผ๋ก ์ ์งํ๋ค. '๋ฅผ ์ถ์ถํ์ฌ ์ถ์ ํด๋์ค๋ฅผ ๋ง๋๋ ๊ฒ์ ๋๋ค.
Vehicle ํด๋์ค
class Vehicle {
func goForward() {}
}
ํ ๊ฒ๋ค์ ํ์(์ญํ )์ ๋ถ๋ฆฌ์์ผ Vehicle ํด๋์ค๋ฅผ ๋ง๋ค์์ต๋๋ค.
Bicycle, MotoBike, Car ํด๋์ค
class Bicycle : Vehicle {
override func goForward() {
print("\(Self.self)๊ฐ ์์ผ๋ก ์ ์งํ๋ค.")
}
}
class MotorBike : Vehicle {
override func goForward() {
print("\(Self.self)๊ฐ ์์ผ๋ก ์ ์งํ๋ค.")
}
}
class Car : Vehicle {
override func goForward() {
print("\(Self.self)๊ฐ ์์ผ๋ก ์ ์งํ๋ค.")
}
}
์ด ํ์๋ฅผ ์ง์ ์ํ(๊ตฌํ)ํ๋ bicycle, motobike, car ํด๋์ค๋ ์ถ์ํด๋์ค์ธ Vehicleํด๋์ค๋ฅผ ์์๋ฐ์ ์์ ํจ์๋ค์ ์ฌ์ ์ํฉ๋๋ค. ์ด๋ก์จ ๊ฐ์ฒด(์๋์ฐจ, ์์ ๊ฑฐ, ์๋์ฐจ)๋ค์ ๊ณตํต์ ์ธ ์์ฑ๊ณผ ๊ธฐ๋ฅ์ ์ถ์ถํ์ฌ ๊ด๊ณ๋ฅผ ๋งบ๋๋ก ํ๋ ๊ฒ์ ๋๋ค.
์ด๋ค ๊ฐ์ฒด๊ฐ ์ํํด์ผํ๋ ์ญํ ๋ถ๋ถ๊ณผ ๊ทธ ์ญํ ์ ๊ตฌํํ๋ ๋ถ๋ถ์ ๋ถ๋ฆฌ์์ผ ํ๋ก๊ทธ๋จ์ ๊ตฌํํ๋ ๊ฒ์ด์ฃ .
์์ ์ฝ๋์์๋ ์์ผ๋ก ์ ์งํ๋ค๋ ๊ณตํต์ ์ธ ๋ถ๋ถ๋ง ํจ์๋ก ๊ตฌํ์ ํ์์ง๋ง, ์๋์ ๊ฑฐ๋ ํ์์ ๋ํด์ ์๊ฐํด๋ณด๋ฉด ํ ๊ฒ๋ค์ ๋ค ์๋์ ๊ฑฐ๋ ํ์๋ฅผ ํ์ง๋ง, ์คํ ๋ฐ์ด๋ ์๋์ฐจ๋ ์์ ๊ฑฐ์ ์๋์ ๊ฑฐ๋ ๋ฐฉ๋ฒ์ ๋ค๋ฆ ๋๋ค. ๊ทธ ๋ถ๋ถ์ ๊ฐ์์ ํด๋์ค์ ๋ด๋ถ์์ ๊ตฌํํ๋ ๊ฒ์ด์ฃ .
๊ทธ๋์ ์ถ์ํ์์ ๊ฐ์ฅ ์ค์ํ ๊ฑด ๋ญ๋ค?!
์ญํ ๊ณผ ๋ถ๋ฆฌ
์ด๋ค.
์ ๊ฐ ๊ตฌํํ ๊ณ์ฐ๊ธฐ ์ฝ๋์์ ์ ๋ ๋ํ๊ธฐ, ๋นผ๊ธฐ, ๊ณฑํ๊ธฐ, ๋๋๊ธฐ, ๋๋จธ์ง ํด๋์ค์ ๋ํ ๊ตฌํ๊ณผ ๊ทธ ํด๋์ค๋ค์ ์ถ์๋ฉ์๋๋ฅผ ๋ง๋ค์ด ์ญํ ๊ณผ ๋ถ๋ฆฌ๋ฅผ ํด์ฃผ์์ต๋๋ค. ํ์ง๋ง, Calculator๋ผ๋ ํด๋์ค ๋ด๋ถ์์์ ํด๋์ค ๋ค์ ๊ณตํต์ ์ธ ๋ถ๋ถ์ธ calculate ํจ์๋ฅผ ์ฌ์ฉํ ๋, ์ถ์ํ์ ์ด์ธ๋ฆฌ๋ ์ฝ๋๋ฅผ ์ง์ง ๋ชปํ์ด์.
Calculator ์ calculate ๋ฉ์๋ ๊ตฌํ๋ถ๋ถ์ธ๋ฐ์. ๊ฒฐ๋ก ๋ถํฐ ์ ์ผ๋ฉด ์์ฑํ์ ๋ฉ์๋๋ ์ถ์ํ์ ์ด์ธ๋ฆฌ์ง ์์ต๋๋ค. Calculator ๋ ์ฐ์ฐ์ด ์ด๋ป๊ฒ ๋๊ฐ ์ํํ๋์ง ๊ด์ฌ์ด ์์ด์ผ ํฉ๋๋ค. Calculator ์ ์ฅ์์ '๋ฌด์', ์ฌ๊ธฐ์๋ ์ฐ์ฐ์ด ๊ด์ฌ์ฌ ์ ๋๋ค. ์ฐ์ฐ์ด ํ์ํ ๋ ํ๋ ฅ์(collaborator)์๊ฒ ๋ฉ์ธ์ง๋ฅผ ๋ณด๋ด๋ฉด ํ๋ ฅ์๋ ์ฐ์ฐ์ ์ํํฉ๋๋ค. Calculator ๋ ํ๋ ฅ์๊ฐ '์ด๋ป๊ฒ' ํ๋์ง๋ ๊ด์ฌ์ด ์์ต๋๋ค. ์ฆ, ์ถ์ํ์ ์ฃผ์ ๋ชฉ์ ์ค ํ๋๋ how ์ what ์ ๋ถ๋ฆฌํ๋ ๊ฒ์ ๋๋ค. ํ์ง๋ง calculate method ๋ฅผ ๋ณด๋ฉด, ์ด๋ค ์ฐ์ฐ์ ์ด๋ค ํด๋์ค๊ฐ ์ํํ๋์ง Calculator ๊ฐ ์๊ฒ๋ฉ๋๋ค. ์ด๋ฐ ๊ฑธ implementation detail(๊ตฌํ์์ธ)๊ฐ ํด๋ผ์ด์ธํธ(์๋น์ค ๋๋ ํ๋ ฅ์๋ฅผ ์ฌ์ฉํ๋ ์ปดํฌ๋ํธ)์๊ฒ ๋ ธ์ถ๋์๋ค๊ณ ๋งํฉ๋๋ค.
ํํ จ๋์ ์ ์ ์ด ๋ฌ๋ฟ๋ด๊ธด ํผ๋๋ฐฑ ์ค ์ผ๋ถ์ ๋๋ค.
๋งค์ ํ์์ง๋ง ๊ทธ๋ ๊ธฐ์ ๋์ฑ ๊ฐ์ฌํ..
์ ์ ์ฐจ๋ฆฌ๊ณ ์ฝ๋๋ฅผ ์์ ํด๋ด ์๋ค.
AbstractOperation ํด๋์ค
class AbstractOperation {
func calculate(_ x: Int ,_ y: Int) -> Double { 0 }
}
AddOperation ํด๋์ค
class AddOperation: AbstractOperation {
override func calculate(_ x: Int ,_ y: Int) -> Double { Double(x + y) }
}
Calculator ํด๋์ค
// Calculator ํด๋์ค
class Calculator {
var operation: AbstractOperation?
init(operation: AbstractOperation?) {
self.operation = operation
}
func calculate( _ firstNumber: Int, _ secondNumber: Int) -> Double {
return operation?.calculate(firstNumber, secondNumber) ?? 0
}
}
์ถ์ํ์ ๋ง์ถฐ Calculator๋ผ๋ ํด๋์ค๋ ๋น์ฐ์ฐ์๋ง์ ๋ฐ์ ํจ์๋ฅผ ๋๊ฒจ์ฃผ๋ ์ญํ ์ ํฉ๋๋ค.
์ด๋ ๊ฒ Calculator์์๋ '๋ฌด์์' ์๋ง ์ง์คํ๋ ํด๋์ค์ธ๊ฑฐ์ฃ . '์ด๋ป๊ฒ'๋ ์ค๋ก์ง AddOperation ํด๋์ค ๋ง ๊ด์ฌ๋ฅผ ํฉ๋๋ค.
๊ทธ ์ด์ธ์ ์ฐ์ฐ์๋ฅผ ์ง์ ํด์ฃผ๋ ๋ฐฉ๋ฒ์ ์ด Calculator์ ํด๋์ค๋ฅผ ๋ฒ์ด๋ ๊ณณ์์ ๊ฒฐ์ ์ ํด์ผํฉ๋๋ค.
์ด ๋ถ๋ถ์์ ํ๊ฐ์ง ํผ๋๋ฐฑ์ ์ถ๊ฐ๋ก ๋ฐ์์ด์.
์ฐ์ฐ์ "+","-","/" ์ Character ํํ๊ฐ ์๋ enum ํ์ ์ผ๋ก ๋ฐ์๋ผ
์ด์ ๋ ์ฌ์ฉ์๋ก๋ถํฐ Character๋ก ์ ๋ ฅ์ ๋ฐ๊ฒ๋๋ฉด "^" ๋ "_" ๋ก ์คํ๊ฐ ๋ฌ์ ๋, ์ค๋ฅ๊ฐ ์๊ธธ ์ ์์ผ๋ ์ฝ๋๊ฐ ์์ ํ์ง ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ด ๋ถ๋ถ์ ๋ํ ์ ์๊ฐ์ ์์ฃผ ์ฌ์ด ์๋ก ๋ค์๋ฉด ์ ์๊ฒ ๋นจ๊ฐ, ํ๋, ์ด๋ก์์ ํ์ ์ด ์๋๋ฐ, ์๋๋ฐฉ์๊ฒ '๋ฌด์จ ์์ ํ์ ์ ๋ฐ์๋?'๋ผ๊ณ ๋ฌป๋ ๊ฒ๋ณด๋ค '๋นจ๊ฐ, ํ๋, ์ด๋ก์ ํ์ ์ค ๋ฌด์จ ์์ ํ์ ์ ๋ฐ์๋?' ๋ผ๊ณ ๋ฌป๋๊ฒ ์ฝ๋ ์์ผ๋ก ์์ ํ๋ค๋ ๊ฒ์ด์ฃ .
Operation ์ด๊ฑฐํ
enum Operation {
case add
case subtract
case divide
case multiply
case modulus
}
์ด๋ ๊ฒ ๊ตฌํ์ ํ์ฌ ํด๋์ค์ ์ธ์คํด์ค์ ์คํ ๋ถ๋ถ์์ ์ฌ์ฉํ ์ ์์์ต๋๋ค.
ํผ๋๋ฐฑ 3) Git์ ๊ดํ ํผ๋๋ฐฑ
ํํ จ๋๊ป์ Git์ ๋ณด๊ณ ๋จ์ ! ํ์ จ๋๋ด์^^
์๋๋ฉด ์ ๊ฐ ํ๋ก์ ํธ ํ๋ ๋ค ๋ง๋ค๊ณ ์ปค๋ฐํ๊ณ , ๋ค ๋๋ด๊ณ ์ปค๋ฐํ๊ฑฐ๋ ์..
์ปค๋ฐ๋ ์ต๊ด์ด๋ผ ์ผ์ฐ๋ถํฐ ์ต๊ด์ ์ ๋ค์ฌ๋์ผํ๋ค๊ณ ํ์ จ์ด์.
๋ด๊ฐ ์ชผ๊ฐ๊ณ ์ถ์ ์์ ๋จ์( ๋ ผ๋ฆฌ์ ์ธ ํ๋์ ๊ธฐ๋ฅ )๋ก ์ปค๋ฐ์ ์ฌ๋ฆฌ๋ผ๋ ์กฐ์ธ์ ๋ฐ์์ต๋๋ค!
์์ง ๊น์ ๋ฅ์ํ๊ฒ ์ด์ง ์ผ๋ง๋์ง ์์ ์ปค๋ฐ์ ์ต๊ด์ด ์๋์ด์์๋ ๊ฑฐ ๊ฐ์์.
๋ ์ ๊ฐ ์๋๋ Github Desktop์ ์ฌ์ฉํด์ ์ปค๋ฐํ์๋๋ฐ
์๊ณ ๋ณด๋ Xcode ์์์ opt + cmd + c ํค๋ง ๋๋ฌ๋ ๊ฐ๋จํ ์ปค๋ฐ์ ํ ์ ์๋๋ผ๊ตฌ์!
๋ ํ๋ ๋ฐฐ์ฐ๊ณ ๊ฐ๋๋ค~~!!!
๊ทธ๋์ ์ฝ๋ ์์ ํ ๋๋ ์ปค๋ฐํ ๊ฑฐ๋ฅผ ์์ฒญ๋๊ฒ ์ ๊ฒฝ์จ์ํ๊ณ ์ต๋ํ ์์ธํ๊ฒ ์ฐ๋ ค๊ณ ์์ฑํ๋ ๊ฑฐ ๊ฐ์์.
๋ ธ๋ ฅํ ๋์ ์ฆ๊ฑฐ..
๋ด์ผ..์๋๊ตฌ ์์์ผ๋ ๋ ํผ๋๋ฐฑ ๋ฐ๊ณ ๋์์ค๊ฒ ์ต๋๋ค!
ํผ๋๋ฐฑ๋ฐ๊ณ ๊ณต๋ถํ๊ณ ์ฝ๋์์ ํ๊ณ ๋ค์ ํผ๋๋ฐฑ๋ฐ๊ณ ๊ณต๋ถํ๊ณ ์ฝ๋์์ ํ๊ณ ์บ ํ๋๊ธฐ๋ค๊ณผ ์๋ค๋ ๋จ๊ณ TIL ์์ฑํ๋ ๋ฒ์จ 1์๋ฅผ ๋ฌ๋ ค๊ฐ๊ณ ์๋ค์.. ์์นจ 9์ ์ถ๊ทผ์ธ ์ฌ๋..? ๋^^ใ ใ ใ ใ ใ ๋ฐ์๋ค ๋ฐ๋น ํ๋์ฌํ
๋ธ๋ก๊ทธ ๊ธ๋ ์ฐ๋ค๋ณด๋ ๊ฐ๋ ์ฑ์ ๋ ์๊ฐํ๊ฒ ๋๊ณ ์ ์ ๊ธ ์ค๋ ฅ๋ ๋๋ ๊ฒ ๊ฐ์์!
์ค๋๋ ์ด์ ๋ณด๋ค ๋ ์ฑ์ฅํ๋ค^__^
๋ด๊ฐ ๋ชปํ ๊ฒ์ ์ง์คํ๊ธฐ๋ณด๋ค๋ ์๋ก์ด ๊ฐ๋ ์ ๋ฐฐ์ ๋ค๋ ๊ฒ์ ์ง์คํ ๋ ค๊ตฌ์!ใ