- 클래스 (class)

- 객체지향 용어 비교

swift, java, c#, javascript, python 클래스를 만들고 객체를 생성하는 방법을 설명해줘
1. Swift
class Car {
var brand: String
var model: String
init(brand: String, model: String) {
self.brand = brand
self.model = model
}
}
let myCar = Car(brand: "Toyota", model: "Corolla")
2. Java
class Car {
String brand;
String model;
Car(String brand, String model) {
this.brand = brand;
this.model = model;
}
}
Car myCar = new Car("Toyota", "Corolla");
3. C#
class Car {
public string Brand { get; set; }
public string Model { get; set; }
public Car(string brand, string model) {
Brand = brand;
Model = model;
}
}
Car myCar = new Car("Toyota", "Corolla");
4. JavaScript
class Car {
constructor(brand, model) {
this.brand = brand;
this.model = model;
}
}
const myCar = new Car("Toyota", "Corolla");
5. Python
class Car:
def __init__(self, brand, model):
self.brand = brand
self.model = model
my_car = Car("Toyota", "Corolla")
swift, java, c#, javascript, python 상속하는 방법을 예를들어 설명해줘
1. Swift
class Vehicle {
var numberOfWheels: Int
init(numberOfWheels: Int) {
self.numberOfWheels = numberOfWheels
}
}
class Car: Vehicle {
var brand: String
init(brand: String, numberOfWheels: Int) {
self.brand = brand
super.init(numberOfWheels: numberOfWheels)
}
}
let myCar = Car(brand: "Toyota", numberOfWheels: 4)
2. Java
class Vehicle {
int numberOfWheels;
Vehicle(int numberOfWheels) {
this.numberOfWheels = numberOfWheels;
}
}
class Car extends Vehicle {
String brand;
Car(String brand, int numberOfWheels) {
super(numberOfWheels);
this.brand = brand;
}
}
Car myCar = new Car("Toyota", 4);
3. C#
class Vehicle {
public int NumberOfWheels { get; set; }
public Vehicle(int numberOfWheels) {
NumberOfWheels = numberOfWheels;
}
}
class Car : Vehicle {
public string Brand { get; set; }
public Car(string brand, int numberOfWheels) : base(numberOfWheels) {
Brand = brand;
}
}
Car myCar = new Car("Toyota", 4);
4. JavaScript
class Vehicle {
constructor(numberOfWheels) {
this.numberOfWheels = numberOfWheels;
}
}
class Car extends Vehicle {
constructor(brand, numberOfWheels) {
super(numberOfWheels);
this.brand = brand;
}
}
const myCar = new Car("Toyota", 4);
5. Python
class Vehicle:
def __init__(self, number_of_wheels):
self.number_of_wheels = number_of_wheels
class Car(Vehicle):
def __init__(self, brand, number_of_wheels):
super().__init__(number_of_wheels)
self.brand = brand
my_car = Car("Toyota", 4)
1. swift 클래스 선언하기
- 클래스의 기본 구조
class 새로운 클래스 이름 : 부모 클래스 {
// 프로퍼티
// 인스턴스 메서드
// 타입(type) 메서드(클래스 메서드)
}
- "프로퍼티" : 클래스 내에 포함되는 변수(var)와 상수(let)을 정의
- 초기값이 있거나
- init을 이용해서 초기화 하거나
- 옵셔널 변수로 선언
- "인스턴스 메서드" : 객체가 호출하는 메서드를 정의
- "타입 메서드" : 클래스가 호출하는 메서드를 정의
▶ 프로퍼티
var x : Int //초기값 주지 않아도 오류 발생하지 않음
- 초기값이 있거나


- 옵셔널 변수로 선언 (nil)

- init을 이용해서 초기화 하거나
(1) Method 메서드 정의
(2) 인스턴스 만들고 메서드와 프로퍼티 접근
class Man {
var age : Int = 0
var weight : Double = 0.0
init(){} //원래는 없음. 눈에안보이지만 컴파일러가 만드는거
func display() {
print(age, weight)
}
}
var x : Int
var kang : Man = Man() // : Man은 생략 가능
// var kang = Man()
kang.age = 22
- class 활용
class Man {
var age : Int = 0
var weight : Double = 0.0
func display() {
print("나이 : \(age), 몸무게 : \(weight)")
}
}
var kang : Man = Man()
print(kang.age)
kang.age = 22
kang.weight = 55.5
print(kang.age, kang.weight)
kang.display()
/*
0
22 55.5
나이 : 22, 몸무게 : 55.5
*/
(3) 클래스(class or type) 메서드
class Man {
var age : Int = 0
var weight : Double = 0.0
func display() {
print("나이 : \(age), 몸무게 : \(weight)")
}
class func cM(){
print("cM은 클래스 메서드입니다.")
}
static func scM(){
print("scM은 클래스 메서드(static)")
}
}
var kang : Man = Man()
print(kang.age)
kang.age = 22
kang.weight = 55.5
print(kang.age, kang.weight)
kang.display() //인스턴스 메서드
Man.cM() //클래스 메서드
Man.scM() //클래스 메서드
- 클래스명.클래스매서드()
- class키워드로 만든 클래스 메서드는 자식 클래스에서 override 가능함
(4) 인스턴스 초기화하기 : init()
- 클래스, 구조체, 열거형 인스턴스가 생성되는 시점에서 해야할 초기화 작업
- 인스턴스가 만들어지면서 자동 호출 됨.
class Man {
var age : Int = 0
var weight : Double = 0.0
init(yourAge: Int, yourWeight : Double){
age = yourAge
weight = yourWeight
} //designated initializer
func display() {
print("나이 : \(age), 몸무게 : \(weight)")
}
}
var kang : Man = Man.init(yourAge: 5, yourWeight: 10.3) // .init 생략 가능
kang.display()
kang.age = 22
kang.weight = 55.5
kang.display() //인스턴스 메서드
/*
나이 : 5, 몸무게 : 10.3
나이 : 22, 몸무게 : 55.5
*/
- designated initializer (중요)
: 모든 프로퍼티(age, weight)를 다 초기화 시키는 생성자
▶ self
- 현재 클래스 내 메서드나 프로퍼티를 가리킬 때 메서드나 프로퍼티 앞에 self.를 붙임
class Man {
var age : Int = 0
var weight : Double = 0.0
init(yourAge: Int, yourWeight : Double){
self.age = age //self 키워드 이용
self.weight = weight //self 키워드 이용
} //designated initializer
func display() {
print("나이 : \(age), 몸무게 : \(weight)")
}
}
var kang : Man = Man(age: 5, weight: 10.3) // .init 생략 가능
kang.display()
kang.age = 22
kang.weight = 55.5
kang.display() //인스턴스 메서드
/*
나이 : 5, 몸무게 : 10.3
나이 : 22, 몸무게 : 55.5
*/
dis와 self 키워드를 사용하는 언어는 무엇이 있을까?
언어 | self 사용 여부 | dis 사용 여부 |
Swift | 예 | 아니오 |
Java | 아니오 | 아니오 |
C# | 아니오 | 아니오 |
JavaScript | 예 | 아니오 |
Python | 예 | 예 |
(5) method overloading (생성자 중첩)
- 매개변수의 개수와 자료형이 다른 같은 이름의 함수를 여러개 정의
class Man {
var age : Int = 0
var weight : Double = 0.0
init(age: Int, weight : Double){ //1
self.age = age
self.weight = weight
} //designated initializer
init(age: Int){ //2
self.age = age
}
//매개변수의 개수와 자료형은 달라야함
func display() {
print("나이 : \(age), 몸무게 : \(weight)")
}
}
var kang : Man = Man(age: 5, weight: 10.3) // .init 생략 가능
var moon : Man = Man(age: 22)
kang.display()
kang.age = 22
kang.weight = 55.5
kang.display() //인스턴스 메서드
/*
나이 : 5, 몸무게 : 10.3
나이 : 22, 몸무게 : 55.5
*/
- init은 아주 많이 존재한다.

swift애서 uIImage 클래스를 가장 많이 사용하는 순서대로 알려줘
- UIImage(named:)
- 이미지 리소스를 불러올 때 사용합니다.
- 예: let image = UIImage(named: "example.png")
- UIImage(contentsOfFile:)
- 파일 경로에서 이미지를 불러올 때 사용합니다.
- 예: let image = UIImage(contentsOfFile: "/path/to/image.png")
- UIImage.resize(to:)
- 이미지의 크기를 조정할 때 사용합니다. (이 메서드는 직접 구현해야 할 수 있습니다.)
- 예: let resizedImage = image.resize(to: CGSize(width: 100, height: 100))
- UIImage.draw(in:)
- 특정 영역에 이미지를 그릴 때 사용합니다.
- 예: image.draw(in: CGRect(x: 0, y: 0, width: 100, height: 100))
- UIImage.jpegData(compressionQuality:)
- JPEG 형식으로 이미지를 변환할 때 사용합니다.
- 예: let jpegData = image.jpegData(compressionQuality: 0.8)
- UIImage.pngData()
- PNG 형식으로 이미지를 변환할 때 사용합니다.
- 예: let pngData = image.pngData()
2. Swift 클래스(class) 상속
● superclass와 subclass
class SomeSubclass: SomeSuperclass

class 자식:부모 {
}
- 부모 클래스를 하나만 가능
- 콜론 다음이 여러개이면 나모지는 프로토콜

class Man {
var age : Int = 0
var weight : Double = 0.0
init(age: Int, weight : Double){ //1
self.age = age
self.weight = weight
} //designated initializer
func display() {
print("나이 : \(age), 몸무게 : \(weight)")
}
}
class Student : Man { //Man - 부모클래스, Student - 자식클래스
}
var kang : Man = Man(age: 5, weight: 10.3) // .init 생략 가능
kang.display()
var moon : Student = Student(age: 23, weight: 60.2)
moon.display()
kang.age = 22
kang.weight = 55.5
kang.display()
/*
나이 : 5, 몸무게 : 10.3
나이 : 23, 몸무게 : 60.2
나이 : 22, 몸무게 : 55.5
*/
▶ super : 부모 메서드 호출 시 사용
class Man {
var age : Int = 0
var weight : Double = 0.0
init(age: Int, weight : Double){ //1
self.age = age
self.weight = weight
} //designated initializer
func display() {
print("나이 : \(age), 몸무게 : \(weight)")
}
}
class Student : Man { //Man - 부모클래스, Student - 자식클래스
var name : String
func displayS() {
print("이름 : \(name), 나이 : \(age), 몸무게. : \(weight)")
} //이름까지 출력하는 displayS 함수
init(age: Int, weight : Double, name : String){
self.name = name
super.init(age:age, weight:weight) //과제: 이 줄을 안쓰면?
}//error:'super.init' isn't called on all paths before returning from initializer
}
var kang : Man = Man(age: 5, weight: 10.3) // .init 생략 가능
kang.display()
kang.age = 22
kang.weight = 55.5
kang.display()
var moon : Student = Student(age: 23, weight: 60.2, name: "soft")
moon.displayS() //displayS함수로 이름까지
/*
나이 : 5, 몸무게 : 10.3
나이 : 22, 몸무게 : 55.5
이름 : soft, 나이 : 23, 몸무게. : 60.2
*/
▶ override : 부모와 자식에 같은 메서드가 있으면 자식 우선

- override 작성
class Man {
var age : Int = 0
var weight : Double = 0.0
init(age: Int, weight : Double){ //1
self.age = age
self.weight = weight
} //designated initializer
func display() {
print("나이 : \(age), 몸무게 : \(weight)")
}
}
class Student : Man { //Man - 부모클래스, Student - 자식클래스
var name : String
override func display() {
print("이름 : \(name), 나이 : \(age), 몸무게. : \(weight)")
} //override 작성
init(age: Int, weight : Double, name : String){
self.name = name
super.init(age:age, weight:weight)
}//error:'super.init' isn't called on all paths before returning from initializer
}
var kang : Man = Man(age: 5, weight: 10.3) // .init 생략 가능
kang.display()
kang.age = 22
kang.weight = 55.5
kang.display()
var moon : Student = Student(age: 23, weight: 60.2, name: "soft")
moon.display() //display로 호출
/*
나이 : 5, 몸무게 : 10.3
나이 : 22, 몸무게 : 55.5
이름 : soft, 나이 : 23, 몸무게. : 60.2
*/
- failable initializers ( 실패 가능한 생성자 : init? )

var moon : Student = Student(age: -5, weight: -60.2, name: "soft")
// 사용자들이 잘못만드는 경우 아예 못만들게하기 위한
moon.display()
/*
이름 : soft, 나이 : -5, 몸무게. : -60.2
*/
- init?(named name: String) // failable initializers

class Man {
var age : Int = 0
var weight : Double = 0.0
init?(age: Int, weight : Double){
if age <= 0 || weight <= 0 {
return nil
} else {
self.age = age
self.weight = weight
}
}
func display() {
print("나이 : \(age), 몸무게 : \(weight)")
}
}
var kang : Man? = Man(age: 5, weight: 10.3) //옵셔널 Man형으로 해야함
kang!.display()
kang!.age = 22
kang!.weight = 55.5
/*
나이 : 5, 몸무게 : 10.3
*/
- failable initialize가 있는 클래스의 인스턴스 생성
class Man {
var age : Int = 0
var weight : Double = 0.0
init?(age: Int, weight : Double){
if age <= 0 || weight <= 0 {
return nil
} else {
self.age = age
self.weight = weight
}
}
func display() {
print("나이 : \(age), 몸무게 : \(weight)")
}
}
//1-1. 옵셔널 형으로 선언
if let kang = Man(age: 2, weight: 10.3) {
kang.display()
}
//2. 인스턴스 생성과 동시에 옵셔널 바인딩
if let kang = Man(age: 2, weight: 10.3) {
kang.display()
}
//3.인스턴스 생성하면서 바로 강제 언래핑
var kang : Man = Man(age: 2, weight: 10.3)!
kang.display()
//4.옵셔널 인스턴스를 사용시 강제 언래핑
var kang : Man? = Man(age: 2, weight: 10.3)
kang!.display()
/*
나이 : 2, 몸무게 : 10.3
*/
swift로 클래스를 만들려고해 상속,overriding, failable initializers 가 포함된 코드를 하나 작성해줘
import Foundation
// 부모 클래스
class Vehicle {
var numberOfWheels: Int
// 실패 가능한 이니셜라이저
init?(numberOfWheels: Int) {
guard numberOfWheels > 0 else { return nil }
self.numberOfWheels = numberOfWheels
}
func description() -> String {
return "This vehicle has \(numberOfWheels) wheels."
}
}
// 자식 클래스
class Car: Vehicle {
var brand: String
// 실패 가능한 이니셜라이저
init?(brand: String, numberOfWheels: Int) {
// 부모 클래스의 이니셜라이저 호출
self.brand = brand
super.init(numberOfWheels: numberOfWheels)
// 브랜드가 비어있으면 nil 반환
if brand.isEmpty {
return nil
}
}
// 메서드 오버라이딩
override func description() -> String {
return "This car is a \(brand) and has \(numberOfWheels) wheels."
}
}
// 사용 예제
if let myCar = Car(brand: "Toyota", numberOfWheels: 4) {
print(myCar.description()) // 출력: This car is a Toyota and has 4 wheels.
}
if let invalidCar = Car(brand: "", numberOfWheels: 4) {
print(invalidCar.description()) // 이 코드는 실행되지 않음
} else {
print("Failed to create a car with an empty brand.") // 출력: Failed to create a car with an empty brand.
}
자료 출처 : Smile han
시험 범위
1주차
iOS 01주-1(OT).pdf
pp.11만
2주차
iOS 02주 Swift 문법 1(웹스토어, 자료형,변수,상수, tuple).pdf
pp.1~8 제외
4주차
iOS 03주 Swift 문법 2(optional, as, nil, Any, AnyObject, 연산자, 제어문1).pdf
pp.15, 17, 18, 31-37 제외, 5주차에 있는 인강 들으면서 다시 정리
5주차
iOS 04주 Swift 문법 3( 함수1)A반.pdf
pp.16 제외, 인강으로 함수 정리
6주차 모두 인강 들으면서 정리
함수.pdf
iOS 05주 Swift 문법 4(일급시민 클로저 기초).pdf
7주차
iOS 06주차 Swift 문법 5(클래스 failable initializer 상속)pdf
pp. 20~23 제외
'Swift' 카테고리의 다른 글
10. 간단한 iOS앱 개발 (7) | 2024.11.06 |
---|---|
7. Xcode로 간단한 앱 만들기 (0) | 2024.10.30 |
5. Swift 함수 (0) | 2024.10.15 |
4. swift 문법 (0) | 2024.09.25 |
2. Mac 사용법, Swift 문법 (2) | 2024.09.11 |
- 클래스 (class)

- 객체지향 용어 비교

swift, java, c#, javascript, python 클래스를 만들고 객체를 생성하는 방법을 설명해줘
1. Swift
class Car {
var brand: String
var model: String
init(brand: String, model: String) {
self.brand = brand
self.model = model
}
}
let myCar = Car(brand: "Toyota", model: "Corolla")
2. Java
class Car {
String brand;
String model;
Car(String brand, String model) {
this.brand = brand;
this.model = model;
}
}
Car myCar = new Car("Toyota", "Corolla");
3. C#
class Car {
public string Brand { get; set; }
public string Model { get; set; }
public Car(string brand, string model) {
Brand = brand;
Model = model;
}
}
Car myCar = new Car("Toyota", "Corolla");
4. JavaScript
class Car {
constructor(brand, model) {
this.brand = brand;
this.model = model;
}
}
const myCar = new Car("Toyota", "Corolla");
5. Python
class Car:
def __init__(self, brand, model):
self.brand = brand
self.model = model
my_car = Car("Toyota", "Corolla")
swift, java, c#, javascript, python 상속하는 방법을 예를들어 설명해줘
1. Swift
class Vehicle {
var numberOfWheels: Int
init(numberOfWheels: Int) {
self.numberOfWheels = numberOfWheels
}
}
class Car: Vehicle {
var brand: String
init(brand: String, numberOfWheels: Int) {
self.brand = brand
super.init(numberOfWheels: numberOfWheels)
}
}
let myCar = Car(brand: "Toyota", numberOfWheels: 4)
2. Java
class Vehicle {
int numberOfWheels;
Vehicle(int numberOfWheels) {
this.numberOfWheels = numberOfWheels;
}
}
class Car extends Vehicle {
String brand;
Car(String brand, int numberOfWheels) {
super(numberOfWheels);
this.brand = brand;
}
}
Car myCar = new Car("Toyota", 4);
3. C#
class Vehicle {
public int NumberOfWheels { get; set; }
public Vehicle(int numberOfWheels) {
NumberOfWheels = numberOfWheels;
}
}
class Car : Vehicle {
public string Brand { get; set; }
public Car(string brand, int numberOfWheels) : base(numberOfWheels) {
Brand = brand;
}
}
Car myCar = new Car("Toyota", 4);
4. JavaScript
class Vehicle {
constructor(numberOfWheels) {
this.numberOfWheels = numberOfWheels;
}
}
class Car extends Vehicle {
constructor(brand, numberOfWheels) {
super(numberOfWheels);
this.brand = brand;
}
}
const myCar = new Car("Toyota", 4);
5. Python
class Vehicle:
def __init__(self, number_of_wheels):
self.number_of_wheels = number_of_wheels
class Car(Vehicle):
def __init__(self, brand, number_of_wheels):
super().__init__(number_of_wheels)
self.brand = brand
my_car = Car("Toyota", 4)
1. swift 클래스 선언하기
- 클래스의 기본 구조
class 새로운 클래스 이름 : 부모 클래스 {
// 프로퍼티
// 인스턴스 메서드
// 타입(type) 메서드(클래스 메서드)
}
- "프로퍼티" : 클래스 내에 포함되는 변수(var)와 상수(let)을 정의
- 초기값이 있거나
- init을 이용해서 초기화 하거나
- 옵셔널 변수로 선언
- "인스턴스 메서드" : 객체가 호출하는 메서드를 정의
- "타입 메서드" : 클래스가 호출하는 메서드를 정의
▶ 프로퍼티
var x : Int //초기값 주지 않아도 오류 발생하지 않음
- 초기값이 있거나


- 옵셔널 변수로 선언 (nil)

- init을 이용해서 초기화 하거나
(1) Method 메서드 정의
(2) 인스턴스 만들고 메서드와 프로퍼티 접근
class Man {
var age : Int = 0
var weight : Double = 0.0
init(){} //원래는 없음. 눈에안보이지만 컴파일러가 만드는거
func display() {
print(age, weight)
}
}
var x : Int
var kang : Man = Man() // : Man은 생략 가능
// var kang = Man()
kang.age = 22
- class 활용
class Man {
var age : Int = 0
var weight : Double = 0.0
func display() {
print("나이 : \(age), 몸무게 : \(weight)")
}
}
var kang : Man = Man()
print(kang.age)
kang.age = 22
kang.weight = 55.5
print(kang.age, kang.weight)
kang.display()
/*
0
22 55.5
나이 : 22, 몸무게 : 55.5
*/
(3) 클래스(class or type) 메서드
class Man {
var age : Int = 0
var weight : Double = 0.0
func display() {
print("나이 : \(age), 몸무게 : \(weight)")
}
class func cM(){
print("cM은 클래스 메서드입니다.")
}
static func scM(){
print("scM은 클래스 메서드(static)")
}
}
var kang : Man = Man()
print(kang.age)
kang.age = 22
kang.weight = 55.5
print(kang.age, kang.weight)
kang.display() //인스턴스 메서드
Man.cM() //클래스 메서드
Man.scM() //클래스 메서드
- 클래스명.클래스매서드()
- class키워드로 만든 클래스 메서드는 자식 클래스에서 override 가능함
(4) 인스턴스 초기화하기 : init()
- 클래스, 구조체, 열거형 인스턴스가 생성되는 시점에서 해야할 초기화 작업
- 인스턴스가 만들어지면서 자동 호출 됨.
class Man {
var age : Int = 0
var weight : Double = 0.0
init(yourAge: Int, yourWeight : Double){
age = yourAge
weight = yourWeight
} //designated initializer
func display() {
print("나이 : \(age), 몸무게 : \(weight)")
}
}
var kang : Man = Man.init(yourAge: 5, yourWeight: 10.3) // .init 생략 가능
kang.display()
kang.age = 22
kang.weight = 55.5
kang.display() //인스턴스 메서드
/*
나이 : 5, 몸무게 : 10.3
나이 : 22, 몸무게 : 55.5
*/
- designated initializer (중요)
: 모든 프로퍼티(age, weight)를 다 초기화 시키는 생성자
▶ self
- 현재 클래스 내 메서드나 프로퍼티를 가리킬 때 메서드나 프로퍼티 앞에 self.를 붙임
class Man {
var age : Int = 0
var weight : Double = 0.0
init(yourAge: Int, yourWeight : Double){
self.age = age //self 키워드 이용
self.weight = weight //self 키워드 이용
} //designated initializer
func display() {
print("나이 : \(age), 몸무게 : \(weight)")
}
}
var kang : Man = Man(age: 5, weight: 10.3) // .init 생략 가능
kang.display()
kang.age = 22
kang.weight = 55.5
kang.display() //인스턴스 메서드
/*
나이 : 5, 몸무게 : 10.3
나이 : 22, 몸무게 : 55.5
*/
dis와 self 키워드를 사용하는 언어는 무엇이 있을까?
언어 | self 사용 여부 | dis 사용 여부 |
Swift | 예 | 아니오 |
Java | 아니오 | 아니오 |
C# | 아니오 | 아니오 |
JavaScript | 예 | 아니오 |
Python | 예 | 예 |
(5) method overloading (생성자 중첩)
- 매개변수의 개수와 자료형이 다른 같은 이름의 함수를 여러개 정의
class Man {
var age : Int = 0
var weight : Double = 0.0
init(age: Int, weight : Double){ //1
self.age = age
self.weight = weight
} //designated initializer
init(age: Int){ //2
self.age = age
}
//매개변수의 개수와 자료형은 달라야함
func display() {
print("나이 : \(age), 몸무게 : \(weight)")
}
}
var kang : Man = Man(age: 5, weight: 10.3) // .init 생략 가능
var moon : Man = Man(age: 22)
kang.display()
kang.age = 22
kang.weight = 55.5
kang.display() //인스턴스 메서드
/*
나이 : 5, 몸무게 : 10.3
나이 : 22, 몸무게 : 55.5
*/
- init은 아주 많이 존재한다.

swift애서 uIImage 클래스를 가장 많이 사용하는 순서대로 알려줘
- UIImage(named:)
- 이미지 리소스를 불러올 때 사용합니다.
- 예: let image = UIImage(named: "example.png")
- UIImage(contentsOfFile:)
- 파일 경로에서 이미지를 불러올 때 사용합니다.
- 예: let image = UIImage(contentsOfFile: "/path/to/image.png")
- UIImage.resize(to:)
- 이미지의 크기를 조정할 때 사용합니다. (이 메서드는 직접 구현해야 할 수 있습니다.)
- 예: let resizedImage = image.resize(to: CGSize(width: 100, height: 100))
- UIImage.draw(in:)
- 특정 영역에 이미지를 그릴 때 사용합니다.
- 예: image.draw(in: CGRect(x: 0, y: 0, width: 100, height: 100))
- UIImage.jpegData(compressionQuality:)
- JPEG 형식으로 이미지를 변환할 때 사용합니다.
- 예: let jpegData = image.jpegData(compressionQuality: 0.8)
- UIImage.pngData()
- PNG 형식으로 이미지를 변환할 때 사용합니다.
- 예: let pngData = image.pngData()
2. Swift 클래스(class) 상속
● superclass와 subclass
class SomeSubclass: SomeSuperclass

class 자식:부모 {
}
- 부모 클래스를 하나만 가능
- 콜론 다음이 여러개이면 나모지는 프로토콜

class Man {
var age : Int = 0
var weight : Double = 0.0
init(age: Int, weight : Double){ //1
self.age = age
self.weight = weight
} //designated initializer
func display() {
print("나이 : \(age), 몸무게 : \(weight)")
}
}
class Student : Man { //Man - 부모클래스, Student - 자식클래스
}
var kang : Man = Man(age: 5, weight: 10.3) // .init 생략 가능
kang.display()
var moon : Student = Student(age: 23, weight: 60.2)
moon.display()
kang.age = 22
kang.weight = 55.5
kang.display()
/*
나이 : 5, 몸무게 : 10.3
나이 : 23, 몸무게 : 60.2
나이 : 22, 몸무게 : 55.5
*/
▶ super : 부모 메서드 호출 시 사용
class Man {
var age : Int = 0
var weight : Double = 0.0
init(age: Int, weight : Double){ //1
self.age = age
self.weight = weight
} //designated initializer
func display() {
print("나이 : \(age), 몸무게 : \(weight)")
}
}
class Student : Man { //Man - 부모클래스, Student - 자식클래스
var name : String
func displayS() {
print("이름 : \(name), 나이 : \(age), 몸무게. : \(weight)")
} //이름까지 출력하는 displayS 함수
init(age: Int, weight : Double, name : String){
self.name = name
super.init(age:age, weight:weight) //과제: 이 줄을 안쓰면?
}//error:'super.init' isn't called on all paths before returning from initializer
}
var kang : Man = Man(age: 5, weight: 10.3) // .init 생략 가능
kang.display()
kang.age = 22
kang.weight = 55.5
kang.display()
var moon : Student = Student(age: 23, weight: 60.2, name: "soft")
moon.displayS() //displayS함수로 이름까지
/*
나이 : 5, 몸무게 : 10.3
나이 : 22, 몸무게 : 55.5
이름 : soft, 나이 : 23, 몸무게. : 60.2
*/
▶ override : 부모와 자식에 같은 메서드가 있으면 자식 우선

- override 작성
class Man {
var age : Int = 0
var weight : Double = 0.0
init(age: Int, weight : Double){ //1
self.age = age
self.weight = weight
} //designated initializer
func display() {
print("나이 : \(age), 몸무게 : \(weight)")
}
}
class Student : Man { //Man - 부모클래스, Student - 자식클래스
var name : String
override func display() {
print("이름 : \(name), 나이 : \(age), 몸무게. : \(weight)")
} //override 작성
init(age: Int, weight : Double, name : String){
self.name = name
super.init(age:age, weight:weight)
}//error:'super.init' isn't called on all paths before returning from initializer
}
var kang : Man = Man(age: 5, weight: 10.3) // .init 생략 가능
kang.display()
kang.age = 22
kang.weight = 55.5
kang.display()
var moon : Student = Student(age: 23, weight: 60.2, name: "soft")
moon.display() //display로 호출
/*
나이 : 5, 몸무게 : 10.3
나이 : 22, 몸무게 : 55.5
이름 : soft, 나이 : 23, 몸무게. : 60.2
*/
- failable initializers ( 실패 가능한 생성자 : init? )

var moon : Student = Student(age: -5, weight: -60.2, name: "soft")
// 사용자들이 잘못만드는 경우 아예 못만들게하기 위한
moon.display()
/*
이름 : soft, 나이 : -5, 몸무게. : -60.2
*/
- init?(named name: String) // failable initializers

class Man {
var age : Int = 0
var weight : Double = 0.0
init?(age: Int, weight : Double){
if age <= 0 || weight <= 0 {
return nil
} else {
self.age = age
self.weight = weight
}
}
func display() {
print("나이 : \(age), 몸무게 : \(weight)")
}
}
var kang : Man? = Man(age: 5, weight: 10.3) //옵셔널 Man형으로 해야함
kang!.display()
kang!.age = 22
kang!.weight = 55.5
/*
나이 : 5, 몸무게 : 10.3
*/
- failable initialize가 있는 클래스의 인스턴스 생성
class Man {
var age : Int = 0
var weight : Double = 0.0
init?(age: Int, weight : Double){
if age <= 0 || weight <= 0 {
return nil
} else {
self.age = age
self.weight = weight
}
}
func display() {
print("나이 : \(age), 몸무게 : \(weight)")
}
}
//1-1. 옵셔널 형으로 선언
if let kang = Man(age: 2, weight: 10.3) {
kang.display()
}
//2. 인스턴스 생성과 동시에 옵셔널 바인딩
if let kang = Man(age: 2, weight: 10.3) {
kang.display()
}
//3.인스턴스 생성하면서 바로 강제 언래핑
var kang : Man = Man(age: 2, weight: 10.3)!
kang.display()
//4.옵셔널 인스턴스를 사용시 강제 언래핑
var kang : Man? = Man(age: 2, weight: 10.3)
kang!.display()
/*
나이 : 2, 몸무게 : 10.3
*/
swift로 클래스를 만들려고해 상속,overriding, failable initializers 가 포함된 코드를 하나 작성해줘
import Foundation
// 부모 클래스
class Vehicle {
var numberOfWheels: Int
// 실패 가능한 이니셜라이저
init?(numberOfWheels: Int) {
guard numberOfWheels > 0 else { return nil }
self.numberOfWheels = numberOfWheels
}
func description() -> String {
return "This vehicle has \(numberOfWheels) wheels."
}
}
// 자식 클래스
class Car: Vehicle {
var brand: String
// 실패 가능한 이니셜라이저
init?(brand: String, numberOfWheels: Int) {
// 부모 클래스의 이니셜라이저 호출
self.brand = brand
super.init(numberOfWheels: numberOfWheels)
// 브랜드가 비어있으면 nil 반환
if brand.isEmpty {
return nil
}
}
// 메서드 오버라이딩
override func description() -> String {
return "This car is a \(brand) and has \(numberOfWheels) wheels."
}
}
// 사용 예제
if let myCar = Car(brand: "Toyota", numberOfWheels: 4) {
print(myCar.description()) // 출력: This car is a Toyota and has 4 wheels.
}
if let invalidCar = Car(brand: "", numberOfWheels: 4) {
print(invalidCar.description()) // 이 코드는 실행되지 않음
} else {
print("Failed to create a car with an empty brand.") // 출력: Failed to create a car with an empty brand.
}
자료 출처 : Smile han
시험 범위
1주차
iOS 01주-1(OT).pdf
pp.11만
2주차
iOS 02주 Swift 문법 1(웹스토어, 자료형,변수,상수, tuple).pdf
pp.1~8 제외
4주차
iOS 03주 Swift 문법 2(optional, as, nil, Any, AnyObject, 연산자, 제어문1).pdf
pp.15, 17, 18, 31-37 제외, 5주차에 있는 인강 들으면서 다시 정리
5주차
iOS 04주 Swift 문법 3( 함수1)A반.pdf
pp.16 제외, 인강으로 함수 정리
6주차 모두 인강 들으면서 정리
함수.pdf
iOS 05주 Swift 문법 4(일급시민 클로저 기초).pdf
7주차
iOS 06주차 Swift 문법 5(클래스 failable initializer 상속)pdf
pp. 20~23 제외
'Swift' 카테고리의 다른 글
10. 간단한 iOS앱 개발 (7) | 2024.11.06 |
---|---|
7. Xcode로 간단한 앱 만들기 (0) | 2024.10.30 |
5. Swift 함수 (0) | 2024.10.15 |
4. swift 문법 (0) | 2024.09.25 |
2. Mac 사용법, Swift 문법 (2) | 2024.09.11 |