일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 제거된값 첨부하기
- 정보처리기사공부방법
- 다자녀장학금
- playground배열
- 아이엔이야기
- 합의정리
- wxMaxima install for mac os
- 숫타니파아타
- 이런 사람에게 "절대" 돈과 시간 쓰지 마세요. (이헌주 교수 3부)
- 윤파고
- 직선의방정식
- 무소의뿔
- 2023채용박람회
- 쌍대성원리
- 그래프2
- 오블완
- 오일러투어
- 맥북에서 wxMaxima 설치
- 이분그래프
- 나르시스트
- 청년도배사 이야기
- 집착형
- 허스켈그래프
- 배윤슬
- 최단경로문제
- wxmaxima
- 등록금0원
- 티스토리챌린지
- 데이터베이스시스템
- kgol
- Today
- Total
사적공간
Swift 구조체와 클래스: 객체지향 스위프트 본문
출처 :꼼꼼한 재은씨의 swift 문법/이재은/루미페이퍼
정수형, 실수형, 문자열, 배열, 딕셔너리 등 기본 자료형은 모두 구조체를 사용하여 정의됨.
하나의 큰 코드블록
= {값을 저장할 수는 없지만 특정 기능을 실행할수 있는 함수와 값을 저장할 수 있지만 혼자서 특정 기능을 실행할 수 없는 변수와 상수의 특성을 모아놓은 것 }
언어적 유연성의 근간
cf) 유연성은 코드를 떼어서 다른 곳으로 옮기거나 새로운 코드를 추가하기 쉬운 성질 (<-> 의존성)
위치에 따라 명칭이 다름
구조체 or 클래스 내부 { 변수or상수 ==>> 프로퍼티(Properties), 속성 == 속성변수or속성상수}
구조체 or 클래스 내부 { 함수(펑션) ==>> 메소드(Method) }
구조체나 클래스의 멤버(Member) == 프로퍼티(Properties) + 메소드(Method)
ex) 멤버속성, 멤버변수, 멤버 메소드...
구조체 vs 클래스
구조체와 클래스의 공통점
프로퍼티 : 변수나 상수를 사용하여 값을 저장하는 프로퍼티를 정의할 수 있다.
메소드 : 함수를 사용하여 기능을 제공하는 메소드를 정의할 수 있다.
서브스크립트 : 속성값에 접근할 수 있는 방법을 제공하는 서브스크립트를 정의할 수 있다.
초기화 블록 : 객체를 원하는 초기 상태로 설정해주는 초기화 블록을 정의할 수 있다.
확장 : 객체에 함수적 기능을 추가하는 확장(expand)구문을 사용할 수 있다.
프로토콜 : 특정 형식의 함수적 표준을 제공하기 위한 프로토콜을 구현할 수 있다.
구조체와 클래스의 차이점
클래스의 기능범위가 구조체보다 큼 (위 내용에 아래내용 +)
상속 : 클래스의 특성을 다른 클래스에게 물려줄 수 있다.
타입 캐스팅 : 실행 시 컴파일러가 클래스 인스턴스의 타입을 미리 파악하고 검사할 수 있다.
소멸화 구문 : 인스턴스가 소멸되기 직전에 처리해야 할 구문을 미리 등록해 놓을 수 있다.
참조에 의한 전달 : 클래스 인스턴스가 전달될 때에는 참조 형식으로 제공되며, 이때 참조가 가능한 개수는 제약이 없다.
구조체와 클래스의 기본개념
구조체의 정의 형식
struct 구조체 이름 {
// 구조체 정의 내용이 들어갈 부분
}
클래스의 정의 형식
class 클래스 이름 {
// 클래스 정의 내용이 들어갈 부분
}
책에 설명이 잘못됨
표기법 설명
1. 구조체와 클래스 이름의 첫 글자는 대문자로, 나머지 글자는 소문자로 작성한다. (파스칼 표기법)
2. 두 개 이상의 복합 단어는 단어별로 끊어 첫 글자는 대문자로, 나머지는 소문자로 작성한다.
3. 이미 축약된 약어는 모두 대문자로 작성 가능하다.( ex. JSON, NS, HTTP 등)
4. 프로퍼티나 메소드를 선언할 때는 소문자로 시작한다. (카멜 표기법)
5. 언더바로 단어를 연결하는 방식은 지양한다.
6. 네이밍 룰은 실무에서 중요함.
스위프트에서 구조체나 클래스, 열거형, 프로토콜 등을 선언할 때는 파스칼(Pascal) 표기법을 씀. ▼
스위프트에서 구조체나 클래스 정의 내에 프로퍼티나 메소드를 선언할 때는 카멜 표기법을 씀. ▼
메소드와 프로퍼티
예제
인스턴스
구조체나 클래스를 정의하는 것만으로는 사용하지 못함, 메모리를 할당받지 못했기 때문임. 그래서 메모리를 할당 받은 객체가 필요함.
구조체나 클래스는 틀, 원형(Origin)이며
이것을 바탕으로 실제로 값을 담을 그릇을 찍어내야만 값을 담을 수 있음. 이 그릇이 객체임. 객체 == 인스턴스(Instance)
타입의 설계도를(클래스) 사용해서 메모리 공간을 할당 받은 것이 인스턴스(클래스의 인스턴스)임.
함수명( ) 에서 ( )는 함수호출연산자
클래스 or 구조체( ) 에서 ( )는 인스턴스 생성 연산자
인스턴스가 생성되어야 프로퍼티에 접근이 가능하며, 프로퍼티 접근은 점 문법(Dot Syntax)를 이용하여 인스턴스 하위 객체에 접근함.
<인스턴스 이름>.<프로퍼티 이름>
객체에 정의된 프로퍼티가 서브 프로퍼티를 가지고 있는 객체라면
<인스턴스 이름>.<프로퍼티 이름>.<프로퍼티의 서브 프로퍼티 이름>
추가된 프로퍼티 res은 VideoMode 클래스의 프로퍼티이자 동시에 Resolution 구조체의 인스턴스.
res 프로퍼티 하위에는 width 프로퍼티가 존재함. Resolution 구조체에서 정의된 속성임.
개념적으로 vMode -> resoultion -> width로 순차적으로 접근함.
위의 예시처럼 체인방식이 안된다면 단계적인 할당 과정을 거쳐서 하위 프로퍼티에 접근할 수 밖에 없음.
책의 예시 틀림
예시
초기화
클래스 or 구조체 ( ) 에서 빈 괄호에 인자값을 넣어 객체의 프로퍼티를 초기화(Initialize) 함.
스위프트에서 옵져널 타입으로 선언되지 않은 모든 프로퍼티는 명시적으로 초기화해 주어야 함.
1) 프로퍼티를 선언하면서 동시에 초기값을 지정하는 경우
or
2) 초기화 메소드 내에서 프로퍼티의 초기값을 지정하는 경우
or
3) 옵져널 타입이 되어야 함.
위 1)과 2)가 의미하는 바는 클래스나 구조체의 모든 프로퍼티는 적어도 인스턴스가 생성되는 시점까지는 반드시 초기화되어야 한다는 것임
'ios > 문법' 카테고리의 다른 글
Swift 함수 (0) | 2023.02.22 |
---|---|
옵셔널 Optional (0) | 2023.02.22 |
swift 집단 자료형 (0) | 2023.02.17 |
swift 기본문법 (0) | 2023.02.16 |