Swift TIL(56)

웰디(Well-D)·2023년 10월 21일
0

Sweet & Soft, SWIFT

목록 보기
54/76

예습+복습(본습)

마지막 챕터 쪽은 예습을 다 하지 않았었다(다행히 중요도가 높지는 않은 내용들)
처음 듣긴 했지만 이해하기는 어렵지않은 내용들이었다 + 가볍게 보고 넘기라는 말씀도 많았던 챕터인지라 괜찮았다.

가볍게 정리

고급연산자

  • 논리연산자 => 스위프트의 논리평가식 : 단락평가방식 => 최소한의 코드실행 => 함수내에서 외부변수를 건드릴때 사이드이펙트가 발생가능해짐 (if문에 함수를 직접 호출하면 단락평가방식에 의한 함수 실제 실행횟수 차이 발생으로 if문 등의 논리평가식 구조 전개(순서 등)에 따라 외부변수의 값이 달라짐 )
    => 실행결과를 변수에 담아서 논리평가식에 사용하면 실행횟수고정으로 해결가능

  • 비트연산자 => 논리연산자 4개 / 이동연산자 2개
    ^(XOR) <<(2곱하기) >>(2나누기) 남는공간 0삽입, 넘는공간 버림 / 부호있는 signed비트연산자에서의 라이트 시프트주의(부호비트 유지)

  • 연산자메서드 => 기존에 있는 연산자를 구현할때는 연산자를 선언해주는 과정은 불필요(구현만 하면됨)

  • 구조체를 만들고 구조체끼리 기본연산을 하고싶다면 연산자 메서드를 구조체버전으로 구현가능하다 (타입메서드로 구현 static func) + prefix / postfix / infix => 파라미터로 lhs, rhs도 자주씀(infix 이항연산자경우)

  • inout 키워드 => 복합할당 메서드 구현시 사용가능(연산 후 다시 넣어주는 것이므로)

  • 비교연산자 => Equatable / Comparable 프로토콜

  • == != 연산을 위해서는 Equatable 프로토콜 채택필요 => 예외(연관값없는 열거형)적으로 프로토콜 채택없이고 메서드구현되있음 => 프로토콜 채택해야하는 그외의 경우에는 열거형(연관값이 있고, 연관값이 모두 Equatable채택타입일시) / 구조체(저장속성만, 해당 저장속성이 Equtable채택타입일시) 예외적으로 원칙과 달리 프로토콜 요구사항을 직접 구현필요 없음(컴파일러 자동구현)

  • 커스텀연산자 구현 : 연산자선언(중위연산자일때 우선그룹지정여부 고려하여 표기 => preceduregroup으로 커스텀 구현 or 기존 연산자그룹 사용) => 해당 타입에서 타입메서드로 선언했던 연산자내용 구현

메모리안전

  • 멀티쓰레드에서 발생했던 race condition => 싱글쓰레드에서도 발생가능 (같은 메모리 동시적 접근 / 메모리충돌)

  • 주로 값을 복사해서 쓰는게 아니라 직접 해당 메모리에 접근하여 사용하는 inout 키워드파라미터(정의) &아규먼트(호출)에서 발생

  • 현상예시) 함수실행시 아규면트로 변수접근 도중에 함수내부에서 같은 변수를 또 접근시도 => 해결 변수를 복사하여 사용

  • 현상예시) 동일함수에서 다른아규먼트로 같은 변수접근시

  • 현상예시) 구조체에서 동일 인스턴스 접근시(인스턴스 내의 메서드가 받는 파라미터로 또다시 같은 인스턴스를 줄때)

  • 현상예시) 동일한 튜플의 속성들을 다른 파라미터로 접근하는 함수를 실행할때

  • 현상예시) 동일 인스턴스의 속성들을 다른파라미터로 접근하는 함수를 실행할때

  • 컴파일러의 메모리 안전 판단기능을 통해 동시접근으로 보여도 상호영향이 실제로 없는경우를 판단하여 안전을 증명하는 경우도 있음(예: 전역변수아닌 지역변수로 인스턴스를 선언 후 동일 인스턴스의 속성들을 함수 파라미터에 넣어 실행등으로 접근하는 경우)

profile
Wellness 잘사는 것에 진심인 웰디입니다. 여러분의 몸과 마음, 통장의 건강을 수호하고싶어요. 느리더라도, 꾸준히

0개의 댓글