-
Cpp - static, const 키워드
💡 static 멤버 변수, static 멤버 함수, const 멤버 변수, const 멤버 함수 Static static 멤버 변수 static 멤버 변수와 기존 멤버 변수는 무슨 차이가 있을까? 일반적인 멤버 변수의 경우, 해당 클래스를 통해 생성된 객체마다 해당 변수의 메모리가 각자 할당되어 서로 영향을 주지 않는다. static 멤버 변수의 경우, 해당 클래스를 통해 생성된 모든 객체의 해당 변수가 동일한 메모리를 공유함. 따라서 어떤 객체에서 static 멤버 변수의 값을 변경하면 다른 객체에서도 같이 변경된다. 즉, 클래스 내의 전역변수인 셈. staic 멤버 함수 멤버 함수는 static으로 선언하면, 특정 객체에 속한 멤버 함수가 아닌 클래스 자체에 속한 멤버 함수이므로, 객체를 생성하지 ..
-
Cpp - 예외처리 (Exception Handling), try, throw, catch
💡 예외처리 (Exception Handling), try, throw, catch C 언어로 코딩을 할 때는 if문으로 예외를 처리했다. C++에서는 예외처리를 위해서 try, throw, catch키워드를 이용한다. 예외처리를 위한 코드와, 프로그램의 논리를 위한 코드를 구분하기 위해서임. try : try 내부에서 예외가 있는지 탐색하는 부분 throw : try에서 예외를 탐색하면, throw의 인자로 준 변수를 catch로 넘김 catch : throw에서 던진 변수를 인자로 받아서 catch 내부의 예외처리를 실시 예시 코드 #include int main() { try { int level; std::cin >> level; if (level >= 3) { std::cout
-
Cpp - 추상 클래스
💡 추상 클래스 추상 클래스(abstract class) : 기능이 구체적으로 작성되지 않은 클래스. 즉 하나 이상의 순수 가상 함수(pure virtual function)을 지닌 클래스를 지칭한다. 생성하고자 하는 객체들이 반드시 어떤 기능을 가져야한다면, 그 기능을 추상 클래스의 순수 가상 함수로 작성해놓고, 해당 클래스를 이용해 만든 자식클래스(생성하고자 하는 객체)에서는 이 가상 함수를 재정의하여 사용해 기능을 구현한다. 추상 클래스는 객체를 생성하기 위한 목적의 클래스가 아니라 상속을 통한 다양한 클래스의 생성을 위한 인터페이스인 셈. 추상 클래스는 기능이 정의되지 않은 순수 가상 함수를 포함하고 있기 때문에 불완전한 클래스로 볼 수 있다. 따라서 추상 클래스에 대한 객체는 생성불가능. #in..
-
Stanford SwiftUI 튜토리얼 #2 - 기본 MVVM 설계
강의 링크 : https://www.youtube.com/watch?v=--qKOhdgJAs 교수님을 따라 카드 뒤집기 게임을 만드는 것이 이 강의의 목표 카드 뒤집기 게임에서 +, - 기능은 필요없으니 해당 코드들을 지워주자 이번 강의의 주 목표는 MVVM의 설계이다. 하나씩 따라해보자 먼저 모델부터. 카드를 뒤집어 내용이 같은 카드 한쌍을 찾는 것이 이 게임의 본질이다. 모델 설계 시작 import Foundation //구조체이름 CardContent) { cards = Array() //add numberOfPairsOfCards X 2 cards to cards array for pairIndex in 0.. String { return "카드내용이지롱" } class EmojiMemor..
-
SwiftUI - List에 search기능 추가하기, List filtering
링크 : https://www.youtube.com/watch?v=zNL9gVfQ-WA 링크 : https://sarunw.com/posts/always-show-search-bar-in-swiftui/ 그룹 찾기 모달 뷰 리스트에서 검색 기능을 추가하고 싶었다. 따로 함수를 파야하나 싶었지만, 역시나 SwiftUI. 내장 기능이 있었다. 일단 완성 코드 import SwiftUI struct ModalView: View { @State var testGroups: [String] = [ "ApusOfus", "42FC", "42CodeC", "SUJI" ] @StateObject var vm = GroupModalViewModel() //텍스트필드에 검색할 검색어 @State var search..
-
Cpp - 바인딩, 동적 바인딩, 가상 소멸자
💡 바인딩, 동적 바인딩, 가상 소멸자 바인딩과 동적 바인딩 (dynamic binding) 바인딩(binding) : 함수를 호출할 때 어떤 스코프의 함수인지 메모리를 할당하는 것 virtual을 사용하면 포인터 타입(Person)에 따른 함수가 아니라, 저장한 객채(sujilee)의 함수를 호출할 수 있는 것을 전 게시글에서 확인하였다. 왜 그렇게 동작할까? C++의 컴파일러는 함수 호출 시 해당 스코프 안에 있는 함수를 호출해야 하고, 해당 함수가 할당된 메모리 주소도 알아야한다. 그래야 해당 함수가 호출되었을 때 해당 함수의 시작 주소로 점프할 수 있기 때문이다. 정적 바인딩 동적 바인딩 컴파일 시에 필요한 함수를 바인딩. 가상 함수가 아닌 멤버는 모두 정적 바인딩을 하게 된다. 가상 함수는 런 ..
-
Cpp - 오버로딩, 오버라이딩, 가상 함수
💡 오버로딩, 오버라이딩, 가상 함수, 가상 소멸자 오버로딩(overloading)과 오버라이딩(overriding), 가상 함수, 가상 소멸자 오버라이딩 : 주로 상속에서 쓰이며, 동일한 함수명에 대해 원래 기능을 무시하고 새롭게 재정의하는 것. 오버로딩 : 동일한 함수명을 가진 함수를 매개변수를 달리 해 여러개로 정의하는 것. 오버로딩과 오버라이딩은 헷갈리기 쉽다. 표로 정리해보자 오버로딩(overloading) 오버라이딩(overriding) 매개변수 변경 변경 X 함수 원형 유지동 동작 기능 기능 유지 기능 변경 또는 확장 오버로딩 시 함수의 기능을 변경해도 되지만, 주로 동일한 기능을 다양한 인자를 받아들여 쓰기 위해 사용하는 경우가 대부분. 멤버 함수 오버라이딩 상속을 통해 물려받은 멤버 함수..
-
cpp - 상속, 다중 상속
💡 상속, 다중 상속 상속 (inheritance) : 기존에 존재하는 클래스의 속성이나 기능, 즉 멤버 변수와 함수를 물려받아 그대로 사용 혹은 개선 또는 확장해 사용하는 것 Person이라는 부모 클래스를 상속받는 자식 클래스 Sujilee를 생성해보자 /* class 자식클래스명: 접근제어자 부모클래스명 { 자식클래스 멤버 }; */ class Sujilee(): Public Person() { //code }; 접근제어자에 따라 자식클래스에서의 부모클래스 멤버에 대한 접근 여부가 결정 public : 부모클래스에서 지정한 권한을 자식 클래스의 멤버들에게도 똑같이 지정됨 protected : 부모클래스에서 public으로 지정된 멤버는 자식클래스에서 protected로 지정되며 나머지는 부모클래스와..
-
Cpp - static, const 키워드
💡 static 멤버 변수, static 멤버 함수, const 멤버 변수, const 멤버 함수 Static static 멤버 변수 static 멤버 변수와 기존 멤버 변수는 무슨 차이가 있을까? 일반적인 멤버 변수의 경우, 해당 클래스를 통해 생성된 객체마다 해당 변수의 메모리가 각자 할당되어 서로 영향을 주지 않는다. static 멤버 변수의 경우, 해당 클래스를 통해 생성된 모든 객체의 해당 변수가 동일한 메모리를 공유함. 따라서 어떤 객체에서 static 멤버 변수의 값을 변경하면 다른 객체에서도 같이 변경된다. 즉, 클래스 내의 전역변수인 셈. staic 멤버 함수 멤버 함수는 static으로 선언하면, 특정 객체에 속한 멤버 함수가 아닌 클래스 자체에 속한 멤버 함수이므로, 객체를 생성하지 ..
2022.05.20 16:21 -
Cpp - 예외처리 (Exception Handling), try, throw, catch
💡 예외처리 (Exception Handling), try, throw, catch C 언어로 코딩을 할 때는 if문으로 예외를 처리했다. C++에서는 예외처리를 위해서 try, throw, catch키워드를 이용한다. 예외처리를 위한 코드와, 프로그램의 논리를 위한 코드를 구분하기 위해서임. try : try 내부에서 예외가 있는지 탐색하는 부분 throw : try에서 예외를 탐색하면, throw의 인자로 준 변수를 catch로 넘김 catch : throw에서 던진 변수를 인자로 받아서 catch 내부의 예외처리를 실시 예시 코드 #include int main() { try { int level; std::cin >> level; if (level >= 3) { std::cout
2022.05.14 10:52 -
Cpp - 추상 클래스
💡 추상 클래스 추상 클래스(abstract class) : 기능이 구체적으로 작성되지 않은 클래스. 즉 하나 이상의 순수 가상 함수(pure virtual function)을 지닌 클래스를 지칭한다. 생성하고자 하는 객체들이 반드시 어떤 기능을 가져야한다면, 그 기능을 추상 클래스의 순수 가상 함수로 작성해놓고, 해당 클래스를 이용해 만든 자식클래스(생성하고자 하는 객체)에서는 이 가상 함수를 재정의하여 사용해 기능을 구현한다. 추상 클래스는 객체를 생성하기 위한 목적의 클래스가 아니라 상속을 통한 다양한 클래스의 생성을 위한 인터페이스인 셈. 추상 클래스는 기능이 정의되지 않은 순수 가상 함수를 포함하고 있기 때문에 불완전한 클래스로 볼 수 있다. 따라서 추상 클래스에 대한 객체는 생성불가능. #in..
2022.05.07 12:22 -
Stanford SwiftUI 튜토리얼 #2 - 기본 MVVM 설계
강의 링크 : https://www.youtube.com/watch?v=--qKOhdgJAs 교수님을 따라 카드 뒤집기 게임을 만드는 것이 이 강의의 목표 카드 뒤집기 게임에서 +, - 기능은 필요없으니 해당 코드들을 지워주자 이번 강의의 주 목표는 MVVM의 설계이다. 하나씩 따라해보자 먼저 모델부터. 카드를 뒤집어 내용이 같은 카드 한쌍을 찾는 것이 이 게임의 본질이다. 모델 설계 시작 import Foundation //구조체이름 CardContent) { cards = Array() //add numberOfPairsOfCards X 2 cards to cards array for pairIndex in 0.. String { return "카드내용이지롱" } class EmojiMemor..
2022.05.06 16:28