반응형

[Swift 입문] Swift 기본 문법 알아보기 2탄


1. 배열( Array )

C언어 보다는 파이썬을 많이 닮은 친구입니다.


선언의 방식은 다양하지만, 전부 Array형태로 선언되었다는 것을 알 수 있습니다.


파이썬을 해보신 분이라면 '어?' 하실 수 있습니다. ( 저작권 흠... )


다만, 사용하는 함수들이 조금 다릅니다. 물론 같은것도 많이 있습니다.


기능적으로는 거의 구현되어 있기 때문에 아래처럼 ' . '을 붙여보시면 많은 것들을 볼 수 있고, 한번씩 수행해보시면서 익히면 될 듯합니다.




2. 딕셔너리( Dictionary )

이건 Array보다 심합니다. 파이썬 dict랑 똑같거든요...


차이점이라면, 파이썬은 { ~~~ } 였다면, Swift는 [ ~~~ ]라는 것... ( 흠... )



사용하다보니 파이썬과는 조금 차이가 있다는 것을 느낄 수 있었는데, 현재 언급할껀 아닌거 같습니다.


참고로 위의 Array도 그렇고 Dictionary도 마찬가지인데, C언어처럼 메모리에 한줄로 데이터를 이쁘게 정렬하지 않습니다.


이건 파이썬에서 보여지는 특징인데, 예를들어 Array로 선언된 변수가 있다면, 변수에 저장되는 것은 각 인덱스들에 저장된 데이터의 주소값을 갖고있습니다.


즉 A[0] ~ A[3]까지 값이 있을때, C언어는 A[0]에는 실제값 0이, A[1]에는 실제값 1이 들어있는 형태라면,


여기서는 A[0]은 0이라는 데이터가 존재하는 곳의 주소가 존재합니다.


덕분에 인덱스로 값을 조회할 때 C와 다르게 값을 중간에 삽입하거나 삭제하는 것이 자유로운 장점을 갖을 수 있었다고합니다.


( 흠... 정말일까... 나중에 한번 메모리 뜯어가면서 확인해보겠습니다. )




마지막으로 위에 그림은 [ 집합( set ) ] 입니다만,,,


별도로 설망드리지 못한 이유는... 저 순서가 왜 섞이는지 모르겠어서...입니다.


Set의 특징은 중복을 허용하지 않는다는 것입니다. 때문에 파이썬에서 List (~= Array)에서 중복을 제거할 때, Set으로 형변환을 했다가 다시 List로 만들어주는 방법을 종종 사용했었죠.


크흠...


이 정도면, 기본문법은 끝난거 같습니다. 다음에는 함수의 정의와, 몇몇 자주 사용하는 함수들을 적어보고, 클래스와 구조체로 넘어가보겠습니다.



2019/03/18 - [프로그래밍/Swift] - [Swift 입문] 1. 시작하기

2019/03/18 - [프로그래밍/Swift] - [Swift 입문] 2. Project 시작하기

2019/03/18 - [프로그래밍/Swift] - [Swift 입문] 3. 에뮬레이터로 앱 실행하기

2019/03/18 - [프로그래밍/Swift] - [Swift 입문] 4. 앱 아이콘 설정하기

2019/03/18 - [프로그래밍/Swift] - [Swift 입문] 5. LaunchScreen 만들기

2019/03/18 - [프로그래밍/Swift] - [Swift 입문] 6. Swift 문법 알아보기


반응형
반응형

[Swift 입문] Swift에서 사용하는 기본 문법 알아보기

2~5까지의 게시물에서는 앱의 틀이 되는 View를 만드는 과정을 알아봤습니다. 눈에 보이는 부분이죠.

이제부터 시작하는 강의는 우리가 만든 앱에 기능을 부여해주기 위한 Swift 코딩에 대해 정리해보겠습니다.


1. 기본 연산자


기본적으로 위와같은 연산자들을 지원합니다. C언어랑 똑같네요.


물론 위에있는 연산자들이 전부는 아닙니다. ( 나머지는 나중에~ )


2. 조건문

조건문 역시 전통적인 방법을 많이 사용하고 있습니다.


If와 Switch 문법이 있습니다.





위와 같이, C와 큰 차이가 없습니다. 다만, 특이점이라면, switch문제 break를 명시하지 않아도 다음 case를 판단하지 않는다는 것과, default가 필수적으로 존재해야한다는 것뿐입니다.



3. 반복문

반복문도 for와 while 두 가지를 사용합니다. 다만 C언어의 for문이 아니라 파이썬에서의 for문과 유사하게 생겼습니다.

아래 [ ... ] 으로 연결된 부분은 1~5까지를 의미합니다. 다른 언어처럼 마지막 숫자 5를 빼거나 하지 않고 1~5까지 모두 i의 값이 됩니다.




위와 같은 상황만 있다면 불편하겠죠. 무조건 1씩 증가하니까요.


그래서 아래와 같은 문법도 있습니다. 1~10까지 2씩 증가하면서 i에 넣는거죠.




배열을 넣어줄 수도 있습니다.


파이썬이랑 비슷해서 혹시나 하는 마음에 My_list라고 변수명을 만들어서 사용해봤는데, 파이썬이랑 똑같이 작동하더군요.



다음으로 자칫 무한반복으로 가버리기 쉬운 while문 입니다.


조건을 만족하면 계속 반복하는 친구입니다.


아래와 같이 직관적으로 사용할 수 있습니다.


마지막으로 repeat라는 녀석이 있습니다.


생소한 이름이지만, C언어에서 do-while문을 생각하시면 한번에 이해가 될 것입니다.


첫번째 실행은 조건없이 수행하라는 뜻이죠. ( 두번째 반복부터는 while문과 동일합니다. )




요까지하고, 다음으로는 Swift의 배열과 딕셔너리를 다뤄보겠습니다.


2019/03/18 - [프로그래밍/Swift] - [Swift 입문] 1. 시작하기

2019/03/18 - [프로그래밍/Swift] - [Swift 입문] 2. Project 시작하기

2019/03/18 - [프로그래밍/Swift] - [Swift 입문] 3. 에뮬레이터로 앱 실행하기

2019/03/18 - [프로그래밍/Swift] - [Swift 입문] 4. 앱 아이콘 설정하기

2019/03/18 - [프로그래밍/Swift] - [Swift 입문] 5. LaunchScreen 만들기





반응형
반응형

[Swift 입문] Launch Screen 설정해주기

1. Launch Screen이란?

Launch Screen은 카카오톡이나 네이버웹툰등을 실행할때 표시되는 화면입니다.


아래 그림과 같은 것들이죠.




2. Launch Screen 만들기

이것또한 너무 간단합니다.


여직까지 작업했던 Main.storyboard외에 아래에 LaunchScreen.storyboard 라는 녀석이 있습니다.


클릭하면 아래와 같이 나옵니다.



네, 똑같습니다...


더 이상의 설명이 필요할까요?


예쁘고 간단하게 여러분도 뚝딱 만들어보세요.




2019/03/18 - [프로그래밍/Swift] - [Swift 입문] 1. 시작하기

2019/03/18 - [프로그래밍/Swift] - [Swift 입문] 2. Project 시작하기

2019/03/18 - [프로그래밍/Swift] - [Swift 입문] 3. 에뮬레이터로 앱 실행하기

2019/03/18 - [프로그래밍/Swift] - [Swift 입문] 4. 앱 아이콘 설정하기



반응형
반응형

[Swift 입문] 아이콘 설정하기

1. 아이콘 설정하기

너무너무 간단합니다.

15초컷



위와같은 순서로 이동하시면 아이콘을 설정하는 창이보입니다.


그냥 넣으면 끝입니다. 너무 간단하죠 ㅠㅠ


1x, 2x, 3x 라고 적혀있는것들이 있는데, 이건 디바이스별로 지원하는 해상도가 조금씩 다르다보니 개발자가 원할경우 '3x'에는 '1x'보다 3배더 높은 해상도의 아이콘을 넣을 수 있습니다. 기본이 20pt면 60pt까지 가능하다는 말이겠죠?


ㅎㅎ 이상입니다.


다음편도 간단한 LaunchScreen 설정에 대한 부분을 다루겠습니다 ㅎㅎ


2019/03/18 - [프로그래밍/Swift] - [Swift 입문] 1. 시작하기

2019/03/18 - [프로그래밍/Swift] - [Swift 입문] 2. Project 시작하기

2019/03/18 - [프로그래밍/Swift] - [Swift 입문] 3. 에뮬레이터로 앱 실행하기




반응형
반응형

[Swift 입문] 3. ImageView 만들고 에뮬레이터로 확인하기

이번에는 ImageView를 이용해 이미지를 추가하고, 현재까지 만든 앱을 에뮬레이터에서 실행해보겠습니다.


1. ImageView

ImageView는 이름에서 느껴지듯이 이미지를 보여주기 위한 Object입니다.

앱에 이미지를 추가하는 방법은 아래순서입니다.

[ Assets.xcassets 폴더에 이미지 추가 -> 이미지뷰 생성 -> 이미지뷰에서 폴더의 이미지를 갖고옴 ]

위의 순서입니다. 간단하네요.

저는 제 블로그 화면을 이미지로 쓰겠습니다.



왼쪽에 "Assets.xcassets" 폴더를 클릭하시고, 원하는 이미지(저는 블로그 스샷)를 폴더로 옮겨주시면 1단계 끝



이전에 Object 추가하는 방법과 동일하게, "ImageView" 를 추가해주세요.


그리고 위 사진처럼 우측에 Image의 아래 화살표를 클릭하면 조금전 "Assets.xcassets" 폴더로 옮겼던 이미지가 존재하는 것을 볼 수 있습니다.


클릭해주세요.



짠~!



조금 아래 공간이 많이 비네요...


Text View도 추가해주겠습니다. ㅎㅎ



뿝~!



2. 에뮬레이터로 실행해보기

Xcode의 상단을 보면 아래 그림과 같은 부분을 볼 수 있습니다.

어떤거냐면 Build된 앱을 어떤 IOS 디바이스에서 실행시켜볼 것인지를 선택하는 부분입니다.


클릭해보시면 아래그림처럼 다양한 디바이스들이 보여지고요.


저는 아이폰이 없는 관계로 나중에 저의 iPad에서 동작시킬 예정이기에 iPad 6세대를 선택했습니다.



끝났으면 아래 그림처럼 시작버튼을 눌러주세요.





그럼 위와같이 Build 중이라는 진행바가 보이게됩니다. 


두둥~


빌드가 끝나면 위와같이 아이패드 에뮬레이터가 부팅되는 것을 볼 수 있습니다. 그리고 부팅이 완료되면 자동으로 아래와 같이 만든 앱이 실행되는 것을 볼 수 있습니다.



ㄷㄷ;;



 



 실패해버렸습니당...;;


 이걸노린건 아니었는데,,,










storyboard 하단에 디바이스를 정해주는 곳이있습니다.. iPhone8로 되어있어서 iPad로 변경해서 다시 해주었습니다...ㅠㅠ





이번에는 다행히 이쁘게 잘 나왔네요 ㅎㅎ


이상으로 이번 포스터를 마치겠습니다.


다음포스터에서는 아래 같이 표시되는 아이콘 디자인을 바꾸는 방법을 알아보도록 하겠습니다~!!


2019/03/18 - [프로그래밍/Swift] - [Swift 입문] 1. 시작하기

2019/03/18 - [프로그래밍/Swift] - [Swift 입문] 2. Project 시작하기




2019/03/18 - [프로그래밍/Swift] - [Swift 입문] 1. 시작하기

2019/03/18 - [프로그래밍/Swift] - [Swift 입문] 2. Project 시작하기


반응형
반응형

[Swift 입문] 2. Swift, Project 생성과 View 수정하기

1. project 시작하기

시작에서 Start Project를 누른 후 IOS로 시작하곘습니다.

아래와 같이 이동해주세요.


Next를 누르면 아래와 같이 나오게됩니다.



Product Name가 실제 앱의 이름이 되는 부분이며, 나머지는 보이는 것 처럼 ㅎㅎ


프로젝트를 만들면 좌측 Project Navigator에 아래와 같은 파일들이 표시되는 것을 볼 수 있습니다.






.swift 파일은 swift의 소스파일이 됩니다.

storyboard는 GUI에 대한 부분입니다. (안드로이드 스튜디오에서 view를 만드는 부분같네요.)


< storyboard 파일 클릭시 화면 >



2. View에 Object 추가하기

아래 그림과 같은 순서입니다.

우측 상단에 버튼을 누르면 오브젝트를 추가할 수 있는 팝업이 보이게됩니다.

여기서 Label, TextArea등을 추가하여 화면에 갖고가면 그림 왼쪽과 같이 View에 새로운 Object가 추가되는 것을 볼 수 있습니다.



Object를 추가하고 클릭하면 우측에 해당 Object에 대한 설정창이 나옵니다.(영어...)


필요에 따라서 추가하고 만지작거려주시면 되겠습니다.



Object의 종류에 따라서 설정이 다 다르고, 너무 많다보니 하나하나 적기가 힘드네요.


꼭 필요한 내용만 틈틈히 적고 나머지는 그때그때 필요에 따라 구글링을 하는 쪽으로...



이번 글도 여기서 끝내겠습니다.


다음에는 많이 사용하는 ImageView와 TextView등을 추가하고 에뮬레이터로 실행까지 해보겠습니다.



2019/03/18 - [프로그래밍/Swift] - [Swift 입문] 1. 시작하기


반응형
반응형

[Swift 입문] 1. Swift 프로그래밍 시작

아이패드와 맥북에서 GUI로 조작할 수 있는 간단한 프로그램을 만드는 것을 목표로 하고있습니다.

배우면서 동시에 배운내용을 정리하는 용도로 작성하기 때문에 내용이 틀릴 수 있습니다.


1. Swift 시작하기

Xcode를 실행하고 먼저 맨 위에 [ Get started with a playground ] 를 클릭합니다.




시작은 Blank(빈파일) 에서 시작하겠습니다.


클릭하고, 적당히 저장위치를 설정하시면 아래와 같이 준비가 끝나게됩니다.



위와 같이 준비가 되면 이제 시작하겠습니다~!!



2. 변수와 상수

모든 언어의 시작은 변수와 상수에서 시작된다고 생각합니다.


선언방법에 있어서 다른 언어와 조금 차이가 있습니다.


C와 파이썬의 중간정도(?) 라고 저는 생각합니다. 왜냐하면, 변수임을 명시해줘야하지만, 어떤 타입의 변수인지를 명시할 필요는 없기 때문이죠.


var x = 10 let y = 10 x + y

위에서 var는 변수, let은 상수로의 선언을 의미합니다.


< 실행화면 >


3. 자료형

다른 언어와 마찬가지로 Swift도 자료형을 갖고있습니다.

자료형 선언에 있어서 특징은 아래와 같습니다.

1) 한번 정해진 변수의 자료형은 변경될 수 없습니다.
2) 변수 선언시 초기값이 있으면 알아서 자료형을 결정합니다.
3) 변수의 자료형을 정해줄 때에는 "var 변수명:자료형" 형태로 선언합니다.

아래는 예시 입니다.


위의 결과를 보시면 Float와 Double의 경우 우측에 표시된 값이 처음 입력한 초기값과 다른것을 알 수 있습니다.


C와 같이 자료형의 최대값이 존재하고, 넘어갈 경우 Overflow가 발생할 수 있다는 것을 알 수 있습니다.

( C언어처럼 운영체제가 32bit냐 64bit에 따라서 저장할 수 있는 범위의 차이가 발생할 수 있습니다. 물론 32bit는 아이폰 5까지입니다...)



일단 시작은 여기까지, 이후부터는 playground가 아닌 project 환경에서 시작하겠습니다.

반응형
반응형

#1. str.startsWith(searchString[, position])


매개변수섹션

searchString
문자열의 시작 지점에서 탐색할 문자열
position Optional
searchString을 탐색할 위치. 기본값 0.

반환 값섹션

문자열이 검색 문자열로 시작하면 true, 아니면 false.


< From : https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith >



반응형
반응형

C언어가 사용하는 메모리 구조


XCode를 이용하였지만, 보는데에는 큰 지장이 없습니다.


1. C언어가 사용하는 메모리

C언어의 메모리 관리와 관련된 이미지를 검색해보면 정말 다양한 내용들을 볼 수 있었다. 근데 조금씩 다르다. 그래서 위키를 기본으로해서 내용을 증명해가는 방식으로 진행해보도록 해보겠다.


<출처 : https://ko.wikipedia.org/wiki/동적_메모리_할당>



위 이미지가 C언어의 메모리구조라고 나와있는 그림이다. 이미지에 나와있는 예시들을 통하여 실제 데이터의 주소를 알아보도록 하겠다.



2) STACK영역


먼저 지역변수가 저장되는 STACK영역이다.


   

< 좌측 : 코드     우측 : 실행결과 >

(왜인지 변수를 초기화 안해도 쓰레기 값이 아닌 0이 들어가있다. XCode라 그런가...?)


< 변수 cnt의 메모리상 위치 >


위키의 내용에 따르면 현재 cnt라는 지역변수가 저장되어있는 '0x7ffeefbff53c'라는 위치는 STACK영역의 가장 하단부분이 해당될 것이다.


그렇다면 STACK영역보다 아래(더 뒤에있는 영역)는?


         

< 좌 : 코드     우 : 실행결과 >


위 결과와 같이 이후의 영역의 내용을 불러와도 정상적으로 값을 불러오는 것을 보면, 이 부분 역시 해당 프로그램이 사용하는 영역이라는 것을 알 수 있다.


이부분에 대한것은 아쉽게도 위키의 이미지에서는 찾아볼 수 없다. 따라서 이부분은 나중에 확인해보도록 하자.



그럼 다음으로 넘어가기전에 왜 이 영역을 STACK영역이라고 부르는지 알아보도록 하자.


이유는 다음 코드와 메모리의 상태를 보면 알 수 있다.


< 코드 >



< 메모리 공간상 위치 >


위의 내용을 보게되면, cnt1 ~ 3의 순서로 선언했음에도 메모리에는 cnt3이 가장 먼저 보이는 결과를 알 수 있다.


이것은 STACK이라는 영역은 선언되는 변수에게 공간을 할당할 때, STACK영역의 가장 마지막 부분부터 공간을 할당한다는 것을 의미한다.


만약 STACK이라는 자료구조를 알고있다면, 쉽게 이해가 가능할 것이다.


다만 이게 정해진 규칙은 아니다. 메모리관리는 운영체제에 따라 달라질 수 있다. 지금 내가 작업중인 맥OS(XCode)에서는 위와같이 작동했지만, 다른 운영체제, 다른 IDE에서는 다른 규칙에 따라서 작업을 수행할 것이다.



그런데 문제가 있다. 바로 배열을 선언했을 때인데, 아래 그림을 보면서 생각해보자.


< 코드 >


< 메모리 공간상 위치 >


이제까지 내용을 기본으로하면 [ cnt3 - arr2 - cnt2 - arr1 - cnt1 ]의 순서로 메모리에 데이터들이 쌓여있어야 하는데, 실제 데이터의 위치를보면, [cnt3~1 - arr2 - arr1] 순서로 스택에 데이터가 쌓여있는 것을 볼 수 있다. 또한, 각 데이터들의 사이사이에 불필요해보이는 메모리 공간이 보이는 것을 알 수 있다.


어째서일까? 한번 생각해보도록 하자


3) HEAP 영역

HEAP영역은 [ 동적 메모리 할당 ]이라는 녀석을 다루는데 있어서 빠질 수 없는 장소이다. 왜냐하면 malloc이라는 함수를 통해서 변수가 할당받는 메모리가 HEAP영역이기 때문이다.



< 코드 >


다음과 같은 코드를 작성했다고 해보자, [ int *heap_data ] 라고 선언한걸보면, heap_data 라는 녀석은 특정한 주소값을 갖고 있다는 것을 알 수 있다. 그렇다면 메모리 영역에서 이것들이 어떤식으로 존재하는지 확인해보자.


< heap_data 의 메모리상 위치 >



< *heap_data의 메모리상 위치 >


위에 두 그림 중 위에있는 이미지를 먼저 확인해보자, 


위에있는 녀석은 주소값을 갖고있는 포인터이다. 64bit 컴퓨터에서 메모리 공간을 포인팅하기 위해서는 동일한 64bit가 필요하다. 따라서 총 8byte의 공간이 할당되었다.


리틀엔디언 방식을 따르기때문에 뒤에서부터 두개씩 읽어야하는데, 읽어보면 [ 00 00 00 01 00 64 1A E0 ]  라는 주소값을 갖고있는 것을 알 수 있다. 그럼 해당주소를 확인해보자.


두번째 그림이 해당주소를 확인해본 결과이다. (놀랍게도? 아니면 당연하게도?) 해당 주소에는 코드에서 지정한것과 같은 값이 저장되어있는 것을 알 수 있다.




그럼 정리해보자, C언어에서 데이터를 참조하기 위해서는 변수가 필요하다. 여기서 heap_data라는 녀석은 하나의 포인터 변수이다. 이녀석은 이전에 말했던 STACK영역에 존재한다.


하지만, 이 녀석이 가리키고있는 데이터[ *heap_data ]는 동적할당받은 HEAP영역에 존재한다.




4) STACK과 HEAP의 확장

C언어의 메모리에 대해서 관심을 갖고 찾아보다보면 아래와 같은 그림을 볼 수 있다.


이 그림에서 중점적으로 봐야할 부분은 바로 회색 화살표이다. 그렇다고 'HEAP영역은 위에서 아래로 데이터 공간을 할당하고,  STACK영역은 아래서 위로 데이터 공간을 할당한다.' 라고 하는 것은아니다. 


다만 OS라고하는 운영체제는 미래를 알지는 못해서 프로그램이 수행되는 과정에서 얼마만큼의 동적할당이 발생할지, 스택영역은 정확하게 얼마만큼이 필요한지 정확하게 알지 못한다. 그렇기 때문에 적당한 메모리를 할당하고, 이후 추가적으로 메모리가 필요할 경우 두 위 그림과 같은 방향으로 프로그램이 가용할 수 있는 메모리 크기를 확장한다.


그렇다면 HEAP영역을 무한히 늘리면 언제가는 스택영역을 침범하지 않을까? 하는 의문이 발생한다.


생각해보자.



반응형
반응형

SCP를 이용한 파일 전송

SSH 방식을 이용하여 파일을 전송하는 방식으로 SSH와 동일한 22번 포트를 기본으로 합니다.

SCP를 이용하여 파일을 전송하기 위해서는 수신받는 측에게 인증키 또는 암호를 통해 인증을 해야합니다.


사진1) 위쪽은 송식측(맥북) 아래쪽은 수신측(아마존 aws)


scp를 이용하여 datafile.txt 라는 파일을 아마존 서버로 전송하려고 합니다.




사진2) 인증 및 전송

아마존 서버로 파일을 전송하기 위해서는 등록된 '키'가 필요합니다.

scp -i 'Key File' userID@아이피주소:저장된 경로

위와 같은 방식으로 Key 정보를 같이 전송하면 정상적으로 인증이 됩니다.

아래 사진을 보시면 파일이 전송되고 정상적으로 수신된 것을 알 수 있습니다.




사진3) 패스워드 인증시

패스워드를 통한 인증을 사용할 경우에는 -i 'Key File' 부분을 생략해주시면 됩니다.

그럼 우분투에 등록된 패스워드를 통하여 접속이 가능합니다.

다만, 아마존과 같이 인증키를 통해서만 접속이 가능한 환경에서는 불가능한거 같습니다~!




반응형

'운영체제 > 리눅스 명령어' 카테고리의 다른 글

[Linux] scp 명령어 사용법  (0) 2019.05.29

+ Recent posts