본문 바로가기

프로그래밍독학23

[스위프트]프로그래밍 독학을 위한 문법 총 정리 스위프트(Swift) 프로그래밍 독학을 위한 문법 총정리 아이폰 앱개발을 하고 싶어서 시중에 나와 있는 iOS 프로그래밍 서적을 구매해서, 예제를 그대로 따라했습니다. 하지만 스위프트 언어의 문법에 대한 이해없이 진행하다보니 많이 답답했습니다. 예제 코드없이는 간단한 코드도 끝까지 작성하기 어려웠기 때문입니다. 그래서 시간을 내어 스위프트 문법을 익히기로 결심하고, 공부할 책은 한빛출판사에서 나온 야곰님의 'Swift 프로그래밍' 으로 선정했습니다. 그 책을 통해 공부한 내용을 이 블로글에 하나씩 정리하려고 합니다. 글이 작성되는 대로 제목에 링크를 걸어두겠습니다. ▶ iOS 프로그래밍 예제 모음 ◀ 1. 스위프트 학습에 앞서 1) 스위프트(swift)가 지향하는 프로그래밍 패러다임은? 2) 스위프트 코.. 2020. 9. 29.

[스위프트]핀치 제스처로 두 손가락으로 텍스트 확대/축소하기 iOS프로그래밍(스위프트) 핀치 제스처로 두 손가락으로 텍스트 확대/축소하는 예제 핀치 제스처(Pinch Gesture)는 두 손가락으로 화면을 확대/축소할 때 사용하는 이벤트입니다. 화면 축소 확대/축소 기능이 들어간 모든 앱에서 사용할 수 있습니다. 이 글에서는 텍스트를 확대/축소하는 앱을 만들어보겠습니다. 먼저 Xcode를 실행하고, 새 프로젝트를 생성합니다. ▶ 새 프로젝트 만드는 방법 [스위프트] Xcode 새 프로젝트 만들기 2020 Xcode 새 프로젝트 만들기 STEP 1 Xcode 실행하고 Create a new Xcode project를 클릭하여 새 프로젝트 만들기 STEP 2 템플릿 선택하기 [Single View App] 를 선택하고 Next를 눌러주세요. STEP 3.. bite-.. 2020. 8. 30.

[스위프트]화면 터치해서 그리는 스케치 앱 만들기 iOS 프로그래밍(스위프트) 예제_화면 터치해서 그리는 스케치 앱 만들기 이번에는 아이폰 화면을 터치하여 그림을 그리는 스케치 앱을 만들어볼 것입니다. 그림을 그리기 위해 이미지뷰(Image View) 객체를 추가하고, 화면 삭제를 위한 버튼도 아래에 배치합니다. 완성한 후 시뮬레이터를 돌리면 마우스 커서로 그릴 수 있고, 실물 폰에서 앱을 실행시키면 직접 터치할 수 있습니다. 그럼 프로젝트를 만들고, 스토리보드에서 화면 구성부터 해보겠습니다. ▶ 새 프로젝트 만드는 방법 [스위프트] Xcode 새 프로젝트 만들기 2020 Xcode 새 프로젝트 만들기 STEP 1 Xcode 실행하고 Create a new Xcode project를 클릭하여 새 프로젝트 만들기 STEP 2 템플릿 선택하기 [Single.. 2020. 8. 29.

[스위프트]탭 카운트(TapCounter)하는 법_간단한 예제로 따라하기 Xcode_iOS 프로그래밍 스위트프로 탭 카운트(TapCounter)하기 탭(Tap)은 화면을 톡톡 두드리는 행위를 말합니다. 아이폰(iOS) 애플리케이션 개발할 때 어떻게 탭을 셀 수 있는지 코드로 보겠습니다. 먼저 Xcode를 열고, 새 프로젝트를 생성합니다. ▶새 프로젝트를 생성하는 방법 보러가기 ■ 화면 구성하기 STEP1 라이브러리에서 스택뷰(Vertical Stack View)를 드래그하여 스토리보드에 드래그합니다. STEP2 라이브러리에서 스택뷰(Vertical Stack View)를 드래그하여 스토리보드에 드래그합니다. 4번에서 스택뷰 안에 Labeldl 들어가지 않으면 드래그로 변경해줍니다. STEP3 Label을 더블클릭해서 안의 텍스트를 변경해줍니다. 위 Label은 Tab Coun.. 2020. 8. 27.

[ C ] 전처리기 이해하기5_매크로 연산자 #, ## 정의/예제 C언어 문법 매크로 연산자 #, ## 정의/예제 아래의 매크로 문장은 어떤 결과를 만들까요? 매크로 함수: #define STRING_NAME(A, B) "A의 이름은 B이다" 매크로 문장: STRING_NAME(하헤호후, 아무개) 예상 결과: 하헤호후의 이름은 아무개이다. 진짜 결과: X (문자열 안에서는 매크로의 매개변수의 치환이 발생하지 않기 때문) 이런 상황에서 매개변수 치환이 이루어지게 하는 연산자, #이 있습니다. ■ # 연산자: 치환 #는 치환의 결과를 문자열로 구성하는 연산자입니다. #define STRING_NAME(ABC) #ABC STRING_NAME(랄랄라)라는 문장은 선행처리기에 의해 문자열 "랄랄라"로 치환됩니다. 또한 나란히 선언하면 하나의 문자열로 간주됩니다. 그래서 아래 문.. 2020. 7. 28.

[ C ] 전처리기 이해하기1_전처리기(Preprocessor)란? 정의/용도, 지시문 종류 전처리기(Preprocessor)란? 정의/용도 소스 파일에서 실행 파일로 만들어지려면 다음과 같은 과정을 거쳐야 합니다. 선행처리 거친 소스 파일이란 무엇일까요? 사실 소스 파일의 형태가 그대로 유지되기 때문에 그냥 소스 파일입니다. 선행처리기가 하는 일은 선행처리 명령문대로 소스 코드의 일부를 수정합니다. 선행 처리 명령문은 #으로 시작하며, 세미콜론(;)을 붙이지 않습니다. #define PI 3.14 이런 명령문이 삽입되어 있다면 선행처리된 소스 파일에서는 PI를 3.14로 인식합니다. #include 이제껄 자주 작성했던 #include 도 # 문자로 시작하는 선행처리 명령문입니다. stdio.h 파일의 내용을 그 파일에 옮겨놓다는 의미입니다. ■ 전처리기 지시문 종류 #include #defi.. 2020. 7. 27.

[ C ] 파일 입출력 이해하기3_파일복사 feof/바이너리 데이터 입출력 fread, fwrite C언어 문법 파일복사 feof/바이너리 데이터 입출력 fread, fwrite ■ 파일 복사하는 함수 feof 전체 파일을 복사해야 한다면 파일의 끝을 확인하는 작업이 필요합니다. 그 때 feof함수을 사용하면 됩니다. 파일의 끝까지 읽어들인 상태이면 0이 아닌 값을 반환합니다. #include int feof(FILE * stream); 매개변수로 FILE 형 포인터를 넣으면 됩니다. ■ 바이너리(Binary) 데이터 입출력하는 함수 fread, fwrite 이번에는 바이너리 데이터를 입력, 출력할 수 있는 함수를 알아보겠습니다. ( 참고할만한 글:텍스트 데이터와 바이너리 데이터의 차이점은?) - 입력 #include size_t fread(void * buffer, size_t size, size_t.. 2020. 7. 25.

[ C ]커스텀 자료형 이해하기3_구조체 배열, 포인터 C언어 문법 구조체 배열, 포인터 ■ 구조체 배열 정의 및 선언 구조체 변수를 여러개 사용해야 할 때는 구조체 배열을 선언하면 됩니다. 선언방법은 일반 배열과 동일합니다. struct point pointArr[3]; // 크기 3인 point형 구조체 배열 선언 그럼 다음과 구조로 배열이 할당됩니다. ■ 구조체 배열 초기화 구조체 배열을 선언과 동시에 초기화할 때는 배열의 길이만큼 중괄호를 통해서 초기화할 값을 명시합니다. struct point pointArr[3] // 크기 3인 point형 구조체 배열 선언 { {3, 4} // 첫 번째 요소의 초기화 {2, 1} // 두 번째 요소의 초기화 {5, 9) // 세 번째 요소의 초기화 }; ■ 구조체 변수와 포인터 포인터도 구조체의 멤버가 될 수 있.. 2020. 7. 24.

[ C ]커스텀 자료형 이해하기2_typedef이란? typedef사용법 C언어 문법 typedef이란? struct과 typedef의 차이점, 사용법 구조체 변수를 선언할 때는 struct 키워드를 일일히 붙여야합니다. 구조체 Person으로 변수를 선언한다고 하면 struct Person own; struct Person two; struct Person three; 이런 식으로 'struct [구조체명] [변수명]'을 반복해야 합니다. 이런 번거로움을 덜 수 있는 typedef 구조체를 정의할 수 있습니다. typedef Person PERSON; 이렇게 선언을 하면 struct Person에 PERSON이라는 별칭(alias)을 붙여진 것입니다. 그래서 간단히 [별칭][변수명]만 작성하면 됩니다. PERSON own; PERSON two; PERSON three; 이처.. 2020. 7. 24.

[ C ]커스텀 자료형 이해하기1_구조체란? 정의/선언/용도/초기화 C언어 구조체(struct)란? 정의/선언/용도/초기화 이제까지 기본 자료형을 써왔습니다. int(4바이트)나 short(2바이트) 등등 말이죠. 그런데 3바이트짜리 자료형을 사용하고 싶으면 어떻게 해야할까요? 3바이트짜리 기본 자료형은 없습니다. 그래서 기본 자료형으로는 그 크기를 할당받을 수 없습니다. 바로 이 때 커스텀(Custom) 자료형을 활용합니다. 사용자 정의 자료형(User efined data type)이라고도 하여 우리가 새로운 자료형을 정의할 수 있다는 뜻입니다. ■ 구조체 정의 그 중 하나인 구조체에 대해 알아보겠습니다. 구조체를 선언할 때 사용하는 키워드 struct은 '건축물'을 뜻하는 영어 단어 structure을 의미합니다. 말 그대로 여러 부품을 조립하여 하나의 건축물을 이.. 2020. 7. 24.

[ 알고리즘 ] 빅-오 표기법이란? [ 알고리즘 ] 빅-오 표기법이란? 빅오 표기법은 대문자 O를 사용하기 때문에 빅(Big) 오(O)라고 부릅니다. 앞 글에서 이진 탐색 알고리즘의 시간 복잡도 함수를 구하면서 최악의 경우의 비교연산 횟수는 k+1에서 +1이 중요하지 않다고 했습니다. 왜 그렇게 말할 수 있는지 빅-오 표기법을 통해 설명하겠습니다. (이해를 위해 이전 글을 읽어오시면 좋습니다.) 먼저 빅-오에 대한 설명을 위해 하나의 예로 시간 복잡도 함수를 봅시다. 시간 복잡도 함수를 T(n)를 구하는 이유는 데이터의 수 n이 증가에 따라 연산횟수의 변화 정도를 판단하기 위해서입니다. (중요) 오차 없이 시간 복잡도를 함수를 구할 수 없고, 구할 필요도 없다는 겁니다. 즉, 근사치(approximtation) 식으로 구성해도 됩니다. 그.. 2020. 7. 6.

[ 알고리즘 ] 이진 탐색이란? 시간의 복잡도 계산하기 이진 탐색이란? 시간의 복잡도 계산하기 배열을 대상으로 이진 탐색 알고리즘을 적용하기 위해서는 배열에 저장된 데이터가 정렬되어 있어야 합니다. 즉, 이진 탐색 알고리즘은 정렬된 데이터가 아니면 적용이 불가능합니다. 그럼 이해를 위해 그림을 먼저 보겠습니다. 다음과 같이 정렬된 배열이 있습니다. 배열의 요소 중 3은 어느 인덱스에 있는지 알고 싶다고 가정하겠습니다. 1. 배열의 가운데를 찾기 위해 인덱스의 시작과 끝을 더해 2로 나눕니다. 2. 인덱스 3에 있는 요소와 목표값이 같은지 비교합니다. 3. 아니네요. 인덱스 3에 있는 요소(7)는 목표값(3)보다 큽니다. 4. 범위를 0~2로 하여 다시 인덱스의 시작과 끝을 더해 2로 나눕니다. 5. 인덱스 1에 있는 요소와 목표값이 같은지 비교합니다. 6. .. 2020. 7. 5.

[ 알고리즘 ] 순차 탐색(Linear Search) 이란? 시간 복잡도 계산하기 순차 탐색(Linear Search) 이란? 최악의 경우 시간 복잡도 계산하기 순차 탐색이란 말 그대로 맨 앞에서부터 순서대로 탐색을 하는 알고리즘입니다. 순차 탐색 알고리즘을 적용한 코드를 보겠습니다. ※ 윤성우의 열혈 자료구조 책에서 코드 참고하였습니다. 위의 코드 중 실제로 순차 탐색 알고리즘을 구현하는 부분입니다. for문을 통해 인덱스를 1씩 증가하여 배열를 처음부터 끝까지 목표값과 비교(==)합니다. 그래서 배열(arr)에서 목표값(target)을 찾으면 그 값의 인덱스(i)를 반환합니다. 이제 위의 코드를 토대로 시간 복잡도(Time complexity) 를 분석해볼까요? 데이터의 수 n에 대한 연산 횟수의 함수 T(n) 구해봅시다. 연산 횟수라 했으니까 이 알고리즘에서 사용된 연산자 2020. 7. 4.

좋은 알고리즘을 평가하는 요소(시간복잡도, 공간복잡도) 좋은 알고리즘을 평가하는 요소(시간복잡도, 공간복잡도) 지금 잠시 차🚗를 새로 구입한다고 생각해보세요. 1) 집에서 회사까지 이동만 할 수 있는 차 2) 집에서 회사까지 소음 적고, 연비 좋고, 오르막 길에서 기를 쓰지 않아도 속도내며 이동할 수 있는 차 둘 중에 어느 차를 선택하실 겁니까? 아마 대부분이 2번을 고를 겁니다. 우리는 잘 동작하는 것은 물론이고 성능까지 보장받기 원하니까요. 알고리즘에도 똑같이 적용됩니다. 그저 잘 동작하는 자료구조와 알고리즘(이하 '알고리즘'으로 총칭)을 찾는다면 필요한 기능만 보면 되겠죠. 하지만 성능도 따지고 싶기 때문에 알고리즘을 분석할 줄 알아야 합니다. 크게 두 가지 요소가 있습니다. 특정 상황에서 1) 어떤 알고리즘이 더 빠른가? 2) 어떤 알고리즘이 메모리를.. 2020. 7. 3.

자료구조와 알고리즘 개념 쉽게 이해하기 자료구조와 알고리즘은 무엇인가 '알고리즘은 자료구조에 의존적이다.'라는 말을 들어본 적이 있을 것입니다. 도대체 자료구조와 알고리즘이 뭐길래 저런 관계가 성립이 되는 걸까요? 개념을 파악하기 위해 프로그램의 간단한 정의를 봅시다. 프로그램은 크게 두가지를 합니다. 1) 데이터의 표현 (자료구조) 2) 데이터의 처리 (알고리즘) 1) 데이터 표현에는 데이터를 저장하는 일을 포함됩니다. 여러분은 이미 데이터를 저장해본 적이 있습니다. 정수를 저장하기 위해 int형 변수를 선언하고, 다양한 정보를 활용하기 위해 배열을 사용했죠. 넓은 의미로 int형 변수와 배열은 자료구조의 일종입니다. 2) 그렇게 표현된 데이터(int형 변수나 배열)를 가지고 문제를 해결하는 것이 알고리즘입니다. 간단한 코드를 보겠습니다. .. 2020. 7. 3.

[스위프트]입문자를 위한 Xcode iOS프로그래밍 총정리 및 공부방법 2020 입문자를 위한 Xcode iOS 프로그래밍 Swift 스위프트 총정리 및 공부방법 💡 존경받아 마땅한 프로그래밍 독학러 💡 앱 개발에 도전하고 싶은 비전공자 💡 iOS 개발자와 원활한 의사소통을 하고 싶은 안드로이드 개발자 💡 프로그래밍 언어 문법은 지겨워 간단한 프로젝트를 진행하고 싶은 전공자 💡 파이프라인 중에 앱테크가 있는 일반인 💡디지털 노마드를 꿈꾸는 예비 프로그래머 💡사람한테 상처받아 컴퓨터랑만 대화하고 싶은 분 혹시 아래 유형에 하나라도 해당하는 분이 계시다면 제 블로그에 있는 예제를 하나하나 따라하면서 iOS프로그래밍 공부해보세요. 모든 프로그래밍 언어가 마찬가지겠지만 문법을 마스터한 후 프로그래밍을 하려고 하면 시간이 너무 오래걸리고 지겹습니다. 그래서 앱을 개발하는데 필요한 버.. 2020. 4. 24.

[스위프트] 이미지 뷰를 화면에 출력하고 크기 변경하기2(예제) 2020 Xcode, 스위프트, 이미지 뷰를 화면에 출력하고 크기 변경하는 방법, 기능 구현 Xcode에서 이미지 뷰를 확대하는 기능을 구현해보겠습니다. ※ 선행되어야 하는 화면 구성이 있으니 여기를 참고해주세요. ※ 구성 방법과 소스 코드가 있습니다. STEP 1 소스 편집을 위해 보조 편집기를 열어줍니다. - 화면 오른쪽 윗부분의 [Adjust Editor Options] - [Assistant]를 선택합니다. STEP 2 이미지 뷰에 아웃렛 변수 추가하기 - 드래그할 때 나타나는 연결선을 뷰 컨트롤러의 클래스 선언문 바로 아래에 놓으세요. - 아웃렛 변수는 일반적으로 클래스(class) 선언부 바로 아래에 추가합니다. STEP 3 이미지 뷰 아웃렛 변수 설정하기 나타나는 연결 설정 창에서 다음과 같.. 2020. 4. 23.

[스위프트] 이미지 뷰를 화면에 출력하고 크기 변경하기1(예제) 2020 Xcode, 스위프트, 이미지 뷰를 화면에 출력하고 크기 변경하는 방법 아이폰 앱에 원하는 이미지를 출력하려면 이미지뷰 ImageView객체를 사용할 수 있습니다. 그래서 오늘은 JPG나 PNG 등의 이미지를 화면에 출력할 수 있는 이미지 뷰의 사용법을 살펴 볼것입니다. 이 글에서는 전체적인 레이아웃 구성을 진행할 것입니다. 잘 따라주세요. 예제를 따라하기 앞서 선행 학습이 필요하신 분들은 아래 링크를 참고해주세요. 새 프로젝트 생성 방법 [ 완성예제 ] 시작해보겠습니다!👐 STEP 1 앱에서 사용할 이미지 추가하기 - 이미지를 선택하여 내비게이터 영역의 프로젝트 폴더 아래로 드래그 앱 드롭합니다. - 파일 추가에 대한 설정 창이 나타나며 현재 추가하려고 하는 이미지를 프로젝트 폴더에 복사해 주.. 2020. 4. 22.

[ 안드로이드 프로그래밍 ] 핸들러로 메시지 전송하기 ( 예제 포함 ) 안드로이드 프로그래밍_핸들러로 메시지 전송하기_예제포함 앱을 실행할 때 프로세스가 만들어지면 그 안에 메인 메서드가 함께 만들어집니다. 그리고 메세지 큐(Message Queue)를 실행합니다. 메세지 큐를 사용하면 순차적으로 코드를 수행할 수 있는데, 이렇게 메세지 큐로 메인 스레드에서 처리할 메시지를 전달하는 역할을 핸들러 클래스가 담당합니다. 또 핸들러를 이용하면 특정 메세지가 미래의 어떤 시점에 실행되도록 스케쥴링 할 수도 있습니다. 핸들러의 메시지 처리 방법을 그림으로 보실까요? 크게 3가지 방법으로 나눠볼 수 있습니다. 1 obtainMessage() 로 메세지 큐에 있는 메시지 객체를 하나 참조할 수 있습니다. 2 메세지 객체에 필요한 정보를 넣은 후 sendMessage() 로 메세지 큐에.. 2020. 4. 8.

[ 안드로이드 프로그래밍 ] 스레드 실행하기 ( 예제 포함 ) 안드로이드 프로그래밍_스레드 실행하기_예제 포함 자동으로 생성되는 메인 액티비티는 하나의 프로세스에서 처리됩니다. 따라서 메인 액티비티의 버튼 클릭 이벤트를 처리하는 일 등 액티비티 내에서 처리하는 기능들은 다 같은 프로세스 안에서 실행되죠. 이렇게 같은 프로세스 안에서 여러 기능들이 순서대로 실행할 수 있습니다. 하지만 일련의 기능이라 해도 대기 시간이 길어지는 네트워크 요청 등의 기능을 수행할 때는 문제가 생길 수 있습니다. 그래서 하나의 프로세스 안에서 여러 개의 작업이 동시 수행되는 멀티 스레드 방식을 사용할 수 있습니다. 이런 멀티 스레드 방식은 같은 프로세스 안에 있으면서 메모리 리소스를 공유하므로 효율적인 처리가 가능합니다. 스레드(Thread)는 동시 수행이 가능한 작업 단위입니다. 현재 .. 2020. 4. 8.

[ 안드로이드 프로그래밍 ] 토스트 메시지 위치 변경하기 안드로이드 스튜디오 프로그래밍_토스트 메시지 위치 변경하기_예제포함 예제 ■ xml 파일 - 원하는 위치 값(X, Y)을 입력받기 위해 EditText를 사용합니다. - X, Y위치 값을 받는 칸임을 보여주기 위해 hint의 속성을 'X위치','Y위치'라고 해줍니다. - 띄우기 버튼을 눌렀을 때 토스트 메세지를 띄웁니다. ■ java 파일 package com.example.practicecode; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.view.Gravity; import android.view.View; import android.widget.Button; import androi.. 2020. 4. 8.

[ 안드로이드 프로그래밍 ] 간단한 예제로 서비스 이해하기2 (서비스에서 액티비티로 데이터 전달) 안드로이드 스튜디오 프로그래밍_서비스에서 액티비티로 데이터 전달_예제포함 이번에는 안드로이드에서 서비스를 실행시키고 데이터를 액티비티로 전달하는 작업을 구현해볼 것입니다. 예제를 따라하기 위해서 앞서 선행되어야 하는 코드가 있으니 '서비스 이해하기1' 글에서 확인해주세요. 아래 링크 클릭하시면 됩니다. https://bite-sized-learning.tistory.com/137 [ 안드로이드 프로그래밍] 간단한 예제로 서비스 이해하기 유튜브를 보는 중에 카톡 알림을 받은 적이 있을 것입니다. 이렇게 카톡 앱을 화면에 띄우지도 않아도 카톡 알림을 받을 수 있는 이유는 화면 뒤의 공간인 백그라운드에서 실행되는 "서비스"가 있기 때문입니다... bite-sized-learning.tistory.com 데이터.. 2020. 4. 7.

[안드로이드 스튜디오] 라디오 버튼 사용하기 package com.ogrg.myapplication; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.RadioButton; import android.widget.RadioGroup; import android.widget.Toast; public class MainActivity extends AppCompatActivity { private RadioGroup rg_gender; private RadioButton rb_man, rb_woman; private Button .. 2019. 11. 23.