분류 전체보기
-
[Swift] ReloadData 호출시 키보드 사라지는 오류개발/Swift 2022. 8. 15. 15:17
ReloadData 호출시 키보드 사라지는 오류 Collection view 에서 데이터를 갱신할떄 reloadData()를 사용한다. textfiled 가 search 되는 시점에 reloadData() 를 호출했었는데 textfield가 editing 되는 시점에 reloadData()를 호출해야하는 요구 사항이 발생했다. 그래서 textEditing 되는 시점에 리스트를 필터링하여 reloadData를 호출했더니 키보드가 사라지는 현상이 발생했다 흔히 textField.resignFirstResponder() 함수가 실행되면 키보드가 사라지는데 해당 함수를 실행시키고 있지는 않았다. 그러므로 reloadData()가 호출되면 firstResponder가 자동으로 바뀌는것같았다. 구글링 이후에 가장 ..
-
몽골 고비+중앙 9박10일 투어 회고록후기 2022. 8. 8. 16:21
몽골에서의 9박10일 투어를 마치고 지금은 울란바토르에서 시내 구경을 하며 몽골에서의 마지막 날을 즐기고 있다. 총 14일 동안 여행을 했는데 사진이야 많이 찍었지만 내가 여행을 하면서 느꼈던 느낌과 감정을 남겨 놓는게 좋을거라 생각하여 글을 쓰기로 결정했다. 정보성 글이기 보다는 생생한 후기가 되지 않을까 싶다. 사막 투어 일정중 초반에는 사막지역에서의 일정이었다. 투어 포인트로는 차강소브라가, 욜링암, 홍고르엘스, 비양작이 있었다. 직접 사막에 갔을때 내가 느꼈던것은 생각보다 많이 힘들었다는것이다. 우선 굉장히 덥고 해가 강하며 건조하다. 에어컨이 없는 푸르공과 게르에서 계속 더위와 싸워야 하고 건조함때문에 립밤을 발라도 코속과 입술이 잘못하면 찢어질거같았다. 생각보다 벌레는 사막에서 많이 보지못했다..
-
[오브젝트 - 5 ] 상속과 상속의 문제점, 합성개발/프로그래밍 2022. 7. 18. 21:41
이미 존재하는 클래스와 유사한 클래스가 필요 하다면 코드를 복사하지 말고 상속을 이용해 재사용하면 된다. 상속과 결합도 코드를 쉽게 재사용할수 있는 상속은 좋은 방법일까? 자식 클래스 작성자는 부모클래스 구현 방법에 대한 정확한 지식을 가져야한다. 따라서 상속은 자식과 부모 클래스의 결합도를 높인다. 부모의 변경에 자식은 취약하다. 또한 불필요한 인터페이스를 상속 받게되는 문제가 생기게 되며 오버라이드 함수가 오작동할수있다. override func add(t: T) { addCount += 1 return super.add(t) } override func addAll(t: [T]) { addCount += t.count return super.addAll(t) } super.add() 내부에서 다른 ..
-
[TIL] 라이브러리 배포시 주의사항 (접근제한자, 리소스관리)개발/Swift 2022. 7. 8. 08:38
라이브러리 배포시 접근제한자 라이브러리 에서 작성한 함수를 외부에서 접근해야할때 public 제한자를 꼭 붙여야한다. default로는 internal이 되어서 외부 접근이 불가하다. 따라서 만약 외부에서 생성해야할 init 함수역시 모두 public 으로 작성 되어야한다. 라이브러리 리소스(이미지) 관리 이미지 같은경우 xcassets 파일을 Assets 폴더 안에 두면 된다. 이후 podspec 에서 경로를 이렇게 수정해주었다. s.resource_bundles = { 'LuxModuleKit' => ['LuxModuleKit/Assets/Resources/*.{xcassets}'] }
-
[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
데이터 지향 설계와 객체 지향 설계의 차이를 비교하기 위해서 캡슐화 응집도 결합도를 기준삼을수 있다. 캡슐화 변경가능성이 높은 부분을 “구현” 상대적 안정적인 부분을 “인터페이스"라한다. 구현과 인터페이스를 구분하고 객체 외부에서는인터페이스에 의존하도록 관계를 조절해야한다. 정리하여 캡슐화란 변경 가능성이 높은 구현부분을 객체 내부로 숨기는 것이다. 응집도 모듈 내 요소들이 “하나"의 목적을 위해 협력한다면 그 모듈은 높은 응집도를 가진다. 따라서 한 객체가 가진 책임들이 서로 얼마나 관련이 높은지를 의미한다. 응집도가 높다면 변경이 발생할때 모듈 내부에서 많은 변경에 일어날것이고 외부에 영향을 주지 않느다. 결합도 한 모듈이 다른모듈에대해 얼마나 많은 지식을 가졌는지 척도이다. 다른모듈의 세세한 부분까..