조건문 

 

 if문 

* 조건절에 Bool 타입을 사용해야 함

var x: Int = 0
if !x { ... } //컴파일 에러
if x == 0 { ... }
if arr.isEmpty { ... }
var score = 95
var grade = ""

if score/10 == 9 || score/10 == 10 {
    grade = "A"
} else if score/10 == 8 {
    grade = "B"
} else if score/10 == 7 {
    grade = "C"
} else if score/10 == 6 {
    grade = "D"
} else {
    grade = "F"
}

grade //A

 

 Switch문 

* fallthrough를 지원하지 않으므로(관련 없는 case문은 실행하지 않고 switch문을 빠져 나감) break는 필요 없음.

* fallthrough를 원한다면 case문에 fallthrough 추가

* case문에 내용이 없을 경우 에러

* 하나의 case에 여러 값을 조건으로 할 때는 쉼표( , )로 구분

var score = 95
var grade = ""

switch score/10 {
case 9, 10:
    grade = "A"
    //fallthrough
case 8:
    grade = "B"
case 7:
    grade = "C"
case 6:
    grade = "D"
default:
    grade = "F"
}

grade //A

 

 

 

 반복문 

 

 for문 

for i in 0..<10 {
    print(i) //0~9
}

for _ in 0..<10 {
    print("Hello World!") //10번 반복 출력
}
let names: [String] = ["Ahhye", "Eunseo", "Jisu", "Yuhyeon"]

for name in names {
    print("제 이름은 \(name)입니다.")
}

 

 while문 

var num = 0

while num < 10 {
    print(num)
    num += 1
}

 

 repeat-while문 

* do-while문과 유사

var num = 0

repeat {
    print(num)
    num += 1
} while num < 10

 

 

 

  Swift  

: 정적 타이핑 언어(정의 시 자료형 명시해주어야 하는 언어)

: 타입추론(자료형을 명시하지 않아도 정적 타이핑이 가능하게 하는 것)

 

 

정적 타이핑 언어이지만 타입추론이 가능하다면

타입을 명시(Type Annotation)해야 하는지, 타입 추론(Type Inference)을 이용해야 하는지

실무에서의 방법이 궁금,,

 

 

 변수(Variable) 

: 값 변경 가능

var name: String = "Ahhye" //Type Annotation
var name = "Ahhye" //Type Inference

 

 상수(Constant) 

: 값 변경 불가능

let name: String = "Ahhye" //Type Annotation
let name = "Ahhye" //Type Inference

 

* 자료형이 다르다면 연산이 불가능 → 형변환 필요

let x: Int = 20
let y: Float = 20.5
x + y // 컴파일 에러
Float(x) + y // 40.5

* Int/Float → String

String(x) + " 더하기 " + String(y) + "는 40.5입니다."
// "\(x) 더하기 \(y)는 40.5입니다."

 

 

 배열(Array) 

var names: [String] = [] //빈 배열 선언
var names = [String]() //빈 배열 선언

var students: [String] = ["Ahhye", "Eunseo", "Jisu", "Yuhyeon"] //Type Annotation
var students = ["Ahhye", "Eunseo", "Jisu", "Yuhyeon"] //Type Inference

students[1] //Eunseo

 

 딕셔너리(Dictionary) 

var majors: [String: String] = [:] //빈 딕셔너리 선언
var majors = [String: String]() //빈 딕셔너리 선언

var majors: [String: String] = [
    "Ahhye": "living design",
    "Eunseo": "computer engineering",
    "Jisu": "electronic engineering",
    "Yuhyeon": "drawing",
] //Type Annotation

var majors = [
    "Ahhye": "living design",
    "Eunseo": "computer engineering",
    "Jisu": "electronic engineering",
    "Yuhyeon": "drawing",
] //Type Inference

majors["Jisu"] //electronic engineering

 

* 배열과 딕셔너리도 let으로 선언 시 값 수정 불가능

 

 1. 고정에서 동적으로 변경하기 

1) VirtualBox 관리자에서 용량을 늘리고 싶은 가상 머신 선택 후 [설정] 클릭

2) [저장소] 탭에서 '컨트롤러' 하단의 vdi 파일 선택

3) 우측의 [정보]에서 '위치' 주소 복사

4) 명령 프롬프트 실행 후 VBoxManage.exe가 저장된 위치로 이동 (다를 수 있으니 확인 후 입력!)

cd "C:\Program Files\Oracle\VirtualBox"

5) 

VBoxManage clonemedium disk "/Users/기존 경로/설치된 이름.vdi" "/Users/새로운 경로/새로운 이름.vdi" -variant Standard

* @@@.vdi 까지 포함되어야 함.

6) 0% ~ 100%까지 완료되면 변경 완료!

7) 다시 VirtualBox 관리자에서 가상 머신 선택 - [설정] - [저장소] 탭에서 컨트롤러 우클릭 - [하드디스크] - [추가] - 저장한 경로에서 vdi 파일 선택 - [열기] - 목록에서 해당 vdi 파일 선택 후 [선택]

8) 기존의 파일 우클릭 - [연결 삭제하기]

 

 2. 용량 늘리기 

1) 같은 위치(VBoxManage.exe가 위치한 경로)에서 아래의 명령 입력

VBoxManage.exe modifyhd "새로운 vdi 파일 경로" --resize 변경할사이즈(MB)
# VBoxManage.exe modifyhd "C:\Users\ahhye\VirtualBox VMs\MacOS\copy_macOS.vdi" --resize 102400

* 사이즈의 단위는 MB. 100GB로 변경하고 싶은 경우 100 * 1024 = 102400을 입력하면 됨.

2) 0% ~ 100%까지 완료되면 변경 완료!

 

 

 

 

구글링해보면서 여러 가지 방법 다 해봤는데,

본인의 경우 이 방법으로 해결했다.

 

 

 해결 방법 

1) Virtualbox 관리자에서 해당 가상 머신을 선택

2) [설정] - [네트워크] - [어댑터 1] 탭에서 [다음에 연결됨(A):]을 NAT로 설정

3) 어댑터 1을 제외한 어댑터 2,3,4는 사용하지 않음

4) 가상 머신 재시작해보면 네트워크에 잘 연결된 것을 확인할 수 있음!

 

 

 

 

가상 디스크에 파티션이 없기 때문에 선택할 수 있는 디스크가 뜨지 않는 것.

 

 해결 방법 

1) 좌측 상단의 [Install macOS 버전 이름] - [Quit Install macOS] 클릭하여 Installer 종료

2) 디스크 유틸리티 선택

3) 좌측에서 디스크 선택

4) [지우기(Erase)] - [포맷]은 'Mac OS Extended (Journaled) - 이름 설정 - [지우기] 클릭

5) 디스크 유틸리티 종료 후 재설치하면 선택할 수 있는 디스크가 생겼을 것

 

* 4번에서 파티션이 생성됨.

 

 

 

 

 1. Virtualbox 설치 

www.virtualbox.org/wiki/Downloads

 

Downloads – Oracle VM VirtualBox

Download VirtualBox Here you will find links to VirtualBox binaries and its source code. VirtualBox binaries By downloading, you agree to the terms and conditions of the respective license. If you're looking for the latest VirtualBox 6.0 packages, see Virt

www.virtualbox.org

위 링크로 들어가서

1) VirtualBox 6.1.16 platform packages (2021.01.20 기준) - Windows hosts 설치

2) VirtualBox 6.1.16 Oracle VM VirtualBox Extension Pack (2021.01.20 기준) - All supported platforms 설치

 

 

 2. macOS 파일 다운로드 

www.mediafire.com/file/vuxhn73malcin7w/macOS+Big+Sur+Beta+11.0+(20A5343j).iso/file

 

macOS Big Sur Beta 11.0 (20A5343j)

 

www.mediafire.com

가상 머신이 있는 폴더에 저장하면 관리가 쉬움

(ex. C:\Users\UserName\VirtualBox VMs)

 

* 본인은 가상 머신 메모리 문제로 카탈리나 vmdk 파일로 설치 후 Big Sur 버전으로 업그레이드했음. Xcode 설치하려면 10.15.4 이상, 빌드하려면 11.0 이상이어야하므로 이하 버전을 이용하는 경우 설치 완료 이후 별도의 소프트웨어 업그레이드가 필요함.

 

 

 3. iso 파일을 사용하여 가상 머신 만들기 

1) [머신]-[새로 만들기] 또는 [새로 만들기(N)] 버튼 클릭

2) 하단의 [전문가 모드(E)]로 변경

3) 이름, 위치, 메모리 크기(최소 4096MB) 설정 후 [하드 디스크]에서 '지금 새 가상 하드 디스크 만들기' 선택 후 [만들기] 클릭

4) 파일 크기 설정(시행착오를 겪은 결과 100GB는 되어야 그래도 돌아가는듯..), VDI, 동적 할당 선택 후 [만들기] 클릭

 

 

 4. 가상 머신 설정하기 

1) 추가된 머신 선택 후 [설정] 클릭

2) [시스템]-[마더보드] 탭에서 플로피디스크 체크 해제, EFI 사용하기 선택

3) [시스템]-[프로세서] 탭에서 CPU 개수 2개로 변경

4) [디스플레이]-[화면] 탭에서 비디오 메모리 128MB로 변경

5) [저장소] 탭에서 '비어 있음' 광학 드라이브 클릭 후 우측 CD 모양 아이콘 클릭 - 가상 광학 디스크 선택/만들기 - 추가 - 다운받았던 iso 파일 선택 - [선택] - [확인]

6) [USB] 탭에서 'USB 3.0(xHCI) 컨트롤러(3)' 선택

 

 

 5. 명령 프롬프트에 command 차례대로 입력+Enter 

cd "C:\Program Files\Oracle\VirtualBox\"

VBoxManage.exe modifyvm "가상머신이름" --cpuidset 00000001 000106e5 00100800 0098e3fd bfebfbff 

VBoxManage setextradata "가상머신이름" "VBoxInternal/Devices/efi/0/Config/DmiSystemProduct" "iMac11,3"

VBoxManage setextradata "가상머신이름" "VBoxInternal/Devices/efi/0/Config/DmiSystemVersion" "1.0"

VBoxManage setextradata "가상머신이름" "VBoxInternal/Devices/efi/0/Config/DmiBoardProduct" "Iloveapple"

VBoxManage setextradata "가상머신이름" "VBoxInternal/Devices/smc/0/Config/DeviceKey" "ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc"

VBoxManage setextradata "가상머신이름" "VBoxInternal/Devices/smc/0/Config/GetKeyFromRealSMC" 1

 

 

 6. 가상머신 실행 후 기본 설정하면 설치 완료! 

 

 

 

 참고 

[iOS/Swift] Virtualbox로 macOS 설치 시 할당할 디스크가 뜨지 않을 때

[iOS/Swift] Virtualbox로 macOS 실행 시 네트워크 연결이 안 될 때

 

 

https://www.python.org/static/community_logos/python-logo-inkscape.svg

 

 

 조건 함수를 만족하는 데이터만을 추려냄! 

* 필터 형태로 반환하므로 리스트나 튜플로 변환해주어야 함

 

 

 1) 일반 함수 사용 

friends = [{'name': 'Robert Downey Jr.', 'role': 'Iron Man', 'nationality': 'the United States'},
	    {'name': 'Tom Holland', 'role': 'Spider Man', 'nationality': 'the United Kingdom'}, 
            {'name': 'Chris Evans', 'role': 'Captain America', 'nationality': 'the United States'},
            {'name': 'Chris Hemsworth', 'role': 'Thor', 'nationality': 'Australia'}]

def IsAmerican(data):
	return data["nationality"] == "the United States"
    
filter(IsAmerican, friends) # <filter object at 0x000001E45BF7A550>

list(filter(IsAmerican, friends)) 
# [{'name': 'Robert Downey Jr.', 'role': 'Iron Man', 'nationality': 'the United States'}, 
# {'name': 'Chris Evans', 'role': 'Captain America', 'nationality': 'the United States'}]

 

 

 2) 람다 함수 사용 

friends = [{'name': 'Robert Downey Jr.', 'role': 'Iron Man', 'nationality': 'the United States'},
	    {'name': 'Tom Holland', 'role': 'Spider Man', 'nationality': 'the United Kingdom'}, 
            {'name': 'Chris Evans', 'role': 'Captain America', 'nationality': 'the United States'},
            {'name': 'Chris Hemsworth', 'role': 'Thor', 'nationality': 'Australia'}]
    
filter(lambda f: f["nationality"] != "the United States", friends) # <filter object at 0x000001E45BF7ADD8>

list(filter(lambda f: f["nationality"] != "the United States", friends)) 
# [{'name': 'Tom Holland', 'role': 'Spider Man', 'nationality': 'the United Kingdom'},
# {'name': 'Chris Hemsworth', 'role': 'Thor', 'nationality': 'Australia'}]

 

 

 Falsy Values 제거 

* 0, False, None, [], () ..

list1 = [0, 1, 2, 3, False, 0, 4]
list2 = [1, False, 2, 3, None, 'abc']
list3 = [[], (), 'a', 'b', 1, 2]

print(list(filter(bool, list1))) # [1, 2, 3, 4]
print(list(filter(bool, list2))) # [1, 2, 3, 'abc']
print(list(filter(bool, list3))) # ['a', 'b', 1, 2]

 

 

 

'Python' 카테고리의 다른 글

[Python] python split(문자열 분리하기)  (0) 2021.01.19
[Python] python set(집합)  (0) 2021.01.19

 

https://www.python.org/static/community_logos/python-logo-inkscape.svg

 

 문자열을 특정 기준으로 쉽게 분리 가능! 

* 결과는 리스트

 

 

 1) 공백 기준 

hbd = 'Happy Birthday'
print(hbd) # 'Happy Birthday'
hbd.split() # ['Happy' 'Birthday']

* hbd.split(' ')도 가능

 

 

 2) 문자 기준 

hbd = 'Happy Birthday'
print(hbd) # 'Happy Birthday'
hbd.split('a') # ['H', 'ppy Birthd', 'y']

 

 

 3) 문자열 기준 

hbd = 'Happy Birthday'
print(hbd) # 'Happy Birthday'
hbd.split('th') # ['Happy Bir', 'day']

 

'Python' 카테고리의 다른 글

[Python] python 내장 함수 filter  (0) 2021.01.19
[Python] python set(집합)  (0) 2021.01.19

+ Recent posts