gksrudtlr
|2025. 1. 10. 09:54
추상화(Abstraction)
정의
- 복잡한 시스템에서 중요한 부분만 선택하여 표현하고, 불필요한 세부사항을 숨기는 것
목적
- 사용자는 복잡한 내부 구현을 알 필요 없이, 시스템을 사용할 수 있음
- 인터페이스를 정의하여 코드의 유연성과 재사용성을 높임
구현
- 추상 클래스나 인터페이스를 통해 구현함
- 추상 클래스는 하나 이상의 순수 가상 함수(Pure Virtual Function)를 가지는 클래스
- 순수 가상함수는 = 0 을 사용해 정의
특징
- Parent 클래스는 추상적 개념만 정의하고, 세부 구현은 자식 클래스가 담당함
- 추상화는 무엇(What)을 해야하는지 정의됨
- 반드시 자식 클래스에서 재정의를 해줘야함
가상화(Virtualization)
정의
- 가상화는 다양성(Polymmorphism)을 구현하기 위한 메커니즘으로, 런타임에 객체의 실제 타입에 따라 적절한 함수를 호출 가능
목적
- 같은 함수 호출을 통해, 다양한 동작을 수행할 수 있음
- 코드의 유연성을 확장성 증가
구현
- C++에선 가상화가 가상 함수(Virtual Function)를 통해 구현됨
- virtual 키워드를 사용하여 선언
- 가상 함수는 런타임 다형성을 제공
특징
- 가상함수 테이블(Virtual Table, vtable)을 사용해 런타임에 적절한 함수 포인터를 호출
- 가상화는 어떻게(How) 동작해야 하는지 동적으로 결정
- 가상화는 부모 클래스의 구현을 기본으로 사용하며, 재정의는 선택 사항임
코딩 테스트
- 요즘 문제를 한번에 맞추지 못하고 틀리는 문제들이 많은것 같아 고민과 걱정이 많다..
교수가 된 현우
- 문제를 어떻게 풀어야할지 고민을 했지만 아이디어가 떠오르지 않아 틀렸다
- 이 문제는 오른쪽 0의 갯수를 count하는 문제로 이는 10이 몇번 곱해졌는지 찾으면 되는 문제인 것이다
- 10이 몇번 나왔는지 판단하려면 10의 공약수 2,5의 갯수를 찾아 더 작은 값만큼 만들 수 있으므로 그 값을 출력해주면 된다
영화감독 숌
- 이 문젠 666의 죽음의 숫자인가?로 영화 갯수를 표현하는 문제로 처음에는 666앞에 값을 넣어 수를 새보려 했지만 그게 아니였다
- 666은 1로 이를 시작해 반복문으로 666이 있다면 count를++하고 만들 영화 갯수만큼 count가 되면 반복문을 종료해주면 된다
- 이때 count와 영화의 갯수가 같지 않다면 666에 +1을 계속 누적해준다
NBA 농구
- 득점을 한 팀이 다른 팀이 득점을 하기 전까지 이기고있던 시간을 구하는 문제
- t가 1인지 2인지 판단해 A,B를 ++해 어느팀이 득점을 했는지 채크해주고 temp 변수에 현재 시간을 저장해준다
- 처음 입력시 걸리지 않았던 조건문 A>B , B<A가 두번째 입력부터는 판단하게 될것인데 이를 판단해 현재 득점 시간과 저번 득점 시간을 비교해 나온 값을 sumA나 sumB에 누적해 더해준다
- 이렇게 하면 마지막 득점 시간까지 A,B팀이 앞서나가고 있던 시간을 구할 수 있다
- 마지막으로 for문을 탈출할 때 저장된 temp 변수와 종료 시간인 48:00을 WinTime 함수에 넘겨주어 종료 직전 이기고 있던 시간을 구해주고 A>B,A<B인지 판단해 sumA,sumB중에 좀전에 종료 직전에 이기고있던 시간을 더해준다
- 이제 sumA와 sumB를 분과 초 형태로 변환하여 string에 저장한 후 출력해주면 된다
DirectX
Animation 버그수정
- 어제 실습 예제로 만들었던 애니메이션에 버그가 생겨 도저히 해결을 하지 못했었는데 오늘 겨우 해결했다
- 이유는 cpu에서 사용하는 변수들의 순서와 ConstantBuffer를 이용해 GPU로 복사해 Shader에서 사용할 때 CPU에서 변수들과 순서를 맞췄다고 생각했는데 순서가 달라 Shader에서 연산 결과가 달라져 원하는 값이 나오지 않게 되었다
- 이러한 사소한 문제 때문에 많은 고생을 하면서 Shader에 변수를 넘겨줄 때 다시한번 확인하는 습관을 가져야겠단 생각이 드는 하루였다...