'연산자'에 해당되는 글 3건

  1. 2017.07.06 옵셔널 체이닝 (2)
  2. 2012.01.28 C <8>. 조건문(3) 3항 연산자 (7)
  3. 2011.12.08 C <5>. 반복문(1), 단항 연산자 (2)

옵셔널 체이닝

옵셔널 체이닝은 옵셔널의 내부의 내부의 내부로 옵셔널이 연결되어 있을 때 유용하게 활용할 수 있습니다. 매 번 nil 확인을 하지 않고 최종적으로 원하는 값이 있는지 없는지 확인할 수 있습니다. 


소스코드


예제 클래스

class Person {
    var name: String
    var job: String?
    var home: Apartment?
    
    init(name: String) {
        self.name = name
    }
}

class Apartment {
    var buildingNumber: String
    var roomNumber: String
    var `guard`: Person?
    var owner: Person?
    
    init(dong: String, ho: String) {
        buildingNumber = dong
        roomNumber = ho
    }
}


옵셔널 체이닝 사용

let yagom: Person? = Person(name: "yagom")
let apart: Apartment? = Apartment(dong: "101", ho: "202")
let superman: Person? = Person(name: "superman")


// 옵셔널 체이닝이 실행 후 결과값이 nil일 수 있으므로
// 결과 타입도 옵셔널입니다

// 만약 우리집의 경비원의 직업이 궁금하다면..?

// 옵셔널 체이닝을 사용하지 않는다면...
func guardJob(owner: Person?) {
    if let owner = owner {
        if let home = owner.home {
            if let `guard` = home.guard {
                if let guardJob = `guard`.job {
                    print("우리집 경비원의 직업은 \(guardJob)입니다")
                } else {
                    print("우리집 경비원은 직업이 없어요")
                }
            }
        }
    }
}

guardJob(owner: yagom)

// 옵셔널 체이닝을 사용한다면
func guardJobWithOptionalChaining(owner: Person?) {
    if let guardJob = owner?.home?.guard?.job {
        print("우리집 경비원의 직업은 \(guardJob)입니다")
    } else {
        print("우리집 경비원은 직업이 없어요")
    }
}

guardJobWithOptionalChaining(owner: yagom)
// 우리집 경비원은 직업이 없어요



yagom?.home?.guard?.job // nil

yagom?.home = apart

yagom?.home // Optional(Apartment)
yagom?.home?.guard // nil

yagom?.home?.guard = superman

yagom?.home?.guard // Optional(Person)

yagom?.home?.guard?.name // superman
yagom?.home?.guard?.job // nil

yagom?.home?.guard?.job = "경비원"




nil 병합 연산자

중위 연산자입니다. ??

예) Optional ??  Value


옵셔널 값이 nil일 경우, 우측의 값을 반환합니다. 

띄어쓰기에 주의하여야 합니다.

var guardJob: String
    
guardJob = yagom?.home?.guard?.job ?? "슈퍼맨"
print(guardJob) // 경비원

yagom?.home?.guard?.job = nil

guardJob = yagom?.home?.guard?.job ?? "슈퍼맨"
print(guardJob) // 슈퍼맨



관련문서

* The Swift Programming Language - Optional Chaining

* The Swift Programming Language - Basic Operators - Nil-Coalescing Operator





by yagom

facebook : http://www.facebook.com/yagomSoft

facebook group : https://www.facebook.com/groups/yagom/


p.s 제 포스팅을 RSS 피드로 받아보실 수 있습니다.

RSS Feed 받기   


↓↓↓ 블로거에게 공감은 큰 힘이 됩니다 ↓↓↓ 

저작자 표시 비영리 변경 금지
신고

'Swift > 기본문법' 카테고리의 다른 글

assert와 guard  (0) 2017.07.13
타입캐스팅  (2) 2017.07.10
옵셔널 체이닝  (2) 2017.07.06
인스턴스의 생성과 소멸  (0) 2017.07.03
상속  (0) 2017.06.29
프로퍼티 - Property  (2) 2017.06.26
Posted by yagom

오늘의 주제

1. 3항 연산자 


여덟 번째 시간입니다.^^

오랜만에 뵙겠습니다!
블로그를 잠시 쓰지 못했습니다..ㅠㅠ
계속해서 조건문에 대해 알아보고 있는데, 잘 보고 계신지 모르겠습니다...^^
이번이 조건문에 마지막 내용입니다~

자 그럼 긴말 없이 시작~~~~~~~~


# 3항? 연산자?

말 그대로 항이 3개인 연산자 입니다.

( 조건 ? 참일 때의 값 :  거짓일 때의 값 )

이런식으로 쓰게 됩니다.

감 안오시죠?ㅋㅋㅋ 당연합니다~

간단히 예를 들겠습니다.

max = ( 1>2 ? 1 : 2) ;

한국말로 차근차근 풀어서 말씀드리겠습니다.

'1이 2보다 큰가? 이것이 참이라면 1을 max에 넣고, 이것이 거짓이라면 2를 max에 넣어라' 입니다.

또 하나더...

printf( "%d" , ( a>b ? a : b ) );

a가 b보다 큰가? 그렇다면 a를 출력하고, 아니라면 b를 출력하라.

자...

백마디 말보다 직접 해보시면 되겠죠?ㅋ

저번까지 쓰던 프로젝트를 다시 열어서 몇 줄 추가해 봅니다~



자... 이제까지 잘 따라오셨으면 이해 하셔야 합니다잉~

%c는 문자형 char를 출력하는 녀석이라는 것은 알고 계시죠?

잘 이해 안가시면 C <3>. 변수. Variable를 참고하시길 바랍니다..ㅋㅋ

자 결과 화면 입니다~

 
그럼 조건문은 여기서 끗!!! 

의문사항이나 궁금하신 사항은 댓글 남겨주세용^^*

by yagom

p.s 제 포스팅을 RSS 피드로 받아보실 수 있습니다.

RSS Feed 받기   


↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? ^~^ 사랑합니다~ ↓↓↓
저작자 표시 비영리 변경 금지
신고

'C' 카테고리의 다른 글

C <10>. 포인터 (1)개념잡기  (3) 2012.03.23
C <9>. 반복문(2) do-while  (7) 2012.02.06
C <8>. 조건문(3) 3항 연산자  (7) 2012.01.28
C <7>. 조건문(2) switch  (6) 2011.12.14
C <6>. 조건문(1), if, else  (6) 2011.12.11
C <5>. 반복문(1), 단항 연산자  (2) 2011.12.08
Posted by yagom

오늘의 주제

1. for문 
2. while문 

2. 단항 연산자 



다섯 번째 시간입니다.^^

지난 번에는 실수 표현방법을 알아보았습니다.
깨알같지만 은근 자주 쓰이고 중요한 녀석일겁니다 ㅎㅎㅎ

자 그럼 잔소리는 이제 생략하고 오늘은 반복문을 살짝 보도록 하겠습니다^^
일단 반복문의 종류는 for, while, do while등등 몇가지가 있는데 오늘은 for문과 while문 두 가지를 해 볼게요 ㅎㅎ
반복문은 세 번에 걸쳐서 포스팅 할 예정입니다. 물론 연달아 하지는 않습니다^^

조건문도 두 번에 할거예요 ㅎㅎㅎ
스따뚜~~~~~~~~~~~~


# 반복문이란?


반복문은 말 그대로 반복문입니다.
어느 조건이 충족이 된다면 계속 계속 끝까지 돕니다 ㅋㅋㅋ
심지어 어느 조건이 계속 충족되지 않는다면 멈추지 않습니다.
설명은 끗!


자, 일단 새로운 프로젝트를 생성해 봅시다.


오해하시는 분들이 가끔 계신데, 꼭 Xcode 사용하실 필요 전혀 없습니다 ㅎㅎㅎ
그냥 제가 사용하는 툴이기 때문에 이거 쓰는거구요, Visual Studio를 쓰던지, TurboC를 쓰던지 아무 상관없습니다.ㅎㅎ


# for

자, 메인함수 안에 이렇게 작성을 해 줍니다.

 
일단 처음에 선언해준 i는 반복문에서 어떤 조건을 만들어 주기 위해서는 유동적인 변수가 필요하기 때문에 하나 만들어 준거예요.ㅎ
일단 i를 선언해 준 후, 쭈욱 작성해 봅시다.
for문의 작성요령은 이렇습니다.

for ( 변수 초기화 ; 조건 ; 한바퀴 후 진행할 작업) 
{
   반복문 동안 실행될 내용...
}

자 이런식으로 작성을 합니다.
세미콜론 양옆으로 세 개의 무언가가 들어가죠?
사실 전부 다 작성하지 않아도 무관합니다.
하지만, 작성하지 않는다면 설정된 조건이 없기 때문에 반복문이 무한정으로 돌거예요 ㅎㅎㅎ

첫 번째 변수 초기화는 for문이 처음 시작하는 때 한 번만 실행됩니다.
즉, i=0이라는 것을 넣었을 때 이것은 딱 for문 처음 들어왔을때만 0으로 초기화 된다는 말이예요 ㅎ

그리고 두 번째 조건은 for문이 실행될 조건을 명시하는거예요. i<5라고 작성하였으면 i가 5보다 작으면 이 for문을 실행하여라 라고 말하는 것이죠.

세 번째 한바퀴 후 진행할 작업은 말 그대로 for문이 실행될 내용들을 쭈욱 실행 한 후 다시 조건을 검사하기 전에 진행할 작업을 말합니다.

다시 정리해보면

코드에서 for문을 똻!!!!!!!!!! 마주쳤다!!!!!! 그럼 컴퓨터가 동작하는 순서는

변수 초기화 - 조건 체크 - 반복문 내용 실행 - 한바퀴 후 진행작업 진행 - 조건 체크 - (조건이 충족되면)반복문 내용 실행 - 한바퀴 후 진행 작업 - 조건체크 - (조건이 충족되지 않으면)for문 탈출

이해되시나요?

뭐 말은 필요없죠...ㅋㅋ 코드를 실행해 봅시다.


자... 코드는 각자 다 다른데 실행 결과는 똑같죠?ㅎ
코드 작성법은 다 자기 스타일 입니다 ㅎㅎ
자... 그런데 여기서 의문이 하나 생기셔야 할텐데요...ㅋㅋㅋ
음... 맞춰볼까요?
i++은 뭐고 ++i는 뭐지??? 그리고 i++이 printf안에 들어가 있는데 이건 도대체 뭐지?ㅋㅋㅋ

자... 요 밑에 설명해드릴게요~

# while


자, while문입니다.
 
while문의 작성법은

while ( 조건 )
{
    실행될 내용....
}


요렇게 작성하시면 됩니다.

훨씬 간편하죠?ㅎㅎㅎ
간편한 만큼 불편한 점도 존재하죠^^
for문과 while문과 둘 중 하나 자신이 더 편한거 골라서 사용하시면 되겠습니다 ㅎㅎㅎ
물론 나중에 또 다른 반복문도 있어요 ㅎ

while의 동작과정을 보면

while을 똻!!!!!!!!!!!만나면!!!!!!!!!!

조건체크 - 실행 - 조건체크 - 실행 - 조건 안맞으면 탈출!!

뭐 이런 식입니다 ㅎㅎㅎ

자, 코드 작성하고 다 돌려 보셨나요? 그럼 이제 궁금증을 좀 풀어보는 시간을 가져볼까요?
사실 요 밑에꺼 안보고는 위에 코드 이해 못하실거예요...ㅎㅎ 대충 눈치 채신 분들도 계시겠지만요 ㅎ

자 그럼 내려가 봅시다~

# 단항 연산자

자, 뜬금없이 단항 연산자가 무엇이냐?

단항. 즉 항이 하나인 연산자 입니다.
실생활에선 없죠?ㅎ

실생활에선 이항연산자가 거의 대부분이니깐요 ^^
C에선 심지어 3항 연산자도 있어요 ㅎㅎㅎ
고거는 조건문 할때 같이 해드릴게요. 혹시 빼먹으면 말씀해주세요 ㅎㅎㅎ

위에서 썼던 i++은 단항연산자 입니다.
이항 연산자는 우리가 흔히 아는 +, -, *, / 등이예요. 이것은 필히 항이 두개가 필요하죠. 1+2 처럼 말예요.

다시 돌아와서 단항연산자는 두 가지가 있습니다. 변수의 앞에 붙는 것과 뒤에 붙는 것.
++i처럼 앞에 붙게되면, ++i가 속한 그 한 줄을 시작하기 전에 i에 1을 더해줍니다.
반대로 i++처럼 뒤에 붙게되면 i++이 속한 그 한줄을 끝낸 후 i에 1을 더해줍니다.
이해되시나요?

--i와 i--도 마찬가지 입니다.

자, 이렇게 설명을 해 드리면 코드가 조금씩 감이 오실까요?ㅎ

만약에 한 줄에 아무것도 작성하지 않고 i++;이라고 작성해도 i에 1이 더해지는 효과를 봅니다.
반대로 ++i;해도 결과는 똑같죠. 왜냐면 그 한 줄에서 i++이나 ++i가 처음이자 마지막이니까요 ㅎ
즉, i=i+1을 귀찮게 안하려고 요런식으로 표현하기도 합니다. 또 i=i+1을  i+=1이라고 표현하기도 합니다.
i=i-1을 i-=1이라고도 표현하구요...ㅎㅎ

궁금한 점이 있으시면 언제든지 질문 주세요~! ^^

by yagom

p.s 제 포스팅을 RSS 피드로 받아보실 수 있습니다.

RSS Feed 받기   


↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? ^~^ 사랑합니다~ ↓↓↓
저작자 표시 비영리 변경 금지
신고

'C' 카테고리의 다른 글

C <7>. 조건문(2) switch  (6) 2011.12.14
C <6>. 조건문(1), if, else  (6) 2011.12.11
C <5>. 반복문(1), 단항 연산자  (2) 2011.12.08
C <4>. 실수 표현 방법  (2) 2011.12.04
C <3>. 변수. Variable  (4) 2011.12.02
C <2>. 주석(Comment)  (2) 2011.11.29
Posted by yagom


티스토리 툴바