
"객체지향의 사실과 오해"를 개발을 시작하기 전에 읽었었는데, 최근에 다시 읽으니 이전에는 이해하기 어렵던 내용이 지금은 한결 쉽게 다가왔다.책에서 말하는 객체지향의 개념이 머릿속에 그림처럼 그려지면서, 이론을 실제에 적용하는 과정도 좀 더 명확해진 느낌이다. 이 책은 객체지향 프로그래밍과 설계에 대해 단순히 코드나 구조를 다루는 것이 아니라, 문제를 보는 새로운 관점을 제시하는 데 초점을 맞추고 있다.객체지향을 이해하기 위해 필요한 철학과 개념을 다루며, 언어 문법이나 구조가 아닌 객체지향이 문제를 어떻게 해결하는지에 대한 본질적인 이해를 돕는다. 책은 소설 이상한 나라의 앨리스의 예시를 들며 객체지향의 원리를 설명한다.객체지향은 현실 세계를 단순화(추상화)하고, 객체의 세부 사항을 숨김(캡슐화)으..
최근 면접에서 리팩터링에 대한 질문을 받았을 때, 막상 설명하려니 깊이 생각하지 않았던 부분들이 떠올랐다.이에 다시 한 번 고민해보고 리팩터링의 의미와 필요성, 그리고 어떻게 접근해야 하는지 정리해보려고 한다. 리팩터링이란 무엇인가?리팩터링은 기존 코드의 동작을 유지하면서 구조를 개선하는 작업.즉, 코드의 기능은 그대로 유지되지만 코드의 가독성, 유지보수성, 그리고 확장성을 향상시키기 위한 과정이다.주로 코드의 중복을 줄이거나, 불필요한 복잡성을 제거하고, 더 효율적인 방식으로 코드를 재구성 한다고 생각하면 되겠다. 코드 개선이 필요한 이유개발 초기 단계에서는 빠른 기능 구현이 우선시되면서, 코드의 품질이 뒷전으로 밀리는 경우가 많을거라 생각한다. (나만 그런가..?)하지만 이러한 방식으로 누적된 기술 ..
이 글은 유튜브 베어코드님의 영상을 보고 학습하며 정리한 글입니다. (링크) 해당 영상을 보고 느낀 결론은 OOP를 잘하기 위해서는 단순히 클래스를 사용하거나 디자인 패턴을 외우는 것이 아니라, 추상화와 SOLID 원칙을 이해하고 이를 코드에 적용하는 것이 중요! OOP의 진정한 핵심은 무엇인가?단순히 클래스를 만들어 사용하면 OOP일까?단순히 클래스를 사용한다고 해서 그것이 OOP가 되는 것은 아닙니다. OOP는 코드의 재사용성, 유지보수성, 유연성을 확보하기 위한 철학과 개념을 기반으로 하는 프로그래밍 패러다임입니다.OOP에서 가장 중요한 개념은?OOP에서 이야기하는 다양한 개념 중 가장 중요한 것은 추상화(Abstraction)입니다. 추상화는 객체의 본질적인 속성만 남기고, 불필요한 세부 사항..
이 글은 유튜브 베어코드님의 영상을 보고 학습하며 정리한 글입니다. (링크) 프로그래밍을 할 때, 개발자는 끊임없이 결정을 내려야 합니다.코드를 작성하는 모든 순간마다 어떻게 설계하고 구현할지 고민해야 하는데, 이러한 과정에서 판단 기준이 없다면 코드가 혼란스럽고 일관성이 떨어질 수 있습니다. 판단 기준이 필요한 이유코드를 작성하면서 개발는 다양한 결정을 내립니다. 어떤 방법이 더 효율적인지, 결합도를 낮추고 응집도를 높이는 방법이 무엇인지, 더 나은 구조는 무엇인지 등 매 순간 판단을 해야 합니다. 하지만 이런 판단에 너무 많은 시간을 쓸 수는 없습니다.예를 들어, 결합도를 낮추고 응집도를 높였다고 해도 코드가 더 복잡해지고 이상해지는 경우가 있습니다. 이런 상황에서 무엇이 잘못되었는지 빠르게 판단..

이 글은 유튜브 베어코드님의 영상을 보고 학습하며 정리한 글입니다. (링크) 코드의 품질은 유지보수성과 확장성에 큰 영향을 미칩니다.이 품질을 결정하는 중요한 두 가지 요소가 바로 결합도(Coupling)와 응집도(Cohesion)입니다. 결합도(Coupling)결합도는 클래스나 모듈 간의 상호 의존성을 나타내는 지표입니다. 결합도가 높을수록 클래스나 모듈이 서로 강하게 연결되어 있어, 한 쪽의 변화가 다른 쪽에 영향을 미치게 됩니다. 이런 상황이 심해지면 코드가 복잡해지고 유지보수가 어려워지며, 우리는 이를 흔히 "스파게티 코드"라고 부릅니다.결합도는 코드의 구조를 단순하게 유지하고, 각 구성 요소가 독립적으로 동작할 수 있도록 하는 데 중요한 역할을 합니다. 결합도를 낮추기 위한 방법으로는 인터페이스..

이 글은 유튜브 베어코드님의 영상을 보고 학습하며 정리한 글입니다. (링크) 스파게티 코드?스파게티 코드는 복잡하고 엉킨 구조로 인해 읽기 어렵고 유지보수가 힘든 코드를 의미합니다. 이는 주로 프로젝트가 확장되거나 여러 명의 개발자가 협업하는 과정에서 발생하기 쉬운데, 이러한 코드가 쌓이면 생산성이 급격히 저하되고, 버그가 잦아지며 코드의 재사용이 거의 불가능해집니다. 스파게티 코드의 주요 특징스파게티 코드는 다음과 같은 특징을 가집니다:유지보수의 어려움: 코드의 구조가 복잡해지면 유지보수가 힘들어지고, 수정이 반복될수록 코드의 가독성이 떨어집니다.재사용의 불가능: 특정 기능을 분리하여 재사용하기 어려워집니다.버그의 온상: 코드가 복잡해질수록 버그 발생 가능성이 높아집니다.생산성 저하: 스파게티 코드가 ..
스택 메모리의 한계를 초과할 때 발생하는 오류입니다!특히 재귀 함수에서 흔히 발생합니다.재귀는 많은 알고리즘과 자료구조에서 필수적인 개념이지만, 스택 메모리에 의존하기 때문에 무제한 호출은 스택 오버플로우를 초래할 수 있습니다. 원인무한 재귀 호출: 재귀 함수가 종료 조건을 만족하지 못해 계속해서 자기 자신을 호출하는 경우func faultyFactorial(_ n: Int) -> Int { return n * faultyFactorial(n - 1) // 종료 조건이 없어 무한 재귀 발생}// 스택 오버플로우 발생faultyFactorial(5)과도한 메모리 할당: 스택에 너무 많은 데이터를 할당하면 스택 메모리가 부족할 수 있습니다.깊이가 너무 깊을 때: 함수가 계속 다른 함수를 호출하여 중첩된..

모든 경우의 수를 확인해야 할때 주로 백트래킹을 사용!for로는 확인 불가한 경우(깊이가 달라질 때)백트래킹은 파란색이 M, N 일 때, 즉 정해지지 않았을 때 사용합니다.즉 2번(깊이) 이 달라질 수 있을 때! 동작 방식트리로 이해하면 쉽다! 활용 예순열 구하기: 주어진 숫자들의 모든 순열을 찾는 문제조합: 특정 조건을 만족하는 조합을 찾는 문제경로 찾기: 출발점에서 도착점까지의 경로를 찾는 문제 DFS백트래킹은 DFS(깊이 우선 탐색)의 일종으로 볼 수 있습니다.https://247ios.tistory.com/14 DFSDFS(Depth-first search)는 그래프 탐색의 한 종류- DFS, BFS 어떤 것들이 연속해서 이어질 때, 모두 확인하는 방법 Graph: Vertex(어떤 것) + ..

DFS(Depth-first search)는 그래프 탐색의 한 종류- DFS, BFS 어떤 것들이 연속해서 이어질 때, 모두 확인하는 방법 Graph: Vertex(어떤 것) + Edge(이어지는 것) 그래프 탐색 종류- BFS: Breadth-first search (너비 우선 탐색) - DFS: Depth-first search (깊" data-og-host="247ios.tistory.com" data-og-source-url="https://247ios.tistory.com/12" data-og-url="https://247ios.tistory.com/12" data-og-image="https://scrap.kakaocdn.net/dn/4x9eg/hyWKBIyG8U/dtjgsiwZH9HwfwVs..

WWDC 2024에서 새로운 Testing 도구가 생겼습니다. Xcode 16 beta를 설치하고 프로젝트를 생성하면 Testing System에 추가된 것을 볼 수 있습니다. 프로젝트를 생성하면 아래와 같은 Tests 파일이 생성됩니다.XCTest대신 Testing을 import하고 있습니다. @TestSwift Testing은 @Test가 들어간 메서드에 대해 테스트를 수행할 수 있습니다.기존 테스트는 함수명에 test를 붙였어야했던 이전과는 다르게 @Test라는 래퍼만 붙여주면 XCode가 알아서 테스트할 수 있도록 제공해줍니다. #expect테스트할 값을 처리하는 방법중 #expect는 XCTAssertTrue와 같은 효과를 낼 수 있습니다. #expect throws오류가 던져지는지 여..
- Total
- Today
- Yesterday
- 리팩터링
- ReactNative
- UIGraphicsBeginPDFContextToData
- dfs
- 스위즐링
- OOP
- SWIFT WebView
- UIGraphicsBeginPDFPageWithInfo
- riverpod
- NSNotFound
- 이펙티브 엔지니어
- NSMutableAttributedString
- Flutter
- SWIFT 자바스크립트연동
- UIGraphics
- ios
- mutableString
- swiftpdf
- pdfkit
- Swift
- SWIFT JQuery
- llvm
- 로버트C마틴
- 객체지향의 사실과 오해
- SWIFT JavaScript
- 플로팅팝업
- 에드먼드 라우
- wkwebview
- 클린 아키텍처
- 알고리즘