문자열 이제 중요한 부분 들어간다고 하니 내일의 나야 화이팅
잘라서 공부하니 조금 연속성은 떨어진다(아쉽)
정리하는 것은 좋다
지난번에 이해도를 3정도 표시한 부분이 5로 올라가서 역시 두세번씩 공부해야하는 구나 한번 더 다짐했다.
간단히 정리
의도치 않은 변경방지, 은닉화/캡슐화 가능, 코드영역분리 등
open/public/internal/fileprivate/private(개방/고수준 - 은닉/저수준)
클래스 / open이 가장 최상개념 , 구조체 / public이 가장 최상개념
internal 같은 모듈 내에서만 접근가능(디폴트)
fileprivate 같은 파일내에서만 / private 같은 스코프 내에서만
모듈은 라이브러리등 import하여 사용하는 모든 파일묶음
접근수준을 가질수있는 요소는 독립요소(타입, 변수/속성, 함수/메서드/생성자/서브스크립트,프로토콜)
가장 중요한 원칙 : 저수준(은닉)은 고수준(개방)에 접근가능하다
_변수이름 : 보통의 경우 private
변수에 선언되는 접근제어와 할당되는 타입의 관계
타입내부 멤버와 타입자체의 접근제어 관계
타입자체의 private선언의 의미와 최종 동작 접근제어 (fileprivate)
명시적 접근수준 타입의 내부멤버에 명시적 접근수준 없을시 internal 디폴트
슈퍼클래스와 서브클래스의 접근제어 관계
서브클래스에서 슈퍼클래스의 메서드 재정의의 경우 접근제어 수준을 올려서 재설정 할 수 있을까? 가능하다면 왜 가능할까?
확장시 본체의 동일한 접근수준유지, 멤버접근가능
보통 쓰기의 접근수준이 더 낮다(저수준/은닉) => private(set)의 유용함
아스키코드 < 유니코드(아스키코드 포함)
스위프트 문자열은 유니코드값(코드포인트 스칼라값)으로 구성, 가변인코딩 특성(메모리활용 굿)
스위프트 String(구조체 값타입) => 의미기반 / 오브젝트 C NSString(클래스 참조타입) => UTF-16 유니코드 기반 (count 와 lenght시 출력다름) / 상호 toll free bridged 로 타입캐스팅 as 로 타입변환 자유자재 가능
스위프트 문자열 => 단순 인덱스 사용불가 (의미단위 인식)
한과 ㅎ ㅏ ㄴ 의 차이
\ escape character 백슬래시 사용한 escape character sequence 알아두기
""" 줄바꿈 """ => 특징알기, 들여쓰기, 엔터인식, \n넣을때와 \넣었을때 차이 , 특수문자 인식
#rawString 확장구분자 / 앞뒤 #개수(개수무관) 통일 필수, 줄바꿈은 제공 안하는 있는그대로의 문자열 인식가능한 구분자
문자열보간법(interpolation) print와 dump의 차이(인스턴스 자체 출력 / 문자열보간법 사용출력 차이
swift 4 : CustomStringConvertible 프로토콜채택후 description 구현 => 문자열 보간법이란 description속성을 읽는 행위
swift 5 : StringInterpolation메서드 내부에서 appendInterpolation메서드 구현 (style등 파라미터 추가 가능 / 확장가능) mutaing 키워드 필수 / 기본파라미터로 커스텀 적용할 타입을 받음 => 문자열 보간법이란 appendInterpolation메서드에 해당 인스턴스, 변수를 아규먼트로 던지고 메서드를 실행하는 것
숫자 to 문자열 : 출력형식지정자 Format Specifiers String(format=" %로 시작하는 변환형식", 변환할데이터) / NumberFormatter클래스 => 인스턴스 생성후 내부 속성을 설정 (버림, 자릿수 , 올림 등등) => 인스턴스의 string메서드 사용 string(for: 숫자)
서브스트링개념 / 인덱싱 , prefix, suffix 등 기존 문자열의 일부를 사용할때 적용되는 스위프트의 메모리공유 개념으로 인한 타입 (String.Subsequence타입)
원문자열 수정 시 서브스트링 => 스트링으로 타입변환되며 메모리공간 신설
기본적으로 메모리공유임 => 오래사용할 경우 String생성자를 통해 새롭게 메모리공간을 할당해주어야 함
문자열 to 배열 : map , Array() , Array(arrayLiteral: ) 각각 어떤 타입이 출력될지 예상해보자
배열 to 문자열 (문자열배열 to 문자열 joined매서드 / 문자배열 to 문자열 String생성자)
문자열을 뒤섞는 알고리즘을 어떻게 위의 개념들로 적용할수있을지 생각해보자 (마이너한 방법도 생각해보기)