● 함수에 관한, 개발에 관한 기억
1.
"나는 전혀 개발과 상관 없는 문과생이여..." 라고 생각 했었는데, Swift 함수를 공부 하다가 예전에 고등학생 때, 기웃거렸던 사이트가 생각이 났다.
해커스랩이라고 지금도 있는지 모르겠지만 거기 들어 가려면 문제를 풀어야 들어갈 수 있었다.
그렇게 어렵지 않은 문제 였던 거 같은데, 문제 풀이 과정을 검색했었을 때, 설명 중에 함수가 들어 있었나 뭐 그랬던 것 같다.
거기 한번 들어가 보고 싶어서, 자료 같은걸 뒤져 보는데 수학을 잘해야 하고 함수가 어쩌고 했던 거에서, 공부 하려다 중도에 돌아 섰던 기억이 났다.
2.
IT기획자로 일하면서 개발자와 언제나 함께 일 했었는데, 대화를 할 때마다 턱턱 숨이 막혀오는 기분이 들어 공부를 해보고 싶었었다.
그런데 나의 히스토리를 파헤쳐 봤을 때,
인문계 + 문과 전공 + 수학과 담쌓음 (수포자) + 문제에 로지컬 씽킹보단 감성적 접근.
정확히 이것들과 반대 지점에 있는 것이 개발이라고 느꼈었다.
그렇기에 내 머릿속에서는 개발이란건 '개발적 사고를 하는 수학적 재능이 있는 사람들이나 가능한거 아닐까' 라는 생각이 지배적이었다.
개발 책은 배개 두께 만큼 두껍고 무겁고 비싸고, 겁나 매우 슈퍼 어려운 말들로 설명이 되있는데
진짜 무슨말을 하고 있는지 정말 1도 모르겠는 거라...
3.
그런데, 우연인지 필연인지 IT업계로 들어 오기 전에 만났던 사람도 코드를 만지는 사람, IT업계로 들어와서 만났던 사람도 코드를 만지는 사람을 만났고, 배우자도 결국은 코드를 만지는 사람을 만나게되었다.
4.
해볼까 말까 해볼까 말까 망설이다,
결국은 하게 됐다.
개발.
어려울 것이라고 나는 잘 못할 것 같다고 익숙하지 않은 새로운걸 한다고 마음에 부담 + 안되는 이유들을 찾기만 했었던 것 같다. 마음으론 한 번이라도 해보고 싶었으면서...
하다 보니 처음엔 뭔말인지 1도 이해 못했는데, 의외로 사람이 쓰는 언어와 비슷한 구석을 많이 발견했고, 어문학 전공한 나도 조금 더 수월하게 받아 들일 수 있었다.
또한,
덕분에 로지컬 씽킹 오브 더 킹인 배우자를 좀 더 잘 이해할 수 있는 계기가 되고 있는 듯.
각설하고, 함수 공부 ㄱㄱ
● 함수는 동사(動詞)?!
기억에 어렵기만 했는데, 공부하다 보니, 그리 어려운 개념이 아닌 듯.
(어문학 공부한 내 느낌에 의하면) 함수는 동사 같은 느낌이다.
동사(動詞, Verb): 움직이는 사람이나 사물의 움직임을 나타내는 품사. |
변수나 상수가 명사라면, 함수는 그 변수나 상수등이 행해야 할 움직임들을 정의 해둔 코드블럭 이라서 인 것 같다.
● 함수 (function)
프로그램의 실행 과정에서 독립적으로 처리 될 수 있는 부분을 구조화 한 객체를 의미 한다. (정의 출처: 웰빙글님)
프로그램 내에서 자주 반복되는 코드를 함수로 만들어 두면, 언제든지 호출해서 사용 가능하기 때문에 코드 간소화 & 효율을 높일 수 있고,
다른 프로그램에서 사용 될 수 있도록 정의 해 두면 다른걸 만들 때의 시간도 줄일 수 있음.
함수는 어떻게 정의 하느냐에 따라 정말 다양한 모습을 가지고 있다!
func name (list of parameters ) {statements } func
|
●함수 크게 4가지 형태.
1. 매개 변수 無 반환값 無
2. 매개 변수 有 반환값 無
3. 매개 변수 無 반환값 有
4. 매개 변수 有 반환값 有
func greeting() { print("Hello world") } func greeting(name: String) { print("Hello \(name)") } func greeting() -> String { return "Hello this is the new world"
} func multiplyAB(a: Int, b: Int) -> Int { return a * b
} |
★반환값이 여러개일 경우 어떻게 반환하지 할 땐,
백선생님 슈가 처럼 만능으로 쓸 수 있는 튜플로 돌려 줄 수 있다!
func findCurrency(code: Int) -> (currencySymbol: String, currencyStr: String) { switch code { case 1: return ("$", "USD") case 2: return ("₩", "KRW") case 3: return ("€", "EUR") default: return("", "") } } let currency = findCurrency(code: 2) print(currency.currencySymbol, currency.currencyStr) |
★ 매개변수를 여러개 받아야 한다?
그럴 땐, 매개변수에 이름을 붙여 주거나, 배열을 쓰거나, 가변 매개 변수를 이용 할 수 있다!
어떤 형태인지는 아래쪽에 설명.
● 외부 매개변수의 이름. (External parameter names)
매개변수의 이름이긴 한데 함수를 호출 할 때, 함수 밖에서 쓰이는 이름이라, 외부 매개변수 레이블 이렇게 말하는 것 같다.
써보니까 작성하는 사람이 더 명확하게 알 수 있게 해주는 것 같다.
여기서 to에 해당 하는 것.
func sayHello(to name: String) { print("Hello " + name + "!") } sayHello(to: "John")
// Hello John! 출력 |
● 매개변수안에 배열(Array)
ffunc getGamePoints(fromPoints points: [Double]) -> Double {
var pointSum: Double = 0.0 for point in points { pointSum += point } return pointSum / Double(points.count) } getGamePoints(fromPoints: [2.3, 1.0, 5.0, 10])
|
생각보다 배열도 엄청 유용한 것 같다! 배열이나 튜플을 넘 우습게 봤나...ㅎㅎㅎㅎ
● 가변 매개 변수
이 친구가 존재 한다는 건 알았는데, 어떤 점이 더 좋은지, 어떻게 써야 하는지는 잘 몰랐음.
점 3개 써주면 되네?
func getGamePoints(fromPoints points: Double...) -> Double {
var pointSum: Double = 0.0 for point in points { pointSum += point } return pointSum / Double(points.count) }
getGamePoints(fromPoints: 2.3, 1.0, 5.0, 10) |
배열쓰는 거나 가변 매개 변수 쓰는거나 효과(?)가 비슷하긴 한데, 가변 매개 변수를 쓰면 []를 쓰지 않아도 된다고.
두개가 따로 있는 것만 알았는데, 무슨 차이가 있는지 어떤 점이 좋은지는 몰랐었는데...
● 함수의 매개 변수로 함수를 받을 수 있다!
공부 하면서 계속 느끼는 거지만, 연장들을 공부 하고 있는데, 그 연장들을 어떻게 조합하여 사용할 지는 그걸 쓰는 사람의 몫이 라는 생각이 든다.
'Coding' 카테고리의 다른 글
Swift 옵셔널(Optional) (0) | 2017.12.01 |
---|---|
Swift 클로저(closures) (0) | 2017.11.30 |
swift 조건문(if, switch) (0) | 2017.11.27 |
Swift 반복문 (For, While) (0) | 2017.11.26 |
Swift 데이터 타입- 컬렉션: 딕서너리(Dictionary) (0) | 2017.11.26 |