사용자가 입력하는 다양한 값을 받기 위한 Swift의 readLine( )에 대해 알아보자!
사실 알고리즘 풀이하는데, 코드 도입부에서 가장 많이 등장하는... 함수여서 익힐 필요가 있을 것 같다.
Apple 공식문서내 정의를 보면, 먼저 표준 입력을 받아 "문자열"로 반환한다는 것을 알 수 있다.
우리가 Int 타입을 입력하던, Double 타입을 입력하던 간에, 모두 String으로 반환한다.
이 점에 주의하여 입력한 데이터를 입맛에 맞게 데이터 타입을 변환하여 사용해주면 된다.
표준입력은 현재 입력하는 라인의 끝 혹은 EOF(End Of File)에 닿을 때 까지라고 정의하고 있다.
EOF란 파일의 끝을 만났음을 알리기 위해 매크로로 정의된 값이다.
간단하게 생각하면 입력하는 값들을 전부 받아 반환해주는 것이다.
그리고 정의를 보면 String?으로 Optional 타입인 것을 확인할 수 있다.
즉 값을 입력하지 않아 발생하는 nil의 경우도 생각해야 한다는 것이다.
이에 언래핑을 해주어야 하는데, 강제 언래핑이 아닌 더 안전한 "옵셔널 바인딩"을 활용하면 된다.
다만 값이 입력되는 것이 확실하다면 간단하게 강제 언래핑(!)을 사용해도 된다!
만약 단일 값이 들어오는 것이 아니라 배열이 입력된다면 구분이 되는 부분을 기준으로 값을 나누면 된다.
Swift 기본 함수인 split을 사용하여 구분하여도 된다. (" " : 공백(스페이스)을 기준으로 구분)
다른 방법으로는 .components를 사용하는 방식이다.
마찬가지로 공백을 기준으로 하여 값을 나누는 모습이다.
components 메서드는 Foundation이 정의되어야 사용이 가능하며, 리턴값이 [String]으로 바로 String으로 사용할 수 있는 장점이 있다.
반면 용량이 조금 더 늘어난다는 점...! 참고하면 좋을 것 같다.
또한 파라미터를 보면 strippingNewLine이라는 것이 있다. 초기값은 true이며, false로 해둘 경우 입력한 값이 보존되지 않는다. 그렇기에 굳이 건드릴 필요 없이 초기값인 true로 사용하면 될 것 같다.
다양하게 입력된 값을 변형하여 사용할 수 있는데 보통 map을 많이 사용한다.
원소들을 전부 Int 타입으로 변형시켜 저장해주는 모습을 볼 수 있다.
아무튼 정리하자면, Optional String 형태로 반환이 된다는 것 유의하여, 상황에 맞게 고려하여 타입 변환, 강제 언래핑, 옵셔널 바인딩 등을 사용하면 될 것 같다!
Swift는 보면 볼 수록 표현력(?)이 좋을 것 같다는 생각이 든다...
아직 학습한지 얼마 안되어 잘 모르는 편이겠지만, 하나하나가 직관적인 것 같다.
그래도 아직까지는 익숙하지가 않아서... 조금 헤매긴 하고 있으나 기초부터 천천히 쌓아야겠다.
기초 프로그래밍을 조금 더 연습해서, Swift로도 얼른 알고리즘 풀이를 하고 싶다.