728x90
Switch와 if 사용하는 이유
- switch문장은 완전하다, 즉 이 문장은 case 체크 할 수 있는 모든 값의 블록 또는 사용자가 가지고 있어야 한다. default, if, else if는 놓칠 수 있다.
- 여러 개의 가능한 결과에 대한 값을 확인하려면 해당 값은 한번만 읽히지만 if는 여러번 읽는다. 함수 호출의 일부는 속도가 느려질 수 있기 때문에 함수 호출을 사용하기 시작할때 기능이 중요하다.
- 다루기 어려운 고도의 패턴 매칭을 가능하게 한다.
추가로 3개이상의 동일한 값을 체크하고 싶다면 사용하기도 한다.
Switch 문장은 처음에 확인해야 할 어떤 값이 필요하다.
default: 모든 case 값이 일치하지 않을 때 실행되는 코드 블록이다.
코드 예시
int num = 3;
String result = "";
switch(num) {
case 1:
result = "One";
break;
case 2:
result = "Two";
break;
case 3:
result = "Three";
break;
default:
result = "Unknown";
break;
}
System.out.println(result);
위 코드에서, 변수 num 값이 3이므로 case 3이 실행되어 result에 "Three"가 할당됩니다. 그리고 break 키워드를 통해 switch문을 종료합니다. 마지막으로 result 값인 "Three"이 출력됩니다.
삼항연산자
삼항 연산자는 Swift 언어에서도 사용할 수 있습니다. 다음은 Swift 언어에서 삼항 연산자를 사용한 코드 예시입니다.
let num = 5
let result = (num > 0) ? "양수입니다." : "음수입니다."
print(result)
위 코드에서, 변수 num 값이 5이므로 num > 0 조건식이 참입니다. 따라서 (num > 0) ? "양수입니다." : "음수입니다." 표현식의 결과는 "양수입니다."가 됩니다. 마지막으로 "양수입니다."가 출력됩니다.
데이터 구조와 중요성
- 데이터구조
- 효율성
- 유지 보수성
- 데이터 활용을 위한 체계화 방법
데이터 구조 + 알고리즘 = 프로그램
- 데이터 추상화(abstraction)기법
- 데이터가 지닌 복잡성을 관리하기 위한 기술
- 데이터 구조를 디자인
- 내부의 구현방식을 몰라도 되도록 하기 위함, 개발자는 알고리즘이 제공하는 인터페이스의 활용에 집중할 수 있다.
- 문제를 해결하기 위한 패턴
스위프트 REPL
- 스위프트 컴파일러(Read-Eval-Print-Loop)
- 즉시 코드를 실행하고 결과를 도출
- 값을 별도로 할당하지 않았을때 REPL이 직접 $R0라는 변수를 생성해서 값을 할당
기본적인 데이터 구조
- 배열 & 포인터
- 인접 데이터 구조: 데이터 메모리 영역중 인접한 부분에 저장(ex. 배열,힙,매트릭스,해시 테이블)
- 연결 데이터 구조: 서로 명확히 구분되는 메모리 영역을 차지하되 포인터라는 주소 체계로 연결, 관리 되는 구조(ex. lists, trees, graphs)
인접 데이터 구조(Contiguous data structures)
- 선형 데이터 구조(one-dimensional array)
- 일정한 순서에 따라 개별 데이터 요소에 접근가능한 인덱스기반의 데이터 구조
배열
- 선형 배열
- 다차원 배열
- 행렬(matrix) : 2차원 배열을 구현
배열 선언
- Array<Type>형식 사용
- 축약형인 [Type]형식을 사용
- 명시적으로 선언하지 않고 컴파일러가 추측(type inference)하게 하는 방법
- var myIntArray : [Int] = [] 배열요소가 없는 배열 선언
- var my2DArray: [[Int]] = [[1,2],[10,11],[20,30]] 이차원 배열
배열 요소 가져오기
- 배열 내부의 요소를 가져오는 방법은 여러가지
- 해당 요소의 인덱스 번호를 안다면 직접 호출 가능
- 순환문을 이용해서 특정 요소를 반복적으로 가져와야 할 때 for…in 문법을 사용
- 일정 영역에 속한 요소를 가져와야 할 때도 있는 범위를 지정해서 가져온다.
//2차원 배열에서 특정 배열 요소를 직접 가져오는 방식
1> var my2DArray: [[Int]] = [[1,2],[10,11],[20,30]]
my2DArray: [[Int]] = 3 values {
[0] = 2 values {
[0] = 1
[1] = 2
}
[1] = 2 values {
[0] = 10
[1] = 11
}
[2] = 2 values {
[0] = 20
[1] = 30
}
}
2> var element = my2DArrau[0][0]
element: Int = 1
3> element = my2DArray[1][1]
4> print(element)
배열 요소 추가
- 추가를 맨 앞, 끝 부분에 인지 따라 달라진다.
배열 요소 삭제
- .remove
- 배열 요소의 추가와 마찬가지로 삭제하려는 요소의 위치가 어떤 부부인지에 따라 달라진다
연결 데이터 구조(Linked data structures)
- 데이터 타입과 이를 다른 데이터와 묶어주는 포인터(메모리상의 위치 주소)로 구성
- 연결리스트
- 데이터와 다음 노드에 연결할수 있는 정보를 포함
- 추가 링크 정보를 통해 연결된 데이터에서 앞 또는 뒤로 이동,
- 추가 노드를 삽입하거나 삭제하는 일은 매우 간단
- 자체 참조 클래스인 노두로 구성,각각의 노드는 데이터와 전체 연결데이터에서 다음 노드로 이동할 수 있는 링크 정보를 포함
- S: 단일연결리스트, N: 단일연결리스트의 마지막부분, D: 이중연결리스트 좌측(이전의 노드), 우측(다음노드)
단일 연결 리스트
- 연결 리스트 데이터 구조는 앞서 정의한 네 개의 속성으로 구성,
class LinkedList<T> {
var item
var next: LinkedList<T>?
}
데이터 구조의 종류와 장단점
728x90
'기타 > Today I Learned' 카테고리의 다른 글
[TIL] 점근적 분석 & 사업계획서 (0) | 2023.03.29 |
---|---|
[TIL] 기본 연산자(Basic Operators) & 데이터 구조 (0) | 2023.03.28 |
[TIL] Swift 문법(contains, allSatisfy) (0) | 2023.03.19 |
[TIL] iOS App 개발자는 무엇일까 (0) | 2023.03.14 |
[TIL] 겸손함(애플 디벨로퍼 아카데미생분들 모임) (0) | 2023.03.11 |