본문 바로가기

프로그래밍6

프로그래밍의 추상화 추상화란?추상화는 복잡한 시스템에서 핵심적인 부분만을 남기고 불필요한 세부 사항을 숨기는 것이다 구체적으로 객체지향 프로그래밍 언어에서 인터페이스 혹은 추상 클래스를 통해 구현된다 예를 들어 Car라는 추상 클래스가 있다고 가정해보자테슬라와 현대차는 각기 다른 방식으로 핸들링을 구현하고, 가속 페달을 밟았을 때 속도를 높이는 원리도 다를 수 있다. 하지만 사용자는 이러한 내부 구현을 몰라도 된다중요한 것은 핸들을 돌리면 방향이 바뀌고, 가속 페달을 밟으면 차가 빨라지는 결과가 나온다는 것이다 추상화는 이처럼 행동과 결과만을 명확하게 정의하고, 내부 동작 방식은 숨김으로써 복잡성을 줄이는 개념이다  추상화의 장점추상화의 주요 장점은 다음과 같다 읽기 쉬워짐복잡한 구현을 감추고, 핵심적인 동작을 정의하는 인.. 2025. 3. 11.
C#의 프로퍼티(Property)란? C#에서 프로퍼티란 객체의 필드 값을 읽거나 설정할 수 있는 메서드처럼 동작하는 멤버이며 변수처럼 사용할 수 있다 프로퍼티가 생긴 이유과거 C, C++에서는 필드에 직접 접근하는 것이 일반적이었으나, OOP에서는 캡슐화를 중요시한다. 즉, 필드는 직접 노출하면 안되며, 필요한 경우 메서드를 통해 접근해야 한다 하지만 그러면 매번 메서드를 선언하는 번거로움이 생기기 때문에 이 문제를 해결하기 위해 프로퍼티를 도입했다. 즉, 필드처럼 간단하게 접근할 수 있으면서도 캡슐화를 달성할 수 있게 된 것이다 코드 예시는 아래와 같다/* C */#include typedef struct { int age;} Person;// Getterint getAge(Person* p) { return p->age;}/.. 2025. 3. 10.
C# 얕은 복사와 깊은 복사의 차이 C#에서 객체를 복사하는 방식은 얕은 복사(Shallow Copy)와 깊은 복사(Deep Copy)로 나뉜다얕은 복사는 원본 객체의 참조만 복사하여 같은 객체를 공유하며, 깊은 복사는 원본 객체의 모든 데이터를 새로운 메모리에 복사하여 독립적인 객체를 생성한다 결론얕은 복사는 객체의 참조만 복사하여 원본과 복사본이 같은 데이터를 공유하므로, 한쪽을 변경하면 다른 쪽도 영향을 받는다반면, 깊은 복사는 완전히 새로운 객체를 생성하여 복사본을 독립적으로 유지하므로, 변경이 원본에 영향을 주지 않는다 Wikipedia - Object copying 2025. 3. 4.
C# 값 타입과 참조 타입의 차이 C#의 값 타입과 참조 타입은 메모리에 데이터를 저장하는 방식과 저장된 데이터에 접근하는 방식이 다르다 메모리 저장 방식저장 방식의 차이로 인해 메모리 할당 속도, 기본 초기화 값 등의 차이가 발생한다 값 타입의 데이터는 일반적으로 스택 영역에 저장되고, 참조 타입의 필드로 사용될 경우 힙에 저장된다. 변수에 데이터가 그대로 저장된다using System;class Program{ static void Main() { int a = 10; // 값 타입 (스택에 저장됨) int b = a; // a의 값을 복사하여 b에 저장 (새로운 공간 할당) b = 20; // b만 변경, a에는 영향 없음 Console.WriteLine($.. 2025. 3. 4.
C# 인터페이스와 추상클래스의 차이 C#에서 인터페이스와 추상 클래스의 차이는 다음과 같다 개념적 차이인터페이스인터페이스는 주로 이 객체는 어떤 동작을 할 수 있다 라는 동작(행동)의 집합을 정의한다 예를 들어 '저장할 수 있다', '로그를 남길 수 있다' 같은 식으로 해당 인터페이스를 상속받은 클래스가 갖춰야 할 기능의 틀만 제공하는 것이다using System;// 1. 인터페이스 정의public interface ILogger{ void Log(string message);}// 2. 인터페이스 구현 클래스public class FileLogger : ILogger{ public void Log(string message) { Console.WriteLine($"파일 로그 기록: {message}"); .. 2025. 3. 3.
C# ContainsKey vs TryGetValue 개요유니티 시스템 프로그래밍 Pt.1 스터디 2주차를 진행하던 중, 더 최적화할 수 있을 것 같은 코드를 발견하여 이에 대한 의견을 제시하였다 코드는 다음과 같다./// /// 지정된 BGM을 재생합니다./// /// 재생할 BGM의 열거형 값.public void PlayBGM(EBGM bgm){ if (_currentBGMSource) { _currentBGMSource.Stop(); _currentBGMSource = null; } if (!_bgmDic.ContainsKey(bgm)) { Debug.LogError($"Invalid clip name. {bgm}"); return; } _currentBGMSo.. 2024. 9. 17.
반응형