기본연산자 목록에 안넣어버린 논리연산자다.

이전에 데이터 타입 불을 다룰때 잠깐 했던거 같기도하다.

 

논리 연산은

참과 거짓에 대해 연산하는거다 그래서 기본적으로 boolean형식으로 값이 나온다.

 

Logical Not Operator

not 연산은 불 연산을 뒤집는연산이다.

만약 참에 대해 not 을 붙이면 거짓이 되고

거짓에 대해 not을 붙이면 참이된다.

 

not 연산자는 느낌표를 붙이면된다.

 

ex1:

        var target = false
        print(!target)
        
        target = !target
        print(target)

결과:

true

true

 

처음 target이 false이지만 print할때 ! 를, not 연산자를 붙여서 print할땐 true가 출력된다.

그다음엔 target에 !target을 해서 true값으로 변경된다.

 

Logical And Operator

and 연산은 두 불형식 값이 모두 참일때 참으로 결과가 나오는 연산이다.

 

연산자로는 &&를 사용한다.

단 여러 if문이 겹치는형태를 축약하는 형태로 같은 and역할을 하게 끔 할 수도 있다 

ex2)

        let target1 = false
        let target2 = true
        let target3 = true
        
        if target1 && target2 {
            print("이 글은 출력되지 않는다.")
        }
        
        if target2 && target3 {
            print("두 값은 모두 참이다.")
        }
        
        if target2, target3 {
            print("이렇게도 쓴다.")
        }
        
        if target1, target3 {
            print("이 글은 출력되지 않는다.")
        }

결과:

두 값은 모두 참이다.

이렇게도 쓴다.

 

 

 

Logical Or Operator

and를 했으니 이제 or이다.

둘중 하나만 참이면 참으로 결과가 나오는 연산이다.

 

위의 예제를 살짝 바꿔서 아래 예시를 만들어봤다.

 

ex2)

        let target1 = false
        let target2 = true
        let target3 = true
        
        if target1 || target2 {
            print("이 글이 출력된다")
        }
        
        if target2 || target3 {
            print("두 값중 하나는 참이다.")
        }

결과:

이 글이 출력된다

두 값중 하나는 참이다.

 

 

연산자 파트를 모두 끝냈다!

다음엔 어떤 기본 강좌를 할지는 모르겠다.

 

슬슬 기본 연산자 파트가 마무리 되어간다.

달에 한두개씩 올리던 기본서는 기본연산자 파트에서 그만두게 되고,

이후에는 기본 연산자가 아닌 다른 내용으로 짬짬히 올리게 될듯하다.

 

우선 닐 코레싱? 뭐라 읽어야할지도 난감한 파트가 왔다.

내 짐작컨데 옵셔널의 해제를 해보는 파트인듯해서 우선 옵셔널에대해 예시를 들것이다.

 

내가 학부때 공부할때만 해도 자바에 옵셔널에대해 들어본적이 없었는데 요즘 뭔가 생긴듯하여

스위프트만의 특징이다! 라고 말할 수 는 없게되어 아쉽다.

 

이 옵셔널은 값의 존재 유무를 모를때 사용 할 수 있는 하나의 안전장치이다.

일반적인 경우에서 어떠한 변수 a값을 사용하려고 할때 이 a값에 아무런 값이 설정되어 있지않다면 아마 nullpoter error가 뜨게 될것이다.

비어 있는 값을 참조했기에 진행할 수 없다고 말하는것인데

이러한 사태에 대해 안전장치로 사용할 수 있는것이 바로 옵셔널이다.

 

형식은 매우 단순하다

형식)

 

var 변수이름:변수타입? 

 

위와같이 타입에 물음표를 붙이면된다.

이 타입인건가 하며 묻는듣한 모습에 바로 이해가 갈 것이라 생각된다.

 

이 옵셔널에 예시를하나 들어보자면

var name : String? 이 있겠다

참고로 이렇게 바로 선언하면 name값에는 nil 값이 들어가게 된다.

여기서 nil은 아무런 값이 없다는 뜻이다.

 

이제 값을 넣고 출력해보면 아래와같이 나온다.

 

예시1)

    var name:String? = "wiwi"

    print(name)

결과:

Optional("wiwi")

 

값이 wiwi지만 겉에 Optional()이라고 붙어있는게 바로 물음표의 역할이다.

옵셔널로 나오기에 바로 이값을 사용할 수는 없다.

그래서 이 옵셔널에서 값을 추출해줘야한다.

 

이옵셔널에 대해 이야기한적이 있나 살펴보지 3편에서 다뤘었다.

3편의8항 옵셔널 편에서 

값을 추출하기위해 느낌표, !를 붙인다고 적었다.

실제로 위 예시1)을 느낌표를 붙이고 출력하면 아래와같이 무사히 값이 나온다.

 

예시2)

    var name:String? = "wiwi"

    print(name!)

결과:

wiwi

 

이러한 옵셔널을 다루기위해선 위의 ! 와 같이 값을 추출해야하는데

이럴때 값을 더 안전하게 추출하는 연산자가 이 nil-coalescing 연사자로 추측된다.

 

위의 name을 이전편 3항연산자를 이용해서 풀어보자면

 

(name != nil ? name! : "wiwi2")

로 표현할 수 있겠는데

이는 name의 값이 nil 이 아닐경우 name을 ! 를 사용해서 바로 값을 추출한다는것이고

만약 값이 없을경우 wiwi2를 반환한다는 간략한 식이다.

 

이를 더 간략히 이번 편의 주제인 nil-coalescing 연산자를 이용하자면 ( 형태: ?? )

 

name ?? "wiwi2" 가 되겠다

코드로 돌려보자면 아래와같다.

 

예시3)

    var name:String?

    print(name ?? "wiwi2")

    

    name = "wiwi"

    print(name ?? "wiwi2")

결과:

wiwi2

wiwi

 

라인 1의 name은 값을 할당하지 않았기에 print시에 ?? 를 통해 wiwi2값이 나오게되고

라인 4의 name은 wiwi값을 할당한 상태이기에

라인 5의 print에선 wiwi값이 나오게된다.

 

2편에서 

연산자 4번

3차 조건 연산자라고 썻던걸 번역이 이상한지 아님 스위프트는 그렇게 부르는지 모르겠지만 일단 잘 아는 3항 연산자로 이름을 변경했다.

 

이번 편의 내용은 홈페이지에선 Ternary Conditional Operator  라고 적혀있는 부분의 내용이다.

 

이전편, 6편에서 한 조건문을 다시좀 보자

 

예시1)

    let flag = "apple"

    var a = 0

    if flag == "apple" {

      a = 10

    } else {

      a = 20

    }

    print(a)

결과:

10

 

flag라는 이름의 변수가 apple일때 a값을 10 그렇지 않으면 20으로 설정하는 간단한 예시이다.

3항 연산자는 이렇게 하나의 값에 의해 값이 두가지로 나눠져 선택해야할때 쓰면 간편하게 사용 가능한 연산자이다.

 

형태)

조건문 ? 조건문이 참일때 값 : 조건문이 거짓일때 값

 

예시1번을 3항연사자로 변경하면 아래와 같다

 

예시2)

    let flag = "apple"

    let a = flag == "apple" ? 10 : 20

    print(a)

결과:

10

 

a값을 저장할때 if flag == "apple"부분을 예씨2 번과 같이 적으면 동일한 결과가 된다.

값을 꼭 선언한 변수에 저장하지 않아도 된다.

 

예시3)

    let flag = false

    let sum = 10 + 20 + (flag ? 30 : 40)

    print(sum)

결과:

70

 

예시3번 처럼 연산 중간에 바로 사용해도 가능하다.

 

+ Recent posts