
[Spring] 계층형 구조의 단점을 보완한 Facade Pattern 적용하기
2023. 7. 21. 22:30
Server/Spring
Controller - Service - Repository 계층형 구조로 프로젝트를 진행하던 도중, Service 들끼리 참조하여 이중참조 에러를 경험했다. 처음 이 에러를 마주했을 때, Bean LifeCycle 이 객체 생성 -> 의존관계 주입 순으로 진행되기 때문에 순환 참조가 왜 문제가 되는지 의아했다. 찾아본 결과 의존 관계 주입 방식이 필드 혹은 Setter면 생성 후 의존 관계 주입이 진행돼서 오류가 나지 않지만, 생성자로 의존관계를 주입받을 경우 생성자들이 서로를 순환 호출하여 문제가 발생하는 것이다!! 즉, 수직적인 구조로 이뤄진 Service들이 아닌 수평적인 구조의 service들이 모여 생성자로 서로의 의존관계를 주입받을 시 에러를 발생시킬 수 있다는 것!! 순환 참조 문제를 해결..
[Swift]: Designated init, Convenience init, Required init
2022. 11. 10. 18:29
iOS
Swift 에서 initializer 들의 종류를 알아보자!! Designated init, Convenience init, Required init 이렇게 세가지에 대해 간단하게 알아보자. Designated init은 객체 모든 프로퍼티의의 값을 함수 구문 안에서 정해주는 initializer 이다. Convenience init은 함수 내부에서 객체의 모든 프로퍼티를 코드로 정해주기 귀찮아서 Designated init을 사용하고 싶을 때 쓰는 것이다! Required init은 자신을 상속받을 클래스들에게 반드시 선언해줬으면 하는 initializer 가 있을 때 사용하는 것이다! Designated init 객체 안의 모든 프로퍼티의 값들을 초기화해줘야 하는 initializer다! 옵셔널 타입..

[Swift] : KVO ( Key-Value Observing )
2022. 10. 22. 17:08
iOS
오늘은 KVO( Key-Value Observing )에 대해 알아보자! 먼저 KVC ( Key-Value Coding )에 대해 궁금하다면 아래 글을 읽어보자! [Swift] : KVC ( Key - Value Coding ) KVC ( Key - Value Coding ) 란 무엇일까? 객체의 프로퍼티에 접근할 때 사용하는 간접적인 코딩 방식이다. 객체의 프로퍼티에 접근하는 방식은 직접적인 방식과, 간접적인 방식으로 볼 수 있다. 직 seorin-yy.tistory.com Observer를 직역하면 관찰자라는 뜻이다. Swift 에서 Observer 는 Observe( 관찰 ) 하고자 하는 프로퍼티가 변경됐는지 관찰하는 것이다! 예시를 들어보자 observe 하려는 프로퍼티가 아래의 Human의 Na..
[Swift] : KVC ( Key - Value Coding )
2022. 10. 11. 14:51
iOS
KVC ( Key - Value Coding ) 란 무엇일까? 객체의 프로퍼티에 접근할 때 사용하는 간접적인 코딩 방식이다. 객체의 프로퍼티에 접근하는 방식은 직접적인 방식과, 간접적인 방식으로 볼 수 있다. 직접적인 방식은 아래 코드처럼 우리가 흔히 사용하는 코딩 방식이다. struct Human{ var name : String var profile : Profile } struct Profile{ var job : String } var profile = Profile(job: "") var seorin = Human(name: "", profile: profile) //seorin 객체의 프로퍼티에 직접 접근을 함!! seorin.name = "seorin" seorin.profile.job = ..

[Swift] : subscript로 String에 접근 할 수 없는 이유
2022. 10. 6. 18:16
iOS
subscript로 String에 접근 할 수 없는 이유를 알아보기 위해 subscript에 대해 알아보자! var intArr = [1, 2, 3] intArr[0] // 1 위의 예시처럼 intArr[int] 같이 배열에서 Key 값을 사용하여 Value에 접근해 줄 수 있게 해주는 것이 바로 subscript이다! 이제 swift 에서 String은 subscript[int]로 접근할 수 없는 이유에 대해 알아보자 var intArr = [1, 2, 3] var string = "abc" intArr[0] // 1 string[0] // error!!!! 위처럼 코드를 작성했다면 오류가 발생했을 것이다. 왜일까? 공식문서에서 String 을 봐보자! 문서에 따르면 String은 유니코드로 이루어진 ..

[UIKit] : Autolayout, SnapKit 사용해보기
2022. 9. 20. 12:52
iOS/UIKit
Swift 는 View들의 위치를 Layout으로 정해준다. 이때 Layout을 상수로 지정해주면 기기를 바꾸는 경우 원하는 상황이 연출되지 않을 것이다! iOS 기기마다 화면 View의 크기가 다르기 때문이다 -> 이를 해결하기 위해 AutoLayout 을 사용해보자! 1. 기존의 frame을 사용한 코드를 먼저 보자 import UIKit import Foundation class ViewController: UIViewController{ private let testView : UIView = { let testView = UIView() testView.backgroundColor = .blue return testView }() override func viewDidLoad() { super...