본문 바로가기

카테고리 없음

88 배포, Xcode

** 자바 응용 프로그램 만들기 (PC, 디바이스에 Embedding 되는 프로그램)

=> piblic static void main(String [] args) 메소드를 가진 클래스가 존재해야 한다.

 

1. eclipse에서는 마우스 우클릭 [Export] - [Java] - [Runnable Jar files]로 내보내야 한다.

=> 윈도우 용 프로그램은 우리가 실행하고 종료하기 때문에 별 문제가 되지 않지만 콘솔용 프로그램은 실행이 종료되면 터미널이 바로 종료되어 버릴 수 있기 때문에 마지막에 입력받는 문장을 추가하기도 한다.

 

2. 명령어로 실행

java - jar 파일 경로

 

3. WindowJava.jar 파일을 실행하는 쉡 프로그램을 작성

1) 터미널에 touch WindowJava.sh : 쉡 파일 생성

2) 터미널에 vi WindowJava.sh : 파일을 편집할 수 있는 vi 편집기로 열림

3) i 를 눌러서 삽입모드로 변경

4) 코드를 작성

 

#!/bin/sh

java -jar /Users/a30400/Documents/WindowJava.jar

 

5) 저장

=> esc 를 눌러서 명령모드로 빠져 나감

=> :wq!를 눌러서 저장하고 나감

 

6) 실행

sh WindowJava.sh

 

7) 파일을 더블클릭해서 실행하기 위해서 확장자 commmand를 추가

mv WindowJava.sh WindowJava.sh.command

 

8) 파일의 허가모드 변경

chmod 777 파일경로

=> 파일을 모든 사용자가 실행하고 읽고 수정할 수 있도록 변경

chmod rwx rwx rwx 파일경로

첫번째 블럭 : 소유자

두번째 블럭 : 그룹 사용자

세번째 블럭 : 기타 사용자

 

** 웹 프로그램을 배포

=> war 파일로 압축

=> 프로젝트 이름이 배포할 때 URL이 되고 프로젝트 구조는 무조건 WebContent 디렉토리가 루트 디렉토리

=> test 패키지에 있는 것들은 전부 사라진다.

=>웹 호스팅하는 곳에 war 파일을 업로드 해주면 웹 애플리케이션이 실행

=>cafe24에 배포

1.배포할 프로젝트를 war 파일로 생성

 

2.저 파일을 웹 호스팅 업체의 포맷에 맞게 업로드를 해줘야 한다.

 

 

앱아이콘은 makeappicon.com에서 굳이 직접만들지 말고 여기서 받아쓰자.

 

 

 

** Xcode

=> Mac 운영체제에서 사용하는 IDE

=> Mac 응용프로그램, Apple 모바일 응용 프로그램을 제작할 수 있는 IDE

1. 설치

=> 최신 버전은 App Store에서 다운로드 받아서 설치

=> 최신 버전이 아닌 경우는 developer.apple.com에서 다운로드

 

2.실행

=>[finder] - [응용 프로그램] - [Xcode]

=>처음 실행할 때는 Component 업데이트 메시지가 출력

 

3.설치된 버전 확인

=>[File] - [About Xcode]

스마트 폰 애플리케이션은 운영체제 버전이 자주 변경되기 때문에 IDE의 버전과 지원하는 운영체제 버전을 확인을 해야 합니다.

 

4.Xcode에 계정 등록

=>[Xcode] - [Preferences] - [Accounts]에 등록

 

** Swift

=> Apple의 Application 개발 공식 언어 중의 하나

Objective-C로도 개발이 가능

=> 현재는 2개 언어를 같이 사용할 수 있어야 하는 경우가 많다.

이전에 Objective-C로 만든 것을 Swift로 변경하는 프로젝트가 많기 때문이다.

=> 이제부터 새로 나오는 API는 Swift로만 제공

Objective-C로 작성한 것은 브릿징을 하면 Swift로 사용 가능하다.

 

1. 특징

=> 스크립트 언어이면서 성능은 C++과 거의 비슷

=> 스크립트 언어들이 일반적으로 배우기가 쉬운 반면에 성능이 떨어지고 C++이나 Java와 같은 객체 지향 언어들은 진입장벽이 높지만 성능이 우수

 

=> 정적 바인딩 언어 : 컴파일하기 전에 데이터의 자료형을 결정하는 것

동적 바인딩 언어 : 값이 대입될 때 자료형을 결정하는 것

스위프트는 작성은 동적 바인딩 언어처럼하지만 정적 바인딩언어이다.

동적 바인딩 언어는 하나의 변수에 여러 형태의 데이터를 대입할 수 있지만 정적 바인딩 언어는 한번 변수를 생성하면 동일한 자료형만 대입이 가능하다.

 

=> 프로젝트 전체를 하나의 네임스페이스로 묶어서 사용한다.

동일한 프로젝트 안의 내용을 사용할 때 import가 필요 없다.

 

=> 함수형 프로그래밍 언어 : 함수를 클래스나 객체 안에 만들지 않고 외부에 별도로 작성이 가능하다. - 기능만 필요한경우 굳이 클래스를 만들지 않고 함수만 만들어서 배포하는 것이 가능

 

=> 제너릭 사용 가능 : 내부 자료형을 미리 지정하지 않고 인스턴스를 생성할 때 설정하는 것

동일한 알고리즘을 사용하는 함수나 클래스를 만들 때 자료형 때문에 별도로 생성하지 않도록 하기 위해서 사용한다.

 

=> 문자열 탬플릿 가능 : 문자열 상수 안에 문자열이나 다른 종류의 변수의 값을 삽입하는 것 (문자열 보간법)

"I am a\(name)" : I am a 뒤에 name 변수의 값을 추가

 

=> 줄 단위 실행 - ; 하나의 줄에 2개 이상의 명령어를 작성할 때는 ;으로 구분

;은 한줄에서 하나의 명령을 구분하기 위한 기호(인터프리터 언어는 ;의 기능이 전부 유사 - python, kotlin, javascript, ruby 등)

 

=> 인터페이스 개념 대신에 protocol을 사용

=> 클래스의 확장 개념인 extension이 존재

 

=> 여러 개의 데이터를 묶기 위한 자료형으로 tuple을 제공

 

=> 부호있는 정수와 부호없는 정수를 지원

이 개념이 없는 언어들은 API에서 임의로 해석을 해서 부호있는 것과 없는 것을 구분

 

=> 메모리 정리에 ARC(Auto Reference Counting)을 이용

데이터의 참조 횟수를 의미하는 retainCount 존재

처음 생성되면 retainCount가 1

어떤 데이터를 다른 변수가 참조하면 retainCount가 1 증가

참조하는 변수가 없어지면 retainCount가 1감소

retainCount가 0이 되면 GarvageCollection이 메모리 정리를 수행

이 개념을 명확하게 해두지 않으면 애플리케이션 개발에서 메모리 누수(leak)가 발생할 수 있고 메모리 누수가 많이 발생하면 애플리케이션이 자동 종료될 수 있다.

 

=> 다른 언어의 람다와 유사한 Closure 를 제공

Closure

=> javascript : 함수 안에서 함수를 리턴해서 함수 외부에서 함수 내부의 지역변수의 값을 변경할 수 있도록 하는 것

 

=> Swift, iOS : 자바의 람다처럼 이름없는 함수를 만드는 것

 

=> jvm 언어의 하나 : 우리나라에서는 음원 사이트들에서 가끔 이용하고 미국에서는 많이 사용하는 언어.

 

=> 함수는 1급 객체 : 함수도 하나의 자료형이다.

함수를 변수로 만들 수 잇고 함수를 변수에 대입할 수 있다.

자바나 C#을 제외한 거의 모든 언어는 함수가 1급 객체

Python, kotlin, swift, ruby 등의 스크립트 언어는 문법이 유사

 

=> 문자와 문자열을 리터럴에서는 구분하지 않는다.

' ' 나 " "의 기능이 같다.

 

=> 멀티 라인 문자열 지원 : 3번씩 입력 - """ 문자열 """

"""을 주석으로 착각하지 말자.

 

=> 기존의 GCC(GNU Compile Collection - 리눅스 C 컴파일러) 대신에 LLVM(Low Level Virtual Machine)을 이용해서 컴파일을 하기 때문에 성능이 우수

 

2. PlayGround

=> 스위프트 문법을 학습하고 모듈 단위 개발을 위해서 Xcode에서 제공하는 프로젝트 종류

=> 실행 프로그램을 만드는 것이 실행 프로그램안에서 동작하는 모듈을 생성한다거나 문법 공부를 할 때 사용하는 프로젝트

 

=> 프로젝트 생성 : [File] - [New] - [PlayGround]

 

3. 콘솔 출력

print(문자열 상수 또는 문자열 변수)

 

4. 실행

=> 코드 창의 실행버튼 클릭 : 이전에 실행한 내용은 제외하고 수정한 부분만 실행

=> 출력 창의 실행버튼 클릭 : 전체 실행

 

5. 주석

=> 한줄 주석 : //

=> 여러줄 주석 : /* ~ */

=> 서식있는 텍스트 주석 : 문서화를 위해서 사용

// : 서식있는 텍스트 주석

/* : */ : 서식있는 여러 줄 주석

 

#을 붙이면 제목

 

=> 서식있는 텍스트 주석 확인 : [Editor] - [Show Rendered Markup]

 

** 문법

1. 작성 규칙

=> main이 없어서 작성한 순서대로 실행

=> entry point(시작지점)를 만들고자 하는 경우에는 클래스이름 위에 UIApplicationMain 이라는 어노테이션을 추가해주면 된다.

=> 변수를 선언할 때 자료형을 기재하지 않으면 자료형 추론을 해서 자료형을 설정

=> 연산자 앞 뒤에 공백을 몇개를 삽입해도 상관없지만 앞에 공백이 있으면 뒤에도 있어야 하고 앞에 공백이 없으면 뒤에도 없어야 한다.

=> try ~ catch 지원 : 대다수 클라이언트 프로그램을 만들기 때문에 잘 하지 않는데 되도록이면 해주고 개발이 끝나고 난 후 삭제하는 것이 좋다.

=> import는 외부 라이브러리 참조용 이다.

 

2. 로그. 출력 함수

1) print

=> 첫번째 파라미터가 가변 파라미터로 되어 있기 때문에 여러 개 출력하고자 할 때는 ,로 구분해서 계속 입력

=> separator 옵션을 이용하면 구분자를 주간에 넣어서 출력이 가능

=> terminator 옵션을 이용하면 출력이 끝나고 마지막에 Enter 대신에 삽입

 

2) NSLog

=> 출력할 때 날짜와 시간 그리고 파일이름 등을 같이 출력(iOS 앱개발에서만 사용가능 - PlayGround에서는 사용하지 않는다.)

 

3) debugPrint : 자료형을 구분해서 출력 - 문자열의 경우는 따옴표를 해서 출력

 

4) dump : 인스턴스의 내용을 출력하고자 할 때 유용

=> 세부 내용까지 같이 출력

 

5) 주의

=> 앱 개발 도중에 로그 출력 함수를 사용했다면 개발이 끝나고 나면 전부 삭제하는 것이 좋다.

=> 로그를 출력하는 것도 시스템 자원을 사용하는 것이기 때문이다.

 

import UIKit

let name = "steve"
let age = 50

//숫자 데이터는 동일하게 출력
print(age)
debugPrint(age)
//문자열은 print는 그냥 출력
//debugPrint는 자료형을 알 수 있게 출력
print(name)
debugPrint(name)

let rect = CGRect(x: 100, y: 30, width: 100, height: 100)
//함수의 결과 출력
print(rect)
//객체의 내용 출력
dump(rect)

 

 

3. 데이터 분류

1) 변경 여부에 따른 분류

=> mutable data : 변경 가능한 데이터 - 변수(Variable)

=> immutable data : 변경 불가능한 데이터 - 상수(Constant : 개발자가 의도적으로 값을 변경할 수 없도록 만든 이름, Literal : 프로그램 작성 시 개발자가 직접 입력하는 값)

 

2) 저장되는 형태에 따른 분류

=> value type : 1개의 값을 저장하는 자료형

=> reference type : 대표하는 값의 참조(위치)를 저장하는 자료형

 

3) 저장하는 데이터의 개수에 따른 분류

=> Scala Type : 1개의 데이터 저장 - 보통은 Value Type : 이름이 데이터를 의미

=> Vector Type : 0개의 데이터 저장 - Reference Type : 이름은 데이터의 모임의 참조

 

4) 데이터의 모양에 따른 분류

=> 정형 데이터 : 데이터의 모양이 정해진 구조 - 테이블 구조의 데이터

=> 비정형 데이터 : 데이터의 모양이 일정하지 않은 구조 - 텍스트, 음성 등의 데이터

=> 반정형 데이터 : 비정형의 텍스트지만 정형의 형태로 변환이 가능한 데이터 - json, xml 문자열

 

5) 언어 또는 책 마다 분류하는 방법은 다양하다.

=> 최근에는 value type과 reference type으로 구분하는 경우는 거의 없다.

 

4. Swift의 데이터 이름 생성방법

1) 값의 변경 여부에 따라 var와 let 으로 구분

var : 값 변경 가능

let : 값 변경 불가능

=> var로 선언했는데 값을 1번도 변경하지 않으면 경고가 발생 -> let으로 설정하도록

 

2) null 포함 여부에 따라 Optional과 Optional이 아닌 자료형으로 나뉨

 

3) 묵시적 자료형과 명시적 자료형

=> 묵시적 자료형은 자료형을 기재하지 않는 방식으로 자동으로 자료형이 설정된다.

=> 명시적 자료형은 자료형을 기재하는 방식

 

4. Swift는 정적 바인딩

=> 정적 바인딩은 데이터를 대입하기 전에 자료형을 결정하는 것이다.

=> 자료형을 미리 설정하고 컴파일 할 때 잘못된 데이터가 입력이되면 실행하지 않는다.

 

5) 변수 명명 규칙

=> 영문자, 숫자, 한글, 한자, 특수문자, 이미지 용 바이너리 모두 가능

=> 예약어는 변수명으로 사용할 수 없지만 대소문자를 변경하거나 작은 따옴표로 감싸면 예약어도 변수 이름으로 사용 가능하다.

=> 연산자는 안된다.

=> 숫자로 시작할 수 없고 _ 이외의 특수문자도 안된다.

=> 중간에 공백도 안된다.

 

6) 변수 생성

var 이름 : 자료형 = 값

=> 자료형을 생략하면 자료형 추론으로 자료형 설정

=> 자료형을 생략한 상태에서 값을 생략하면 에러

=> 값을 생략하거나 nil 을 대입할려면 자료형이 Optional이어야 한다.

=> swift에서는 null 대신에 nil이라고 한다.

자료구조에서는 null 대신에 nil이라고 한다.

=> 변수 이름은 하나의 영역에서는 한번만 생성되어야 한다.

=> 변수에 값을 대입할 때는 변수 이름 = 값 의 형태

=> 카멜 표기법 : 클래스와 인터페이스(프로토콜) 이름은 대문자로 시작하고 변수와 메소드 이름은 소문자로 시작그리고 상수는 모두 대문자로 표기

2개 단어 이상으로 만들어진 경우 두번째 단어의 첫글자는 대문자로 시작

 

=> 헝가리언 표기법 : 변수 이름 앞에 자료형과 범위를 표기하는 방식

불린은 b, 정수는 n, 실수는 f, 문자는 c, 문자열은 str 을 붙여서 생성

지역변수는 _ 인스턴스 변수는 m, 전역변수는 g

예) m_str : 인스턴스 변수이고 문자열 변수

 

=> iOS 11, Swift 4 버전까지는대부분의 나열형 상수가 대문자로 만들어져 있었으나 그 이후에는 대부분 소문자로 변경

 

7) 자료형

Int : 정수 기준형

Int8, Int16, Int32, Int64 : 부호있는 정수

UInt8, UInt16, UInt32, UInt64 : 부호있는 정수

=> 부호없는 정수가 부호가 있는 정수보다 숫자의 표현 범위가 2배 크다

 

var age:Int = 50 // Int 형 age라는 변수를 생성하고 50 이라는 값을 대입

=> 0b: 2진수, 0o : 8진수, 0x : 16진수 - 색상값을 나타내거나 메모리의 참조를 나타낼 때 이용

 

Float - 32bit 실수이고 소수는 7자지까지 정밀하게 표현

Double - 64bit 실수이고 소수는 15자리까지 정밀하게 표현

실수 상수는 Double

이전에는 실수를 Float을 많이 사용했기 때문에 API에서는 실수 자료형이 Float인 경우가 더 많다.

 

Bool - true 또는 false 저장

 

nil : 데이터를 저장하지 않는다는 참조형 리터럴

swift에서는 모든 자료형의 변수에 nil 대입이 가능 - Optional만 붙으면

 

5. 타입 추론과 타입 명시

=> swift는 타입에 안전한 언어 : 정적 바인딩 언어

선언할 때 선언한 자료형의 데이터만 대입이 가능

=> 선언할 때 선언한 자료형 이외의 데이터를 대입하면 컴파일 할 때 에러가 발생

=> swift는 변수를 선언할 때 자료형을 기재하지 않으면 반드시 초기값을 설정해야 한다.

 이 초기값을 가지고 타입을 추론해서 사용

var n //이 경우는 에러 - n의 자료형을 추론할 수 없어서

var n = 10 //이 경우는 10을 보고 자료형을 추론해서 Int로 간주

 

=> 타입을 반드시 명시해야 하는 경우는 nil을 저장하기 위한 것과 Int이외의 정수 자료형 그리고 Double 이외의 실수 자료형 그리고 String 대신에 Character를 사용하고자 하는 경우이다.

 

var x = 10 //자료형은 Int가 된다.

var y: Int32 = 10 //Int32가 자료형

 

var d = 10.4  //자료형은 Double

var f:float = 10.4  //자료형은 float

 

var str = "T"   //자료형은 String

var ch:Character = "K"  //ch의 자료형은 Character

 

=> 개발자들은 자료형 명시를 선호

=> var 대신에 let을 붙이면 변수의 값을 변경 못함 - 상수화

이전 개발 방법론에서는 이름을 모두 대문자로 하는 것을 권장했지만 swift에서는 별다른 제약이 없다. 

 

=> swift의 변수나 메소드 표기법은 클래스 다이어그램(UML)의 표기법