본문 바로가기

스폰지밥으로 공부하는 swift

(13)
캡슐화 왜 해야함?? 캡슐화란? 객체의 속성과 메서드를 하나로 묶어 외부로부터의 직접적인 접근을 제한하고, 해당 객체의 메서드를 통해서만 변경이 가능하도록 하는 것 🤓 즉 캡슐화를 하면 코드의 복잡성을 관리하고 재사용성을 높일 수 있습니다. 캡슐화가 필요한 이유 4가지 정보은닉 - 클래스의 내부 구현을 외부로부터 숨기게 된다면 클래스의 사용자는 내부 구현에 대해 알 필요 없이 인터페이스(프로토콜)를 통해 클래스를 사용할 수 있습니다. 재사용성 - 독립적인 모듈을 만들어 다른 곳에서 재사용 할 수 있습니다. 유지보수 - 해당 클래스가 어떻게 구현되었는지 알 필요 없이 그 클래스를 사용하거나 수정할 수 있습니다. 안정성 - 어느 객체가 잘못된 방법으로 상태를 변경하면서 발생할 수 있는 오류를 방지할 수 있습니다. 이러한 이유로,..
unowned vs weak 뭐가 다른데? 미소유 참조(unowned)와 약한 참조(weak) 저번 포스팅에서 참조에 대해서 잠깐 다뤘던 내용이지만 미소유 참조(unowned)와 약한 참조(weak)는 둘 다 참조 카운트를 증가시키지 않아요. 이 두 가지는 순환 참조 문제를 해결하기 위해 사용되는데요, 사용 방식과 특징에 약간의 차이가 있습니다. 1. 미소유 참조(unowned): 미소유 참조는 참조하는 객체가 항상 메모리에 존재할 것이라는 전제 하에 사용됩니다. 따라서 미소유 참조를 통해 객체에 접근할 때 nil 검사를 하지 않아도 됩니다. 하지만 참조하는 객체가 메모리에서 해제된 후에 미소유 참조를 통해 접근하려고 하면 런타임 오류가 발생합니다. 2. 약한 참조(weak): 약한 참조는 참조하는 객체가 메모리에서 언제든지 해제될 수 있다는 전..
참조, 강한참조 약한참조, 순환참조...? 참조가 뭔가요? 참조는 다른 객체의 주소를 가리키는 것을 말합니다. 어떤 집에 찾아가고 싶은데 그러려면 먼저 그 집이 어디있는지 알아야 하잖아요? 주소를 받은 수 집에 찾아간다면 그 안에 들어간 후 집이 어떻게 생겼는지 볼 수 있고, 의자를 뺀다거나 하는 수정사항을 발생시킬수도 있겠죠! 이와 같이 프로그래밍에서 참조를 통해 다른 객체에 접근을 하고 수정을 할 수 있습니다. 참조 : 다른 객체의 주소를 가리키는 것 class SpongeBob { var name = "스펀지밥" } class Squidward { var name = "징징이" var friend: SpongeBob? // 스펀지밥을 참조하는 변수 } let spongeBob = SpongeBob() let squidward = Squidw..
의존성, 의존성 역전의 법칙과 의존성 주입 의존성이 뭔데요? 한 객체에서 특정 요소가 변경되면 참조를 하고 있는 객체의 다른 요소에도 영향을 주는 관계를 말해요. - 자동차로 예를 들어보자면 기름이 다 떨어지거나 엔진이 고장난다면 자동차가 동작하지 않겠죠? 이런 상황을 프로그래밍적인 용어로'자동차는 휘발유에 의존하고 있다'라고 표현할 수 있어요! 이처럼 어떤 요소가 다른 요소에 의존하는 것을 의존성이라고 합니다. 의존성 역전의 법칙은 또 뭐죠? 의존성 역전의 법칙(Dependency Inversion Principle, DIP)은 소프트웨어 설계 원칙 중 하나로, 상위 수준의 모듈은 하위 수준의 모듈에 의존해서는 안 되며, 둘 모두 추상화된 인터페이스에 의존해야 한다는 원칙입니다. 말이 좀 어렵죠.. ㅎㅎ 제가 좋아하는 스펀지밥을 데려와보겠습니다..
앱개발 심화 키워드 요약 1-1. 프로퍼티 옵저버 값이 변경될 때 특정 동작을 수행함 프로퍼티 옵저버를 활용하면 프로퍼티의 값이 변경되기 전 특정 코드를 실행(willSet)하거나 값이 변경된 후(didSet)에 다른 코드를 실행할 수 있습니다! 이를 활용해서 속성의 변경 사항을 감지하고 추가 동작을 수행할 수 있어요. class Order { var quantity: Int = 0 { didSet { updateStatistics() } } func updateStatistics() { // 주문 수량에 따른 통계 업데이트 로직 print("주문 수량이 변경되었습니다. 통계를 업데이트합니다.") } } let spongebob = Order() spongebob.quantity = 10 // 주문 수량이 변경됨 1-2. 타입캐..