본문 바로가기
728x90

전체 글228

프로그래머스: 월간 코드 챌린지 시즌1 - 이진 변환 반복하기 https://school.programmers.co.kr/learn/courses/30/lessons/70129 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 func solution(_ s:String) -> [Int] { var removeCount = 0 var radixCount = 0 var currentS = s while currentS != "1" { var zeroCount = 0 for x in currentS { if x == "0" { zeroCount += 1 removeCount += 1 } } let radix = Str.. 2023. 10. 6.
프로그래머스: 기사단원의 무기 https://school.programmers.co.kr/learn/courses/30/lessons/136798 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 처음 풀었던 방식 -> func solution(_ number:Int, _ limit:Int, _ power:Int) -> Int { var divisors = 0 for i in 1 ... number { var count = 0 for j in 1 ... i { if i % j == 0 { count += 1 } } if count > limit { count = power } div.. 2023. 10. 4.
1부- 5장. 유사한 코드 융합하기(단계 3/4) 1. 긴 함수 조각내기 2. 타입 코드 처리 3. 유사 코드 통합 4. 데이터 보호 5.4 클래스 간의 코드 통합 어떤 동작에 따라 클래스를 분리한다. 이것을 전략 패턴이라 하는데 예를 들어, 지도에서 출도착지를 설정하고 수단은 어떤것을 선택할건지에 따라 클래스를 나눈다. 대중교통 클래스, 자동차 클래스, 도보 클래스 처럼 동작별로 나누게 된다. 이러한 패턴을 이용하여 발생하는 클래스 간의 관계를 다이어그램으로 표현할 수 있는데 흔히 UML을 사용한다. 전략 패턴이 도입 되면서 상태 패턴이라는 개념도 알아야 하는데, 상태 패턴이란 객체의 상태에 따라 클래스를 분리하는 것을 의미 한다. 예를 들어, 컴퓨터 전원 인터페이스가 있다면 이 인터페이스를 구현 하는 on 클래스, off 클래.. 2023. 10. 4.
1부- 4장. 타입 코드 처리하기(단계 2/4) 1. 긴 함수 조각내기 2. 타입 코드 처리 3. 유사 코드 통합 4. 데이터 보호 4.1. 간단한 if문 리팩터링 if-else문의 사용을 지양하고 다형성 있는 코드를 작성 해야한다. (if-else를 사용하면 코드에서 결정이 내려지는 지점을 고정하게 된다. 그럴 경우 if-else가 있는 위치 이후에서는 다른 변형을 도입할 수 없기 때문에 코드의 유연성이 떨어진다.) 신호등의 동작을 코드로 만든다고 생각해보자. func run(input: String) -> Bool { if input == Light.Red { return false } else if input == Light.Yello { return false } else in input == Light.Green { r.. 2023. 9. 22.
ETag EntityTag의 줄임말로 말 그대로 entity에 대한 식별자로 캐시 유효성 검증에 사용됩니다. 데이터 요청의 트래픽을 줄이는 것에 도움을 줍니다. 종류 약한(weak) 검사: 'W/'로 시작되는 문자열로 리소스 내용이 유사한 경우 동일한 것으로 간주합니다. 강한(strong) 검사: 바이트 대 바이트로 엄격한 검사를 진행합니다. 생성 콘텐츠의 해시, 마지막으로 수정된 타임스탬프의 해시 혹은 개정번호를 이용하여 ETag를 만들어 냅니다. 검증 서버로 Get으로 검증 요청을 하며 요청 시 header에 'If-None-Match: etag값' 을 담아서 요청을 합니다. 서버에서는 클라이언트 내에 캐싱하고 있는 버전과 서버의 버전이 동일하면 '304 Not Modified'로 응답하며, 동일하지 않을 경.. 2023. 9. 19.
HTTP 허용 API 호출을 하거나 어떤 사이트에 접근하거나 다운로드 등을 할 때 주소가 http로 시작하는 경우가 있습니다. https가 아닌 경우에는 에러가 발생하면서 접근이 불가능 합니다. 그럴 때는 간편하게 info.plist에서 몇가지 작업을 해주면 금방 해결이 가능합니다. 첫번째 방법. info.plist에 아래처럼 설정해주면 모든 http 접근이 가능해집니다. 두번째 방법. 첫번째 방법은 보안상 좋지 않은 방법이라고 하네여 그래서 특정 도메인만 허용하도록 설정 하는 방법도 있습니다. 2023. 9. 16.
MD5 MD5란? Message-Digest algorithm 5의 약자로 암호화 해시 알고리즘 중 하나로 임의의 길이의 문자 값을 받아서 해시값을 출력해준다. 단방향 암호화이기 때문에 출력값에서 입력값으로 복원하기는 일반적으로 불가능하다. 복잡한 수학적 해시 알고리즘을 통해 32자의 문자열로 반환되며 같은 값은 항상 같은 출력값이 나온다. 또한 고속 연산이 가능하고 읨의로 변경된 패턴에 대해 충돌 가능성이 낮기 때문에 주로 파일의 무결성을 확인하는데 주로 사용된다. 권장되지는 않지만 MD5를 이용해 보안용도로 사용할 때에는 반드시 salt를 붙여서 사용해야한다. *salt: 입력된 값에 임의의 값을 붙인다든지, 암호화 한 값에 또다른 값을 붙여서 암호화 한다든지... 이름이 왜 Salt냐면 음식에 소금을 뿌리.. 2023. 9. 14.
클린아키텍처 서로 의존도를 낮춰 유지보수를 용이하게 한다. 기본적으로 저수준에서 고수준으로 변경에 영향을 받지 않도록 한다. 고수준 Entity 객체 클래스(데이터의 기본이 되는 모델) ex. struct Movie: codable { let name: String let director: String let year: Int } *entity: 원본 데이터 *model: entity를 통해실제 사용될 데이터로 가공된 것 =>entity와 model 사이에 차이가 없다면 entity를 model로 취급해도 무방 ↑ Use Case 객체의 값(데이터)을 가져오고 가공한다. Interface Adapters(=Presentation Layer): controllers, gateways, presenters control.. 2023. 9. 14.
페이지네이션(Pagination) 개발 시 발생할 수 있는 문제 생각보다 페이지네이션 작업은 까다롭다고 느껴진다. 페이지네이션 개발 방법은 예제가 많으므로 구현 자체는 어렵지 않지만, 깔끔하게 동작 하지 않는 경우가 너무 많은 것 같다. 아래 주의 사항은 내가 개발 하면서 마주 했던 문제점들을 해결하는 방법이다. 1) 최초 화면이 로드 될 때, 스크롤이 맨 밑에 있다고 인식 하는 경우 scrollViewDidScroll(_:) 에서 스크롤이 맨 밑에 도달 할 경우 새로운 페이지를 로드 시킨다면 처음 부터 새로운 페이지를 로드 하려 하기 때문에 오류가 발생한다. 이럴 때엔, 사용자가 스크롤 했다는 것을 알려주는 flag를 활용 할 수 있다. scrollViewWillBeginDragging(_:) { flag변수 = true } scrollViewDidScroll(_:.. 2023. 8. 31.