일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- java #android #xml #sqlite
- 컴공 #자바스크립트 #스터디 #JS #대학생
- iOS #대학생 #Swift
- iOS #Swift #컴공 #공대생
- ios #boxoffice #영화진흥위원회 #swift #앱 #app #대학생
- 컴공 #Swift #대학생 #iOS
- 컴공 #Swift #대학생 #iOS #앱개발
- iOS #Swift
- 컴공 #Swift #대학생 #iOS #앱개발 #앱디자인
- iOS #Swift #컴공 #대학생
- web #socket #polling #소켓 #폴링 #네트워크 #웹
- ios #swift #개발자 #apple
- iOS #Swift #대학생 #개발 #코딩
- node.js #npm #jest #test #웹테스트
- Today
- Total
평범한 컴공 대학생의 공부일지
Enum(열거형), Struct(구조체), Generic(<>) 본문
※이 iOS 카테고리의 글 들은 학교 강의와 과제를 기반으로 작성한 것입니다.※
- 열거형
정의 : 관련있는 데이터들이 멤버로 구성되어 있는 자료형 객체
사용하는 경우 - 원치 않는 값이 잘못 입력되는 것을 방지
- 입력 받을 값이 한정되어 있을 때
- 특정 값 중 하나만 선택하게 할 때
// 기본구조
enum 열거형명{
열거형 정의
}
enum Planet {
case Mercury, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune
} //하나의 case문에 멤버들 나열하는 것도 가능
//예제
enum Compass {
case North
case South
case East
case West
}
print(Compass.North) // Compass 열거형의 North 케이스를 출력합니다. 결과: North
var x: Compass // Compass 타입의 변수 x를 선언합니다.
x = Compass.West // Compass 열거형의 West 케이스를 x에 할당합니다.
print(x, type(of: x)) // x의 값과 타입을 출력합니다. 결과: West Compass
x = .East // Compass 타입이 명확하기 때문에 .East로 간단히 East 케이스를 x에 할당합니다.
print(x) // x의 값을 출력합니다. 결과: East
- 구조체
- 예제
// struct를 class로 변경해도 같은 결과
struct Resolution { //구조체 정의
var width = 1024 //프로퍼티
var height = 768
}
let myComputer = Resolution() //인스턴스 생성
print(myComputer.width) //프로퍼티 접근
여기서 struct를 class로 변경해도 같은 값이 나오는데 그렇다고 해서 이 2가지가 같은 것은 아닙니다.
Struct와 Class의 차이 점을 뤼튼을 통해 알아보겠습니다.
즉, 같은 값이 나온다고 해서 동일한 것은 아니라는 말이죠. 위에서 말했던 것 처럼 Struct는 memberwise initializer가 자동으로 생성하기 때문에 init을 사용하지 않아도 된다는 차이점도 존재합니다.
class Resolution { //구조체 정의
var width = 1024 //프로퍼티
var height = 768
init(width:Int, height:Int){
self.width = width
self.height = height
}
}
let myComputer = Resolution.init(width:100, height:50) //인스턴스 생성
print(myComputer.width) //프로퍼티 접근, 값: 100
//--------------------------------------------------------------------------
struct Resolution { //구조체 정의
var width = 1024 //프로퍼티
var height = 768
//init(width:Int, height:Int){
// self.width = width
// self.height = height
//}
}
let myComputer = Resolution(width:100, height:50) //인스턴스 생성
print(myComputer.width) //프로퍼티 접근, 값: 100
Class는 .init을 사용하여 멤버 초기화를 해주어야 하지만 Struct는 memberwise initializer가 자동으로 생성되기 때문에 별도로 초기화를 해주지 않아도 된다는 이야기가 됩니다. 또한 Struct는 상속이 불가능하기 때문에 상속을 이용하고 싶다면 꼭 Class를 사용해야 합니다.
class Human {
var age : Int = 1
}
var kim : Human = Human()
var lee = kim //값 타입
print(kim.age, lee.age)
lee.age = 20
print(kim.age, lee.age)
kim.age = 30
print(kim.age, lee.age)
//1 1
//20 20
//30 30 reference Type, 주소를 복사해서 가지기 때문에 값이 동일함.
//----------------------------------------------------------
struct Human {
var age : Int = 1
}
var kim : Human = Human()
var lee = kim //값 타입
print(kim.age, lee.age)
lee.age = 20
print(kim.age, lee.age)
kim.age = 30
print(kim.age, lee.age)
//1 1
//1 20
//30 20 value type, 값 타입은 복사할 때 새로운 데이터가 하나 더 생김
Struct : 값을 복사(value type), Class(reference type) : 주소를 복사 라는 차이가 있기 떄문에 위 예제처럼 출력 결과도 다르게 보이게 됩니다.
아래는 각 사용시기에 관한 내용입니다.
- Generic(<>)
- 정의 : 자료형을 나중에 결정하겠다
- 요구하는 자료형이 다를 때 함수를 여러 개 사용해야 합니다. 하지만 <>를 사용한다면 코드를 축약시킬 수 있습니다.
func myPrint(a: Int, b: Int) {
print(b,a)
}
func myPrint(a: Double, b: Double) {
print(b,a)
} //overloading
myPrint(a:1,b:2)
myPrint(a:2.5,b:3.5)
//2 1
//3.5 2.5
//--------------------------------------------------------------
//<T> 정하지 않은 자료형
func myPrint<T>(a: T, b: T) {
print(b,a)
}
myPrint(a:1,b:2)
myPrint(a:2.5,b:3.5)
myPrint(a:"안녕하세요.",b:"Taram입니다.")
//2 1
//3.5 2.5
//Taram입니다. 안녕하세요.
- <>를 사용하여 자료형을 나중에 결정하는 언어 정리
1) C++
template <typename T>
T add(T a, T b) {
return a + b;
}
2) C#
public class GenericClass<T> {
private T genericMemberVariable;
public T genericMethod(T genericParameter) {
return genericMemberVariable;
}
}
3) Java
public class Box<T> {
private T t;
public void set(T t) { this.t = t; }
public T get() { return t; }
}
4) Swift
func swapTwoValues<T>(_ a: inout T, _ b: inout T) {
let temporaryA = a
a = b
b = temporaryA
}
5) Kotlin
class Box<T>(t: T) {
var value = t
}
'iOS Swift' 카테고리의 다른 글
박스오피스 어플리케이션 정리 (0) | 2024.06.05 |
---|---|
영화 순위 Application 만들기 (2) (2) | 2024.05.23 |
영화 순위 Application 만들기(1) (0) | 2024.05.16 |
iOS Swift 영화 순위 어플리케이션 (2) | 2024.04.18 |
iOS Swift 간단한 목록 Application 만들기 (1) | 2024.04.08 |