Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
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
Archives
Today
Total
관리 메뉴

주니곰의 괴발노트

SeSAC TIL - 22.07.13 본문

기타

SeSAC TIL - 22.07.13

Jhe2 2022. 7. 18. 02:43

1. 오늘 배운 내용

  • 문법 위주로 수업을 진행하였고 클래스에 대해 배웠습니다. 
  • 인스턴스를 생성하고 이를 통해 클래스를 초기화하여 사용하는 방법을 익혔습니다. 
  • 얼럿창을 활용해서 메세지를 화면에 띄우는 기능을 활용해봤습니다.
  • 얼럿창 또는 액션시트에는 기본 버튼 기능이 구현되어 있는데(삭제버튼은 빨간색, 취소는 두꺼운 글씨 등) 이를 활용하면 사용하기 편한 UI를 구성할 수 있을 것 같다고 생각했습니다. 

2. Checklist

2-1. Class

클래스는 광범위하고 유연하게 사용할 수 있는 코드의 구조입니다. 커스터마이징하여 만들 수 있으며 내부에 넣은 수 있는 데이터 타입도 다양합니다. 특히 상속이라는 개념을 통해서 이를 편하게 사용할 수 있습니다. 

 

Super Class - 상위클래스, 하위클래스는 언제나 상대적인 개념이며 하위클래스에 데이터를 상속해주는 것이 상위클래스의 개념입니다. 

 

Sub Class -  하위 클래스는 상위클래스를 상속받을 경우 생기는 개념이며, 상위클래스의 있는 함수를 사용할 때는 override해서 사용해야 합니다. 그리고 상위클래스에 없던 속성을 새로 만들 경우, 새로운 생성자를 생성하여야 합니다. 저장속성은 재정의가 불가하나 계산 속성은 일부 재정의가 가능합니다. 

 

Inheritance -  상속이라는 개념은 클래스만 가능하며 메서드, 속성, 그밖의 다른 클래스의 특징을 상속받을 수 있습니다. 


2-2. Struct

구조체는 클래스와 마찬가지로 여러 데이터 형태를 담을 수 있는 데이터 타입입니다. 인스턴스를 생성하여 구조체 내부의 속성 값을 채울 수 있으며 사용방법은 클래스와 비슷합니다. 다만 클래스와 다른 점은 상속이 불가능하여 다른 클래스를 상속하여 사용할 수는 없습니다. 구조체는 값 타입이며 메모리 자체가 전달되어, 생성된 인스턴스를 복사하고 값을 변경하였을 때, 두 인스턴스의 값은 달라지게 됩니다. 


2-3. Instance

클래스 혹은 구조체로 생성한 객체를 의미합니다. 이렇게 만든 객체를 통하여 클래스 및 구조체 내부의 속성과 메서드에 접근하여 해당 기능과 값을 사용할 수 있습니다. 


2-4. Property, Method, Member

Property - 속성은 클래스나 구조체 내부에 선언된 데이터를 의미합니다. let으로 선언할 경우 인스턴스를 생성하여 데이터를 전달할 때 값이 할당되지 않으므로 var로 선언합니다. 

 

Method - 메서드는 클래스, 구조체 내부에서 어떤 기능을 하는 역할을 담당합니다. 인스턴스를 생성하고 dot syntax를 통해 함수를 불러 설정한 메서드를 호출하여 사용할 수 있습니다. 메서드의 경우 mutating, override를 통해 메서드를 재정의하여 사용할 수 있습니다. 

 

Member - 멤버는 이런 속성, 메서드를 포함한 클래스와 구조체 내부에 있는 것을 의미합니다.


2-5. Initializer

인스턴스를 생성하기 위해 사용되는 것으로 클래스 및 구조체를 선언할 때 미리 구현을 해놓고 사용합니다. 생성자는 다양하게 구성할 수 있으며 인스턴스를 생성하는 과정에서 호출하여 사용합니다.


2-6. Default Initializer

Swift에서는 클래스와 구조체에 기본 생성자를 제공합니다. 내부에 있는 속성이 기본 값이 있을 경우, Name()의 형태로 인스턴스를 생성할 수 있습니다. 


2-7. Memberwise Initializer

멤버와이즈 이니셜라이저는 구조체에서만 제공되며 자동으로 생성자를 생성해준다고 보면 됩니다. 속성을 만들고 기본값을 주지 않을 경우 자동으로 생성자가 생성됩니다. 하지만 속성에 하나라도 값을 넣는다면 멤버와이즈 이니셜라이저는 제공되지 않습니다. 


2-6. View Controller - UIAlertController

화면에 얼럿 메세지 창을 띄우게 해주는 객체입니다. 화면 중앙에 뜨는 얼럿창을 사용할지 화면 아래에서 올라는 액션 시트를 사용할지 선택할 수 있습니다. 


3. 과제 및 실습

Auto Layout 연습하기

  • 스토리보드에서 간단하게 배치를 하고 코드로 세부사항을 구현하였습니다.
  • 이미지뷰 네개를 비율로 맞춰서 잡고 레이블도 leading edges, top edges 구속조건을 주고 비율로 일정 간격을 떨어뜨렸습니다.
  • 그리고 이미지뷰 위에 버튼을 크게 얹어 누를 수 있는 기능을 추가 하였습니다.
  • 확장 기능을 활용하여 UIColor를 확장하여 헥스코드를 활용해서 글자색을 커스텀하는 기능을 추가하였습니다.
class ViewController: UIViewController {

    // MARK: - Properties
    
    @IBOutlet weak var image1: UIImageView!
    @IBOutlet weak var image2: UIImageView!
    @IBOutlet weak var image3: UIImageView!
    @IBOutlet weak var image4: UIImageView!
    
    @IBOutlet weak var label1: UILabel!
    @IBOutlet weak var label2: UILabel!
    @IBOutlet weak var label3: UILabel!
    @IBOutlet weak var label4: UILabel!
    
    @IBOutlet weak var button1: UIButton!
    @IBOutlet weak var button2: UIButton!
    @IBOutlet weak var button3: UIButton!
    @IBOutlet weak var button4: UIButton!
    
    let specialDates = ["2021년\n03월 27일",
                        "2021년\n07월 05일",
                        "2021년\n10월 13일",
                        "2022년\n01월 21일"]

    
    // MARK: - Init
    
    override func viewDidLoad() {
        super.viewDidLoad()
        configureUI()
    }
    

    // MARK: - Helper Functions
    
    func configureUI() {
        configureButtons(button1, title: specialDates[0])
        configureButtons(button2, title: specialDates[1])
        configureButtons(button3, title: specialDates[2])
        configureButtons(button4, title: specialDates[3])
        
        configureImages(image1, name: "anni1")
        configureImages(image2, name: "anni2")
        configureImages(image3, name: "anni3")
        configureImages(image4, name: "anni4")

        configureLabels(label1, title: "D+100")
        configureLabels(label2, title: "D+200")
        configureLabels(label3, title: "D+300")
        configureLabels(label4, title: "D+400")
    }
    
    func configureButtons(_ button: UIButton, title: String) {
        button.setTitle(title, for: .normal)
        button.setTitleColor(UIColor(rgb: 0x2acaea), for: .normal)
        button.titleLabel?.font = UIFont.boldSystemFont(ofSize: 17)
        button.titleLabel?.numberOfLines = 0
        button.titleLabel?.lineBreakMode = .byCharWrapping
        button.titleLabel?.textAlignment = .center
        button.sizeToFit()
    }
    
    func configureImages(_ imageView: UIImageView, name: String) {
        imageView.image = UIImage(named: name)
        imageView.layer.cornerRadius = 20
        imageView.clipsToBounds = true
        imageView.contentMode = .scaleAspectFill
    }
    
    func configureLabels(_ label: UILabel, title: String) {
        label.text = title
        label.font = .systemFont(ofSize: 25, weight: .bold)
        label.textColor = UIColor(rgb: 0x2acaea)
    }

4. 자료 출처

구글 검색어: class in swift -> https://docs.swift.org/swift-book/LanguageGuide/ClassesAndStructures.html

구글 검색어: inheritance in swift -> https://docs.swift.org/swift-book/LanguageGuide/Inheritance.html

구글 검색어: default initializers in swift -> https://docs.swift.org/swift-book/LanguageGuide/Initialization.html

구글 검색어: uialertcontroller swift -> https://developer.apple.com/documentation/uikit/uialertcontroller

'기타' 카테고리의 다른 글

SeSAC TIL - 22.07.15  (0) 2022.07.18
SeSAC TIL - 22.07.14  (0) 2022.07.18
SeSAC TIL - 22.07.12  (0) 2022.07.18
SeSAC TIL - 22.07.11  (0) 2022.07.17
SeSAC TIL - 22.07.08  (0) 2022.07.17
Comments