분류 전체보기
-
[TIL] Cell highlighted UI변경, removeFromSuperview 안되는 경우개발/Swift 2022. 7. 8. 08:37
Collection view cell 버튼처럼 Highlited 상태시 UI 변경 override var isHighlighted: Bool collectionviewCell 에는 isHighlighted 값이있다. 만약 cell이 눌려서 highlighted 상태가 되면 값이 true 풀리면 false로 바뀐다 여기서 didSet을 활용해서 원하는 작업을 할수있다 override var isHighlighted: Bool { didSet { if isHighlighted { setHighlightedUI() } else { setNormalUI() } } } removeFromSuperview 오버라이딩 시 주의할것 func removeAllSubviews() { for view in subviews ..
-
[오브젝트 - 4 ] 개방 폐쇄 원칙과 의존성개발/프로그래밍 2022. 6. 11. 16:01
new연산자 new연산자는 인스턴스를 생성할때 사용한다. 그러나 인스턴스 생성시 추상클래스가 아닌 구체클래스를 직접 결합해 사용(의존)하며 생성시 필요한 인자값도 넣어줘야하므로 클라이언트 입장에서 지식양이 늘어난다. class Movie { private let discountPolicy:DiscountPolicy init(title:String, runningTime:Duration, fee:Movie) { self.discountPlicy = AmountDiscountPolicy(Money.wons(800), SequenceCondition(1),PeriodCondition(DayOfWeek.Monday),PeriodCondition(DayOfWeek.Thursday)) } } 위와같이 Movie클래..
-
[오브젝트 - 3] 인터페이스 추상화개발/프로그래밍 2022. 6. 1. 17:11
인터페이스 최소한의 인터페이스와 추상적인 인터페이스를 만족하라 꼭 필요한 오퍼레이션(다른객체에 제공하는 추상적인 서비스) 만 인터페이스에 넣어주고 어떻게가 아닌 무엇을 하는지(추상적) 표현한다. 디미터 법칙 “낯선자에게 말하지 말라", 객체 내부 구조에 강한 결합을 하지 않도록 협력 경로를 제한하는것이다. 협력대상은 아래와같이 제한한다 1. this 2. 메소드 내 매개변수 3. this 속성 4. 메소드 내 생성된 객체 메소드 명 메소드의 이름은 어떻게가 아닌 무엇을 하는지 드러내게 지어야한다. 무엇을 하는지는 내부 구현을 설명하는게 되어버린디. 원칙 무조건 원칙을 지키는것이 좋은건 아니다 설계는 트레이드 오프이다. 좋은 프로그래머는 적재적소에 원칙을 지킨다. 객체에게 묻지말고 시키라한다 (내부구조 캡..
-
[오브젝트 - 2 ] 캡슐화 응집도 결합도 데이터중심설계개발/프로그래밍 2022. 6. 1. 17:09
데이터 지향 설계와 객체 지향 설계의 차이를 비교하기 위해서 캡슐화 응집도 결합도를 기준삼을수 있다. 캡슐화 변경가능성이 높은 부분을 “구현” 상대적 안정적인 부분을 “인터페이스"라한다. 구현과 인터페이스를 구분하고 객체 외부에서는인터페이스에 의존하도록 관계를 조절해야한다. 정리하여 캡슐화란 변경 가능성이 높은 구현부분을 객체 내부로 숨기는 것이다. 응집도 모듈 내 요소들이 “하나"의 목적을 위해 협력한다면 그 모듈은 높은 응집도를 가진다. 따라서 한 객체가 가진 책임들이 서로 얼마나 관련이 높은지를 의미한다. 응집도가 높다면 변경이 발생할때 모듈 내부에서 많은 변경에 일어날것이고 외부에 영향을 주지 않느다. 결합도 한 모듈이 다른모듈에대해 얼마나 많은 지식을 가졌는지 척도이다. 다른모듈의 세세한 부분까..
-
[Github action IOS] CI/CD Testflight 자동화 배포 하기개발/Swift 2022. 5. 19. 12:44
[iOS] Swift Modern Collection View & MVVM 패턴 가이드 강의 - 인프런 MVVM 패턴과 Modern Collection View를 사용해 네트워킹을 구현하고, 다양하고 동적인 Collection View를 자유자재로 다룰 수 있게 됩니다., Swift iOS UI, 제대로 다루는 핵심 기술! 📲 iOS Swift 레이아웃 구현을 www.inflearn.com 테스트플라이트 배포까지 여러 정보들을 필요로한다. Certification & Provisioning profile 암호화 파일 Certification & Provisioning profile 암호 비밀번호 Certification 비밀번호 ExportOptions.plist Appstore issuer id App..
-
[Github Action IOS] Pod install 할때 private repo(pod) 권한 관련 에러개발/Swift 2022. 5. 16. 14:37
private repo pod 을 프로젝트에서 사용하고있다면 podfile을 보면 이렇게 pod 'Private-Pod' , :git => "" 쓰고 있을것이다. 혹은 ssh 경로 를 사용할것이다. 로컬 환경에서 pod install을 실행시 문제없이 설치가 된다. 만약 설치가 안된다면 로컬 환경에서 git 계정 정보가 keychain에 저장이 되지 않아서이다. priavate pod 에 접근하기 위해서는 접근 가능한 git 계정에대한 정보가 필요하다. username 과 password 일것이다. password 는 PAT 토큰으로 대체되었다. 따라서 username, PAT(PERSONAL_ACCESS_TOKEN) 토큰이 필요하고 로컬환경에서는 이 정보가 키체인에 저장되어있다. 그래서 pod inst..
-
[오브젝트 - 1 ] 객체 지향 프로그래밍개발/프로그래밍 2022. 5. 14. 16:42
제대로 실행 되어야하고 변경이 용이해야 하고 이해하기 쉬워야 한다. class Theather { private ticketSeller : TicketSeller init(ticketSeller : TicketSeller){ self.ticketSeller = ticketSeller } func enter(Audience audience){ if(audience.getBag().hasInvitation()){ let ticket = ticketSeller.getTicketOffice().getTicket() audience.getBag().setTicket(ticket) }else{ let ticket = ticketSeller.getTicketOffice().getTicket() audience.get..
-
[Swift] AssociatedType 추상클래스에서의 사용개발/Swift 2022. 5. 5. 18:47
protocol AbstractRepository{ func create(model :Model) -> Model } 추상화된 리포지토리를 protocol로 구현했다. 이렇게 추상화된 리포지토리를 사용하면 구체화될 리포지토리에서 함수를 상속받아 구현 할수있다. 그러나 만약 Model이 구체화될 리포지토리마다 다르다면 어떻까 class UserRepository{ func create(model :User) -> User {} } class ProductRepository{ func create(model :Product) -> Product {} } 이때 우리는 associatedType을 사용한다. protocol AbstractRepository{ associatedtype Model : Domain..