옵셔널을 swift가 도입한 이유는??

2 답변 글타래를 보이고 있습니다
  • 글쓴이
    • odyflame
      참가자
      • 글작성 : 15
      • 답글작성 : 19
      0 포인트

      안녕하세요.

      옵셔널을 swift가 도입한 이유는 무엇일까요?

      swift의 옵셔널의 정의와, 옵셔널을 쓸 때 확실히 편한 점은 분명 어디든 볼 수 있습니다.

      그런데 옵셔널을 정확히 왜 도입했는지는 코드의 가시성? 말고는 잘 모르겠더라구요

      swift말고 c, java등 옵셔널을 안 쓰는 언어도 분명 존재한데 이러한 언어들이 옵셔널이 없다고 해서 그러한 처리를 못해주는 것은 아니잖아요. 트라이캐치등 예외처리를 해줄 방법들이 존재하는데 swift의 옵셔널이 특히 특별한 이유는 무엇일까요??

      0
    • jcrescent61
      참가자
      • 글작성 : 0
      • 답글작성 : 2
      1,400 포인트

      안녕하세요 odyflame 님 반갑습니다 😊
      야곰 스타터캠프 3기 이수중인 엘렌이라고 합니다 !

      개인적으로 Swift를 처음 공부하게 되면서 가장 처음 옵셔널을 접하게 되는 경우는 readLine() 을 사용해 유저에게 입력을 받는 경우였는데요,
      이후 별도의 강제 추출 또는 옵셔널 바인딩 후 값을 추출하게 됩니다. 파이썬으로 처음 코딩을 시작한 저에겐 정말 이해하기도 어렵고 불편한 기능 중 하나였습니다…

       앞서 말씀하셨던 것 처럼 C언어나 심지어 Objective-C 에서도 옵셔널을 찾아볼 수 없는데요.
      알고계시겠지만 스위프트에서는 변수 또는 상수에 값이 없는 경우에(nil) 해당 변수, 상수에 접근한 경우 잘못된 메모리 접근으로 런타임 오류가 발생합니다.
      실제 어플리케이션 사용 중 런타임 오류가 발생한다면 프로그램 종료 등의 크리티컬한 문제가 발생하겠죠…🥲
      그래서 애초에 프로그래머가 저지를 수 있는 실수를 방지하기 위해 여러가지 기능이 존재하는데요, 그 중 하나가 옵셔널입니다.
      try catch는 로직상 오류나 동작 오류 이후에 후 처리하는 것이지만 옵셔널은 잘못된 메모리 접근에 대하여 원천적인 방어가 가능합니다.
       Swift가 안정성을 지향하는 언어이기 때문에 엄격한 것 같습니다ㅎ
      작성시에는 까다롭고 불편하더라도 나중에 버그를 수정할때에는 굉장한 시간 절약이 된답니다!

      옵셔널 존재 이유에 대해서 간략하게 설명 드렸는데 충분한 답변이 되었는지는 모르겠네요…
      옵셔널 바인딩을 이용해 안전하게 값을 추출하는 방법이 궁금하시다면 또 댓글 남겨주세요!

      • 이 답변은 jcrescent61에 의해 1 week, 3 days 전에 수정됐습니다.
      • 이 답변은 jcrescent61에 의해 1 week, 3 days 전에 수정됐습니다.
      • 이 답변은 jcrescent61에 의해 1 week, 3 days 전에 수정됐습니다.
      +4
      avataravataravatar
      • odyflame
        참가자
        • 글작성 : 15
        • 답글작성 : 19
        0 포인트

        큰 도움이 되었습니다! 야곰 스타터캠프 저도 해보고싶네요 어떠신가요?? 

        +4
        avataravatar
        • jcrescent61
          참가자
          • 글작성 : 0
          • 답글작성 : 2
          1,400 포인트

          저나 다른 캠퍼 분들도 굉장히 만족하는 캠프생활을 하고있습니다!!!
          캠프에 대해서 궁금하신 사항이 있으시다면 jcrescent61@gmail.com 로 메일 보내주세요!!! 잘 읽어보고 상세히 답변드릴게요!!!

          0
    • seongmin yim
      참가자
      • 글작성 : 0
      • 답글작성 : 1
      1,620 포인트

      추가적으로 들은 생각인데요. 옵셔널을 사용하면 비동기적인 상황에서의 이점이 있다고 생각합니다. 프로퍼티의 값이 인스턴스가 생성되는 시점에 초기화되지 않을 수 있는데, 이런 특성이 있는 프로퍼티를 옵셔널로 지정하면 인스턴스가 생성된 이후에 적절한 타이밍에 프로퍼티를 초기화할 수 있는 장점이 있디고 생각합니다. 예를 들어, 이미지뷰의 이미지를 서버에서 비동기적으로 받아온 후에 초기화 시킨다고 할때, 이미지뷰 객체가 생성되더라도 실제 이미지 프로퍼티는 옵셔널이므로 서버에서 통신이 완료된 후에 초기화를 시킬 수 있어요. 만약에 옵셔널이 아니라면 이미지뷰를 초기화할때 일단 비어있는 이미지를 생성해서 넣어줘야할거에요.

      만약 다른 언어처럼 모든 변수가 null로 초기화 될수 있다면, 이미지를 null로 한다음에 통신이 완료되면 이미지를 초기화시킬 수 있겠지만… 모든 변수가 null이 될 수 있는 가능성을 열어놓으면 너무 위험할거라고 생각됩니다. 그렇다고 모든 변수를 null 가능성을 체크하는것도 번거로울것 같아요. swift처럼 nil이 될 수 있는 가능성이 있는 변수만 optional로 지정해 놓으면 (이미지 뷰의 이미지처럼) optional이 아닌 변수에 대해서는 nil이 될 수 있는 가능성을 배제할 수 있을 것 같아요.

      +4
      avataravatar
      • odyflame
        참가자
        • 글작성 : 15
        • 답글작성 : 19
        0 포인트

        확실히 그렇겠네요. Swift가 안정성을 추구하는 언어인데 모두가 nil이 될수있다면 좀 곤란할거 같아요

        좋은 답변 감사합니다

        +2
        avatar
2 답변 글타래를 보이고 있습니다
  • 답변은 로그인 후 가능합니다.

logo landscape small

사업자번호 : 260-27-00477
통신판매업 신고번호 : 제 2020-충북청주-0663 호
고객센터 : 카카오톡채널 @yagom