**자바 응용 프로그램(PC, 디바이스에 Embedding 되는 프로그램) 만들기
=> public 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) 파일을 더블클릭해서 실행하기 위해서 확장자 command를 추가
=> mv WindowJava.sh WindowJava.sh.command
8) 파일의 허가모드 변경
=> chmod 777 파일경로
=> 파일을 모든 사용자가 실행하고 읽고, 수정할 수 있도록 변경
- chmod rwx rwx rwx 파일 경로
- 첫번째 블럭 - 소유자, 두번째 블럭 - 그룹 사용자, 세번째 블럭 - 기타 사용자
**웹 프로그램을 배포
=> war 파일로 압축
=> 프로젝트명이 배포할때 URL이 되고 프로젝트 구조는 무조건 WebContent 디렉토리가 루트 디렉토리
=> test 패키지에 있는 것은 전부 사라짐
=> 웹 호스팅하는 곳에 war 파일을 업로드 해주면 웹 애플리케이션이 실행
=> cafe24에 배포
1.배포할 프로젝트를 war 파일로 생성
2.저 파일을 웹 호스팅 업체의 포맷에 맞게 업로드를 해줘야 함
**Xcode
=> Mac 운영체제에서 사용하는 IDE
=> Mac 응용프로그램, Apple 모바일 응용 프로그램을 제작할 수 있는 IDE
1. 설치
=> 최신 버전은 AppStore에서 다운로드 받아서 설치
=> 최신 버전이 아닌 경우는 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이 되면 GarbageCollection이 메모리 정리를 수행
- 이 개념이 불명확시 애플리케이션 개발에서 메모리 누수(leak) 발생, 메모리 누수가 많이 발생하면 애플리케이션이 자동 종료
=> 다른 언어의 람다와 유사한 Closure를 제공
=> 함수는 1급 객체 : 함수도 하나의 자료형
- 함수를 변수로 만들거나 변수에 대입할 수 있음
- 자바나 C#을 제외한 거의 모든 언어는 함수가 1급 객체
- python, kotlin, swift, ruby등의 스크립트 언어는 문법이 유사
=> 문자와 문자열을 리터럴에서는 구분하지 않음
- ' '나 " "의 기능이 같음
=> 멀티라인 문자열 지원 : 3번씩 입력 - """ 문자열 """
- """을 주석으로 착각하면 안됨
=> 기존의 GCC 대신에 LLVM(Low Level Virtual Machine)을 이용하여 컴파일을 하므로 성능이 우수
2. Playground
=> 스위프트 문법을 학습하고 모듈 단위 개발을 위하여 Xcode에서 제공하는 프로젝트 종류
=> 실행 프로그램을 만드는 것이 실행프로그램 안에서 동작하는 모듈을 생성(문법 공부시 사용)
=> 프로젝트 생성 : [File] - [New] - [Playground]
3. 콘솔 출력
=> print(문자열 상수 또는 문자열 변수)
4. 실행
=> 코드 창의 삼각형 클릭 : 이전에 실행한 내용은 제외하고 수정한 부분만 실행
=> 출력 창의 삼각형 클릭 : 전체를 다시 실행
5. 주석
=> 한줄 주석 : //
=> 여러줄 주석 : /* ~ */
=> 서식있는 텍스트 주석 : 문서화를 위해서 사용
- //: -> 서식있는 한줄 주석
- /*: -> 서식 있는 여러줄 주석
=> # : 제목
=> 코드 작성
import UIKit
var str = "Hello, playground"
print(str)
/*:
#Hello SWIFT
for idx in 1...5{
let y = idx * 10
print(y)
}*/
=> 서식있는
=>
**문법
1. 작성 규칙
=> main이 없어서 작성한 순서대로 실행
=> entry point(시작지점)를 만들고자 하는 경우 클래스명 위에 @UIApplicationMain이라는 어노테이션 추가
=> 변수 선언시 자료형 미기재시 자료형 추론을 통해 자료형 설정
=> 연산자 앞, 뒤에 공백을 몇개 삽입해도 상관없지만 앞과 뒤가 동일해야 함
=> try ~ catch 지원 : 대다수 클라이언트 프로그램을 만들기 때문에 잘 하지 않는데 최대한 하고, 개발 종료 후, 삭제하는 것이 좋음
=> import는 외부 라이브러리 참조용
2. 로그, 출력함수
1) print
=> 첫번째 파라미터가 가변 파라미터인 경우 여러개 출력하고자 하는 경우 ,로 구분하여 계속 입력
=> terminator 옵션 이용시 구분자를 중간에 넣어서 출력 가능
=> terminator 옵션 이용시 출력 종료후 마지막에 Enter 대신 삽입
2) NSLog
=> 출력시 날짜와 시간, 파일명 등을 같이 출력
=> iOS 앱 개발에서 사용 - Playground에서는 사용하지 않음
3) debugPrint : 자료형을 구분하여 출력 - 문자열의 경우 따옴표를 하여 출력
4) dump : 인스턴스의 내용을 출력하고자 할 때 유용
=> 세부 내용까지 같이 출력
5) 주의
=> 앱 개발 도중 로그 출력 함수 사용시 개발 종료후 전부 삭제하는 것이 좋음
=> 로그 출력도 시스템 자원을 사용하기 때문
6) 로그 출력 함수의 차이
let frame = CGRect(x: 10, y: 10, width: 100, height: 50)
let label = UILabel(frame: frame)
label.backgroundColor = UIColor.red
label.text = "UI Test"
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)
- 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로 선언 후 값 미변경시 경고 발생(let으로 설정하도록)
2) null 포함 여부에 따라 Optional과 Optional이 아닌 자료형으로 나눔
3) 묵시적 자료형, 명시적 자료형
=> 묵시적 자료형 : 자료형을 기재하지 않는 방식으로 자료형이 자동으로 설정
=> 명시적 자료형 : 자료형을 기재하는 방식
4) Swift는 정적 바인딩
=> 정적 바인딩은 데이터를 대입하기 전에 자료형을 결정
=> 자료형을 미리 설정하고 컴파일시 잘못된 데이터 입력시 실행하지 않음
5) 변수 명명 규칙
=> 영문자, 숫자, 한글, 한자, 특문, 이미지용 바이너리 모두 가능
=> 예약어는 변수명으로 사용할 수 없으나, 대소문자를 변경하거나 작은따옴표로 감싸면 예약어도 변수명으로 가능
=> 연산자는 불가
=> 숫자로 시작할 수 없고, _외의 특수문자도 안됨
=> 중간에 공백은 안됨
6) 변수 생성(var 이름 : 자료형 = 값)
=> 자료형 생략시 자료형 추론으로 자료형 설정
=> 자료형 생략 상태에서 값 생략시 에러
=> 값을 생략하거나 null을 대입하려면 자료형이 Optional이어야 함
=> Swift에서는 null대신 nil이라고 함(자료구조와 동일)
=> 변수명은 하나의 영역에서는 한번만 생성
=> 변수에 값 대입시 변수명 = 값의 형태
=> 카멜 표기법
- 클래스와 인터페이스(프로토콜)명은 대문자, 변수, 메소드명은 소문자로 시작, 상수는 모두 대문자로 표기
- 2개 단어이상으로 만들어진 경우 2번째 단어의 첫글자는 대문자로 시작
=> 헝가리안 표기법
- 변수 명 앞의 자료형과 범위를 표기하는 방식
- boolean = b, int = n, float = f, char = c, String = 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이라는 값을 대입
=> ob : 2진수 - 기계가 숫자를 표현하는 방법
- Oo : 8진수 - 파일의 허가 모드 설정
- Ox : 16진수 - 색상값이나 메모리의 참조를 나타낼때 이용
=> Float - 32bit 실수이고, 소수는 7자리까지 정밀하게 표현
- Double - 64bit 실수이고, 소수는 15자리까지 정밀하게 표현
- 실수 상수는 Double
- 이전에는 실수를 Float을 많이 사용했기 때문에 Api에서는 실수 자료형이 Float인 경우가 더 많음
=> Bool - true or false 표현
=> nil : 데이터를 저장하지 않는다는 참조형 리터럴
- swift에서는 모든 자료형의 변수에 nil대입 가능 - Optional만 붙으면 됨
5. 타입 추론과 타입 명시
=> swift는 타입에 안전한 언어 : 정적 바인딩 언어
- 선언할 때, 선언한 자료형의 데이터만 대입 가능
=> 선언시 선언한 것 외의 자료형 데이터 대입시 컴파일 에러 발생
=> swift는 변수 선언시 자료형 미기재시 반드시 초기값을 설정해야 함
- 해당 초기값을 가지고 타입을 추론하여 사용
ex) 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 //d의 자료형은 Double
var f:Float = 10.4 //f의 자료형은 Float
var str = "T" //str의 자료형은 String
var ch:Character = "K" //ch의 자료형은 Chracter
=> 개발자들은 자료형 명시를 선호
=> var 대신 let을 붙이면 변수의 값 변경 불가 - 상수화
- 이전 개발 방법론에서는 이름을 모두 대문자로 하는 것을 권장, swift에서는 별다른 제약이 없음
=> swift의 변수나 메소드 표기법은 클래스 다이어그램(UML)의 표기법
**Closure
=> javascript : 함수 안에서 함수를 리턴하여 함수 외부에서 함수 내부의 지역변수 값을 변경할 수 있도록 하는 것
=> swift, iOS : 자바릐 람다처럼 이름없는 함수를 만드는 것
=> jvm 언어의 하나 : 우리나라에서는 음원 사이트들에서 가끔 이용, 미국에서는 많이 사용
'수업 정리' 카테고리의 다른 글
Swift 에러 정리 (1) | 2020.08.11 |
---|---|
89일차 수업정리(Swift - 자료형, 변수, 제어문, 반복문, 함수) (0) | 2020.08.11 |
87일차 수업정리(Android - 오디오 재생, 맵 데이터 읽어오기) (0) | 2020.08.07 |
퀵소트(작성중) (0) | 2020.08.05 |
85~86일차 수업정리(Android - Material Design, (0) | 2020.08.05 |