반응형

안녕하세요~ 에르의 생각발전소 입니다 :)

이번 시간에도 스코틀랜드 에딘버러 여행 3편! 

SCOTLAND EDINBURGH TRAVELING PART3

시작해보도록하겠습니다!

첫날 와인을 짠~하게 걸치고 잤더렜지요!

(새벽에 갈증 덕분에 물 1.5L는 마신 듯해요.. ㅋㅋㅋ)

시내로 가기위해 집에서 2분거리에 있는 정류장으로 향합니다!.

그냥 " BUS STOP " 이라고 푯말 하나 딱 세워져있습니다.. 











버스 요금입니다 :)

우리나라 기준으로 비싼 편입니다 :(

그리고 주말이 되면 운행 횟수가 현저히 줄어듭니다..






바로 우측 사거리에 버스 정류장이 있습니다.

패딩을 입은 이유는 날씨도 쌀쌀했고,

무엇보다도, 비가 간혈적으로 내리기 때문에

우산 대신 필수라고 봐도 될 것 같습니다..

버스타고 약 20분 뒤 에딘버러 시내에 도착했습니다 :)

앞에 시계탑이 있는 건물 보이시죠?

저런 건 정부기관이 아니라, 그냥 개인건물이라고 하더라구요.

저런 건물이 에딘버러에는 넘쳐난다는,

뭔가 중세와 근대 사이를 여행하고 있는 느낌?

스코틀랜드의 신호등은 wait이라고 표시된 버튼을 눌러야 약간의 기다림 후  파란불로 바뀝니다.

보행자가 없을 땐 원활히 자동차가 이동할 수 있도록 배려를 한 듯 해요.

비가 와서 바닥이 촉촉히 젖었네요.

근데 몇분 뒤에는 또 비가 안내려요.

스코틀랜드에서는 하루에 6가지 날씨를 볼 수 있습니다 ㅋㅋ

1)  맑음

2) 흐림

3) 비 

4) 우박 

5) 눈

6) 바람.


쨍쨍하다가도 갑자기 눈이 내리고 우박이 떨어지는게 이곳 날씨에요 ㅋㅋ.


건너편 건물들 보이시나요?

여러분들 머릿속의 진짜 유럽에 온것만 같은 

멋진 인테리어들!

감탄이 절로 나옵니다.

1층에 TOPSHOP, TOPMAN이라는 글귀가 눈에 띕니다.

뷰티 이런 상점이였던걸로 기억하는데 확실히 기억이 안나네요 ㅎㅎ..

할머니분들이 유모차에 손주를 태워가시면서 담배피우시는 모습이

아직도 머릿속에 남아있네요..

쪼끔 충격이였어요.


우측에 보이는 빨간 버스들이 관광 버스입니다!

대구광역시에 가셔도 위와 같은 투어버스를 운영하고 있는데요.

영국에서도 역~시 이용하고 있고

거의 모~든 버스는 2층버스입니다. (물론 에딘버러에요 :))

우측 라인이 역앞인데 투어버스들이 즐비해 있으면서도

제일 유명한 에딘버러 금고 고스트 투어도 있답니다 :)

앞에 타워가 이뻐 사진을 찍었는데, 

여사님도 무슨 타워인지는 모르신다고하시네요..

나름 랜드마크인것 같은데

우측에 즐비한 검은색 차량들은 택시입니다!

거리당으로 택시비가 책정되지만,

기본적으로 요금이 썐 편이니,

꼭 참고하세요.

CITY SIGHTSEEING 투어버스입니다.

관광을 다녀도 유난히 일본어 중국어는 잘보이는데

한국어는 본적이 없어요.

참.. :(

에딘버러 광장 가는 길에 있는 계단입니다. 

매우 인상적이에요.

건물 사이에 계단이 뙇! 있씁니다.

이쁘장하게 이끼도 끼어있구요.

참 매력적이지않나요?

(꽤 경사가 거칩니다.)

계단 좌측으로 보시면 짜잔! 베스트사진입니다.

 카페들과 여러가지 샵들이 모여있습니다.

저길 삐이이잉~돌아가면 전장에 계단과 목적지가 같습니다.

물론 또 샛길이 있찌요.

계단 옆 건물 전경입니다.

에딘버러 건물들이 높은 이유는 전편에서  말씀드렸죠?

저 동상이 JAMES 몇세 였던 걸로 기억합니다. 청동상이겠지요?

스코틀랜드에서 현대만 보이고 기아차는 거의 못봤어요.

대부분 혼다 도요타, BMW, AUDI,BENZ,  현대 등등 

저 앞에 보이는 푯말과 후드를 뒤집어쓴 남자 보이시나요?

고스트 투어 금고체험 스테프입니다! 

1인당 약 12파운드이며, 절~대 후회하지않습니다 :)

고스트 투어도 포스팅하도록 하겠습니다 :)

여기도.. 고스트 투어 전에 찍은 사진인데,

상당히 사연이 있는 골목입니다.

살인마와 관련된 얘기입니다 크흐흐..

궁금해요?

그럼 다음편으로~ 크크..

2016/05/04 - [스코틀랜드 ♫] - 160504 스코틀랜드 에딘버러 여행 2편 Scottland Edinburgh Traveling Part2


2016/05/03 - [스코틀랜드 ♫] - 160503 스코틀랜드 에딘버러 여행기 Part 1


2016/04/22 - [스코틀랜드 ♫] - 160422 에버딘 탐방기 애플스토어 후기 ! ABERDEEN TOURING :) APLLE STORE REVIEW.


2016/04/22 - [스코틀랜드 ♫] - 160421 스코틀랜드 택시, 헌틀리 탐방기!(기차) scotland huntly walking :)


2016/04/17 - [스코틀랜드 ♫/비자♫] - 160417 영국 비자시스템- 배우자비자, 피앙세비자에 대해서 2편 [번역본]


2016/04/16 - [스코틀랜드 ♫/비자♫] - 160416 영국 비자시스템- 배우자비자, 피앙세비자에 대해서 1편 [번역본]


2016/04/14 - [스코틀랜드 ♫] - 160414 스와로브스키 크리스탈라인 오발 로즈골드 손목시계 [swarovski crystalline oval rose gold bracelet watch ] 영국 직구매후기 :)


2016/04/09 - [스코틀랜드 ♫] - 160407 스와로브스키 해외직구 및 해외결제수수로 계산법 ♫


2016/04/09 - [스코틀랜드 ♫] - 160406 영국 입국심사 후기 및 TP!


2016/04/09 - [스코틀랜드 ♫] - 160404 스코틀랜드로 출국! 인천공항 밤샘..


반응형
by 발전소장 에르 :) 2016. 5. 9. 21:26
반응형

안녕하세요~ 에르의 생각발전소입니다 :)

옵셔널은 잘 끝내셨나요?

이번 시간에는 함수에 대해서 겉만 살짝 다루보도록 하겠습니다.

저번에 이용한 코드를 그대로 가져와서, 

응용해보도록하겠습니다 :)






let Movie : String = "Death Note"


var ratings : [Double]? = nil


var officialUrl = "www.deathnote.com"


ratings = [4.5, 3.5, 2.5, 1.5, 4.5, 0.5]


// ratings 값을 초기화시켜보도록하겠습니다!

func funcratings (history:[Double]) -> (average:Double , min:Double, max: Double) {

    

    // history:[Double] 더블타입으로 평균, 최소값, 최대값을 지정해준다.


var sum = 0.0, min = history[0], max = history[0]


// sum 모든 값을 더할 것이고~


    // min max 히스토리의 첫번째 값을 가진다!


    for value in history {


    // for~ in문을 돌려봅시다!


        if min > value { min = value }


    // 만약 최소값이 값보다 크다면, 값이 최소값을 가진다.

    

        if max < value { max = value }


    // 최대값이 값보다 작으면 값이 최대값이 된다.

    

        sum += value


    // sum에는 모든 값들을 더한다.

    

    }


let average = sum/Double(history.count)


// 평균은 sum history 카운트 갯수로 나누어서 평균값을 구한다.

        

    return (average, min, max)

// 그리고 return값으로 평균 최소 최대값을 반환한다!

    

}



var movieInfo: String = "\(Movie)"


if let conratings = ratings {

    

    let history = funcratings(conratings)

    

    // 이제 history funcratings이며! funcratings conratings이다!

    

    movieInfo += "has \(conratings.count) ratings. \r\n average is \(history.average) from \(history.min) to \(history.max) ."

 

    // \r\n 한줄띄우기! 백슬레쉬에요 저번에 정슬레쉬로 설명드렸는데,

    // 사실은 백슬래쉬였답니다..어찌됬건

       

}

movieInfo += "\r\n let's contact our page : \(officialUrl)"




print("\(movieInfo)")



Death Notehas 6 ratings. 

 average is 2.83333333333333 from 0.5 to 4.5 .

 let's contact our page : www.deathnote.com 


//라는 최종적인 결과를 표출하였습니다.


// 함수는 일종의 도구이며,


// 본인 스스로에게 적합한 도구를 만들어, 적절한 시기에 사용하시면 됩니다!


// 함수를 얼마나 잘 만드냐, 적절하게 잘 설계를 하냐는 다~ 개발자의 재량이며, 가치입니다.


// 고로, 열심히 공부하여, 우리의 가치를 증진시켜봅시다 :)))


반응형
by 발전소장 에르 :) 2016. 5. 8. 00:00
반응형

안녕하세요~ 에르의 생각발전소입니다 :)

이번 시간에는 옵셔널의 마지막편입니다!

Force Unwrapping

Optional Binding

Implicitly Unwrapped Optional 

위 세가지 중  옵셔널과 임플릭시티 언렙 옵셔널에 대해서 알아보겠습니다:)

지난번 다뤄보았던 코드들 그대로 가지고 계신가요?!

시작해보죠.





if let conratings = ratings {

    

    //  if let conratings = ratings 새로운 상수 선언 대입!

    

    movieInfo += "has \(conratings.count) ratings."

    

    //ratings.count 또한 conratings.count 변경!

}


if let conofficial = officialUrl { // 홈페이지주소가 값이 아니라면,


  movieInfo += "/r/n let's contact our page : \(conofficial)"

    

    // 무비인포에 위의 문장을 더한다. /r/n 한줄 띄움임.

    

}


print("\(movieInfo)")


// 포스언렙핑 말고 다른 방법도 있음!

// Optional binding : if var , if let 으로 옵셔널사용을 최소화하기 위해 변수나 상수를 새로 만드는 것임.


var officialUrl : String! = nil


// 처음에는 nil이지만 나중에 어떻게든 무조건 값을 받을 경우는 implicity unwrapped optional방식을 사용하여

     

     타입뒤에 ! 붙임! 그렇게 되면?!

officialUrl = "www.deathnote.com"


// if let conofficial = officialUrl { // 홈페이지주소가 값이 아니라면,


//  movieInfo += "/r/n let's contact our page : \(conofficial)"

    

    // 무비인포에 위의 문장을 더한다. /r/n 한줄 띄움임.

    

// }


movieInfo += "/r/n let's contact our page : \(officialUrl)"


// 위에 if let conofficial 필요없이 바로 옵셔널이 아닌것 마냥 쉽게 사용이     가능함!


print("\(movieInfo)")


// 포스언렙핑 말고 다른 방법도 있음!

// Optional binding : if var , if let 으로 옵셔널사용을 최소화하기 위해 변수나 상수를 새로 만드는 것임.


// 마지막으로 Implicitly Unwarrped Optional 있음!

// 옵셔널 선언 나중에는 반드시 값을 가지게 값에게 방법을 사용할 있음!

// 보다 효과적임.


// 옵셔널은 스위프트에서 매우 중요한 부분이니, 다시 한번 제대로 되새겨주세요!


반응형
by 발전소장 에르 :) 2016. 5. 7. 21:50
반응형

안녕하세요~ 에르의 생각발전소입니다! :)

이번 시간에는 스위프트의 꽃!

옵셔널을 빼고 스위프트를 안다고 절대 할 수 없죠!?

드디어 이번 시간에는 Optional 에 대해서 알아보겠습니다!


시작해볼게요 :)










// 스위프트의 꽃인, optional


// Nil 값이 없는 무의 상태를 의미함.


// 특히 0 NIL 개념은 다름. 0 정수가 있다는 얘기임.


// Optuonal : 프로그래밍의 안전벨트, 실행 Nil 돠어 프로그램 크래쉬를 일으킬 있는 변수를 특별히 관리한다는 것임


// 스위프트의 장점이자, 단점인데 결론적으론 좋은 장점임!


// 옵셔널을 만드는 방법은 TYPE뒤에 ? 붙이면 .


// EX: NAME:TYPE? = VALUE


let Movie : String = "Death Note"


// 데스노트라는 값은 가진 스트링타입의 무비네임을 가짐 변수임.



var ratings : [Double]? = nil


// 평점을 더블타입으로 nil값을 주어서 선언함.

var ratings : [Double]? = nil


// 평점을 더블타입으로 nil값을 주어서 선언함.


// 허나 포스 언렙핑을 사용했음에도 불구하고 코드가 확실히 죽어버림.

왜냐하면, 값이 결국은 없기 때문임.

고로 이 방법을 사용하면, 빠른 길을 머어어어어얼리 돌아가야하는 결과가 나옴. :(


officialUrl = "www.deathnote.com"


// 일단 홈페이지 주소를 부여함.


var movieInfo: String = "\(Movie)"


// 무비지인포라는 스트링타입의 변수를 선언하고 무비인포는 무비라고 초기화함.


// ratings != nil 에서 ratings는 nil이 아니다! 라는 연산자입니다! (!= NOT)

// 그래서 ratings는 nil값이 아니라고 선언을 했으니!! 문제가 없음!


// /r/n는 한줄 띄움임! 앞으로 자주 사용하실거에요 :)

// officialUrl != nil 이 nil값이 아니라면,

movieInfo에 위 문장을 더한다~!


// 앞에 Optional이 보기 싫고 불완전하게 코딩이 되었으니!


// 짜잔!. officialUrl에 ! 를 붙여서 포스 언렙핑을 시켜서

// 완변히 만들어줍니다 :)

다음 시간에는 ~ ? Optional binding 과 Implicity Wrapped Optional 에 대해서 

다루어보도록하겠습니다!

2016/05/05 - [프로그래밍발전소 ♫] - 160505 Swift 구문편! if, for, switch 까지!


2016/05/05 - [프로그래밍발전소 ♫] - 160505 Swift Collection: Dictionary 와 Set


2016/04/25 - [프로그래밍발전소 ♫] - 160424 collection Array 편 :)


2016/04/23 - [프로그래밍발전소 ♫] - 160423 Swift Tuple, Typealias 편 ! :) 튜플과 타입얼라이어스


2016/04/20 - [프로그래밍발전소 ♫] - 160419 Swift part.2 String과 Numbers에 대해서


2016/04/19 - [프로그래밍발전소 ♫] - 160418 swift 란? 스위프트 언어에 대해서 알아봅시다. let과 var편



반응형
by 발전소장 에르 :) 2016. 5. 7. 03:23
반응형

안녕하세요~ 에르의 생각발전소입니다!

저번 시간에 다뤄보았던 Dictionary, Set, Array에 이어,

이번에는 코드의 생명. 

연산자 파트에 속하는 구문에 대해서 살~~짝 알아보도록 하겠습니다! :)\











// if = 조건의 따른 분기문임.


//    if condtion {  ...

//    } else {

//       ...

//     }    //

//  위와 같은 구조를 가짐.


// if 조건이 참이면 else 앞의 구문이 실행되고,

// 거짓일 경우 else 뒤의 구문이 실행된다.


// 전편에 사용했던 변수를 이용하여, if문을 만들어보겠습니다.



if intersect.count > 0 {

    print("두개의 팀에 모두 소속돤 학생은 \(schoolTripTeam1) 입니다.")

} else {

    print("두개의 팀에 모두 소속된 학생은 없습니다.")

}


// intersect 학생수가 0보다 많으니 참이므로, else 앞의 구문이 실행됨.


// 위와 같은 조건식으로 if문을 작성하여 구동하실 있습니다.


// for 구문 : 범위 또는 컬렉션의 반복 구문.


/* for ; 반복조건 ; 증가값 {...

    

 } for item in collection { ...

 

 }   

  */


for studentName in schoolTripTeam1 {


    print("\(schoolTripTeam1) 1 소속된 학생이 맞습니다.")


}


// for switch 구문, 다양한 변수의 경우를 집어 넣을 사용.


for (name, scale) in SeminaRooms  {

    // SeminaRomms 스트링값을 name 인트값을 scale 할당받음.

    

    let roomInformation:String

    //새로운 스트링 타입 상수를 만들어 케이스를 가정하나, print 사용해도됨.

    switch scale { // scale 스위치로 사용하겠다~


    case 4:

        // 스케일이 4라면!?

        roomInformation = "\(name) 작은 방이며. \(scale)명을 수용할 있는 규모의 방입니다."

    

    case 5...10:

        //스케일이 5~10까지라면?

        roomInformation = "\(name) 중간 규모의 방이며, \(scale)명을 수용할 있는 규모의 방입니다."

    

    case 11...20:

        // 스케일이 11~20까지라면?

        roomInformation = "\(name) 규모의 방이며, \(scale)명을수용할 있는 규모의 방입니다."

    

    case 21...30:

        //스케일이 21~30까지라면?

        

        roomInformation = "\(name) 별도의 예약이 필요한 방이며, \(scale)명을 수용할 수있는 규모입니다."


    default:

        // 디폴트를 통해서 네가지 이외의 변수가 발생할

        // 해당값을 실행한다! 라고 모든 변수를 충족시켜줘야만 !

        roomInformation = "\(name) 이하의 방은 없습니다."

        

    }

}


for (name, scale) in SeminaRooms  {

    

    let roomInformation:String

   

    switch scale { 

    case 4:

        

        roomInformation = "\(name) 작은 방이며. \(scale)명을 수용할 있는 규모의 방입니다."

    

    case 5...10:

       

        roomInformation = "\(name) 중간 규모의 방이며, \(scale)명을 수용할 있는 규모의 방입니다."

    

    case 11...20:

       

        roomInformation = "\(name) 규모의 방이며, \(scale)명을수용할 있는 규모의 방입니다."

    

    case 21...30:

  

        

        roomInformation = "\(name) 별도의 예약이 필요한 방이며, \(scale)명을 수용할 수있는 규모입니다."

    default:

       

        roomInformation = "\(name) 이하의 방은 없습니다."

        

    }

}


// 주석을 삭제한 코드 전문입니다.!


// 도움 되셨길 바랍니다!



반응형
by 발전소장 에르 :) 2016. 5. 6. 02:10
반응형

안녕하세요~ 에르의 생각발전소입니다 :)

이번 시간에는 Tuple 과 Typealias를 다뤄볼 건데요.

스위프트의 장점이고 장점인 만큼 많이 활용되는 파트이니,

주의깊게 살펴봐주세요!

자! 그럼 시작해보겠습니다.






상수로된 튜플인 time1을 생성하였고 2, 43, 1 이란 값들을 괄호 묶었습니다.   (사진의 오타는 애교로..)

2란 값을 불러오고자하면 0을 42이라는 값을 불러오고자하면 1을 쓰시면 됩니다.

대게 첫번째 숫자니 1부터 시작할거라 생각을 하시고 실수를 많이들 하시는데,

시작은 0 부터 입니다! 참고해주세요!

튜플의 값에는 플롯, 스트링, 섞여들어가도 무방한데요. 

예로 하나 만들어보았습니다.

language라는 스트링 타입의 값과. 11이라는 정수값은 가진 값이 ex라는 튜플안에 속해있는 모습니다.

똑같이 0,1,2 순번으로 시작됩니다.

물론 0, 1, 2 대신 문자로 변경이 가능한데요.

위 화면은 0,1,2 대신 hour, min, sec 로 변환시킨 모습입니다.

상황에 맞게 바꾼다면, 더 유용하겠죠?

튜플을 튜플로 또 묶는 건데요.

각 3개의 값을 가지고 있는 두 개의 튜플을 하나의 다른 튜플로 묶은 코드입니다.

일종의 사슬을 만들어준다고나 할까요?

begin이 time1, done이 time2 를 가지고 있는 모습입니다.



그럼 묶여있는 값중 최하위 값을 불러오고 싶다~고 하시면 

file:///Users/Logan/Desktop/Screen%20Shot%202016-04-22%20at%2011.05.56%20pm 이런 컴퓨터디렉토리 주소처럼


done에 있는 hour값을 불러야겠죠?

done.hour은!?

done = > time2

time2:( hour:Int, min:int, sec:int ) = ( 1, 51, 15 ) => hour => 1

이라는 값이 나오게되겠죠?



이번에는 타입 얼라이어스입니다!

위 화면은 타입 얼라이어스를 설명하는 글입니다. 

typealias AudioSample = UInt16 이다.

var maxAmplitudeFound = AudioSample.min 이면, 0이다.

왜냐하면 UInt16의 최저값은 0이니까요.

이 처럼 타입 얼라이어스는 다른 이름으로 존재하는 값을 정의합니다.

time 이라는 타얼을 만들어 (h:int, m:int, s:int) 라는 타입을 정의하

period 라는 타얼을 만들어 start:time, end:time으로 타입을 정의했습니다.

period 타얼 안에 time의 타입이 들어갔지요? 



let now:period = ( (6,20,13) , (11,2,56) ) 로 start:time에 값을 주고 end:time에도 값을 각각 부여했습니다.


그럼 time이 start와 end로 된 period안에 들어가있고 start = 6,20,13이며, end는 11,2,56이네요.


print("we played a game until \(now.end.h) today. ") 라는 코드를 입력해


값을 불러오고자한다면, 추적해봅시다!


 now =  period, period =  (start:time. end:time) , end:time = 11,2,56 = h:11 , m:2, s:56 = h ==> 11 


이라는 결론에 도달하게 되는거죠!


이해가 되셨는지요!


쉽쥬?

반응형
by 발전소장 에르 :) 2016. 4. 23. 09:00
| 1 2 |