[Swift] 스위프트 readLine() 파헤치기
👨🏻‍💻iOS 공부/Swift 기본기 다지기

[Swift] 스위프트 readLine() 파헤치기

728x90
반응형

사용자가 입력하는 다양한 값을 받기 위한 Swift의 readLine( )에 대해 알아보자!


사실 알고리즘 풀이하는데, 코드 도입부에서 가장 많이 등장하는... 함수여서 익힐 필요가 있을 것 같다.




Apple 공식문서내 정의를 보면, 먼저 표준 입력을 받아 "문자열"로 반환한다는 것을 알 수 있다. 

우리가 Int 타입을 입력하던, Double 타입을 입력하던 간에, 모두 String으로 반환한다. 

이 점에 주의하여 입력한 데이터를 입맛에 맞게 데이터 타입을 변환하여 사용해주면 된다. 


표준입력은 현재 입력하는 라인의 끝 혹은 EOF(End Of File)에 닿을 때 까지라고 정의하고 있다. 

EOF란 파일의 끝을 만났음을 알리기 위해 매크로로 정의된 값이다. 

간단하게 생각하면 입력하는 값들을 전부 받아 반환해주는 것이다. 



그리고 정의를 보면 String?으로 Optional 타입인 것을 확인할 수 있다. 

즉 값을 입력하지 않아 발생하는 nil의 경우도 생각해야 한다는 것이다. 

이에 언래핑을 해주어야 하는데, 강제 언래핑이 아닌 더 안전한 "옵셔널 바인딩"을 활용하면 된다. 


if let value = readLine() {
     print("The value is \(value)")
}


다만 값이 입력되는 것이 확실하다면 간단하게 강제 언래핑(!)을 사용해도 된다!


만약 단일 값이 들어오는 것이 아니라 배열이 입력된다면 구분이 되는 부분을 기준으로 값을 나누면 된다. 


// [1 2 3 4]
let valueArr = readLine()!.split(separator:" ")



Swift 기본 함수인 split을 사용하여 구분하여도 된다. (" " : 공백(스페이스)을 기준으로 구분)


다른 방법으로는 .components를 사용하는 방식이다.  


import Foundation
let valueArr = readLine()!.components(separatedBy:" ")


마찬가지로 공백을 기준으로 하여 값을 나누는 모습이다. 

components 메서드는 Foundation이 정의되어야 사용이 가능하며, 리턴값이 [String]으로 바로 String으로 사용할 수 있는 장점이 있다. 

반면 용량이 조금 더 늘어난다는 점...! 참고하면 좋을 것 같다. 


또한 파라미터를 보면 strippingNewLine이라는 것이 있다. 초기값은 true이며, false로 해둘 경우 입력한 값이 보존되지 않는다. 그렇기에 굳이 건드릴 필요 없이 초기값인 true로 사용하면 될 것 같다. 


다양하게 입력된 값을 변형하여 사용할 수 있는데 보통 map을 많이 사용한다. 


// [ "1" "2" "3" "4"]
let valueArr = readLine()!.components(separatedBy: " "). map { Int($0)! }


원소들을 전부 Int 타입으로 변형시켜 저장해주는 모습을 볼 수 있다. 


아무튼 정리하자면, Optional String 형태로 반환이 된다는 것 유의하여, 상황에 맞게 고려하여 타입 변환, 강제 언래핑, 옵셔널 바인딩 등을 사용하면 될 것 같다!


Swift는 보면 볼 수록 표현력(?)이 좋을 것 같다는 생각이 든다... 

아직 학습한지 얼마 안되어 잘 모르는 편이겠지만, 하나하나가 직관적인 것 같다. 

그래도 아직까지는 익숙하지가 않아서... 조금 헤매긴 하고 있으나 기초부터 천천히 쌓아야겠다. 


기초 프로그래밍을 조금 더 연습해서, Swift로도 얼른 알고리즘 풀이를 하고 싶다.













728x90
반응형