C#은 객체지향 언어로 객체지향 프로그래밍을 위한 개념들이 있다.

 

Class

객체를 정의하는 템플릿이며 객체의 상태를 나타내는 필드와 동작을 나타내는 메서드를 포함한다.

즉 클래스는 객체를 표현하기 위한 설계도로 볼 수 있다.

public class MyClass
{
    // field, 멤버 변수
    public int id;
    public string name;
    public int age;
    
    // method, 멤버 함수
    public void Introduc()
    {
        string introduce = "My age : " + agem + "\nMy name : " + name;
    	Cosole.WriteLine(introduce);
    }
}

MyClass라는 객체에는 id, name, age 멤버변수와 Introduce 메서드를 포함하고 있다.

 

Instance

클래스의 인스턴스로 실제로 메모리에 할당된 데이터이다. 객체는 클래스에서 정의된 필드와 메서드를 사용할 수 있으며 개별적인 상태를 유지한다.

public void Main(string[] args)
{
    // Instance, MyClass 클래스의 객체
    MyClass myClass = new MyClass();
    myClass.id = 1;
    myClass.name = "bak";
    myClass.age = 30;
    myClass.Introduce();
    
    // Instance, myClass와는 개별적인 객체
    MyClass myClass2 = new MyClass();
    myClass2.id = 2;
    myClass2.name = "kim";
    myClass2.age = 25;
    myClass2.Introduce();
}

동일한 MyClass를 인스턴스화한 myClass와 myClass2는 개별적인 객체이다.

 

Inherit

클래스 간의 계층 구조를 형성하여 코드의 재사용성과 구조화를 실현한다. 기존 클래스를 기반으로 새로운 클래스를 정의하고 확장할 수 있는데 ㅅ상속을 통해 부모 클래스의 멤버를 자식 클래스에서 사용하는 것이 가능하다.

 

public class Parent
{ 
    public int id;
    public string name;
    
    public void MethodParent()
    {
    	Console.Log(id, name);
    }
}

public class Child
{
    public void MethodChild()
    {
    	id = 10;
        name = "bak";
        MethodParent();
    }
}

재사용할 코드는 부모 클래스로 만들어서 자식 클래스에서 상속하여 그대로 사용할 수 있다.

 

Polymophism

다형성은 같은 이름의 메서드나 속성을 다른 방식으로 구현하는 개념이다. 다형성은 상속과 관련이 깊으며 부모 클래스의 타입으로 자식 클래스의 객체를 참조하면 다형성을 활용할 수 있다.

 

public class Parent
{
    public virtual void MethodParent()
    {
    	Console.WriteLine("Call Parent Method");
    }
}

public class Child
{
 	public override void MethodParent()
    {
    	Console.WriteLine("Call Parent Method From Child");
    }
}

다형성의 대표적인 예는 부모 클래스의 메서드를 자식에서 오버라이딩하는 경우가 있다.

 

Encapsulation

객체의 상태와 동작을 외부로부터 감추는것을 뜻한다.  클래스는 필드와 메서드를 적절한 접근 제한자로 제어하여 캡슐화를 구현할 수 있다. 이는 객체의 내부 구현을 보호하며 외부에서는 필요한 기능만 사용할 수 있도록 한다.

 

public class MyClass
{
    private string name;
    private int age;
    
    public void SetName(string name)
    {
    	this.name = name;
    }
    
    public string GetName()
    {
    	return name;
    }
    
    public void SetAge(int age)
    {
    	this.age = age;
    }
    
    public int GetAge()
    {
    	return age;
    }
}

public class Program
{
    public static void Main(string[] args)
    {
    	MyClass myClass = new MyClass();
        myClass.SetName("Bak");
        myClass.SetAge(30);
        Console.WriteLine("Name : " + myClass.GetName());
        Console.WriteLine("Age : " + myClass.GetAge());
    }
}

클래스에서 접근을 허용할 부분을 public 불필요한 부분은 private로 접근 제한자를 두어 필요한 부분만 제어할 수 있도록 한다.

 

Abstract

복잡한 시스템을 단순화하고 핵심적인 요소만을 추출하여 모델링하는 과정을 말한다. 추상화는 클래스의 공통적인 특징을 추출하여 부모 클래스나 인터페이스로 정의할 수 있다.

 

public class Person
{
    public int age;
    public string name;
    public int countryCode;
    
    public virtual void Eat() {}
    public virtual void Sleep() {}
    public virtual void Work() {}
}

public class Student : Person
{
    public override void Work()
    {
    	Console.WirteLine("Studying");
    }
}

public class Teacher : Person
{
    public override void Work()
    {
    	Console.WriteLine("Teaching");
    }
}

추상화는 클래스를 만들 때 필요한 기본 개념으로 재사용, 다형성 등을 고려하여 최대한 구체적이지 않으면서 공통적인 부분을 부모 클래스로 만들 때 필요하다.

728x90
반응형

'Program Language > C#' 카테고리의 다른 글

C# 인스턴스 생성 키워드 : new - 생성자와 소멸자  (0) 2024.05.06
C# 라이브러리 Collections, Generic  (0) 2023.05.16
C# Operator 키워드  (0) 2023.04.27
C# Method Parameter 키워드  (0) 2023.04.27
C# Namespace 키워드  (0) 2023.04.27

에디터 버전 : 2021.3.28f1 (LTS)

 

Audio

오디오 시스템을 구성하는 데 사용되는 설정으로 모든 Audio 컴포넌트에 영향을 미치는 전역적인 설정을 제공한다.

 

Unity Project Settings - Audio

 

Global Volume

오디오 시스템의 볼륨을 전역으로 적용한다.

Audio - Global Volume

볼륨의 초기값에 곱해주는 수로 AudioListner.volume과 동일하다.

 

Volume Rolloff Scale

볼륨이 감쇠되는 정도를 전역으로 조절한다. 

Audio Volume Rolloff Scale

단 Logarithmic Volume Curves 인 경우에만 적용된다.

Logarithmic Volume Curves는 로그 함수 곡선형태로 사운드가 감쇠되는 경우에만 적용되는데 이 사운드는 Audio Source 컴포넌트의 속성값 중에 3D Sound Settings의 Volume Rolloff에서 선택할 수 있는 옵션이다.

( 기본으로 Logarithmic Rolloff 설정 )

 

값은 기본적으로 1로 되어있는데 이 값이 현실에 가장 가까운 수치이다.

 

Doppler Factor

소리에 도플러 효과(Doppler Effect)를 적용시키기 위한 수치이다. 

Audio Doppler Factor

원하는 도플러 효과를 얻기 위해서 해당 수치를 조절할 수 있다.

 

Doppler Effect

도플러 효과란 파동의 진동수가 왜곡되는 현상이다. 음원(소리의 근원지)가 움직이면서 파원이 다가오고 있을 때 정지한 관찰자에게는 파동의 파장이 실제보다 짧게 느껴지고 다시 멀어지게 되면 파장이 실제보다 길게 느껴지는 것이다.

 

예를 들어 멀리서부터 소방차가 사이렌을 켜고 달려오고 있다. 이때 멀리서부터 나에게 가까워지는 동안에는 사이렌의 소리가 점점 높아지는 것처럼 들리다가 내 옆을 지나쳐 멀어질 때는 낮아지는 것처럼 느껴진다. 하지만  이는 상대적인 효과로 관찰자만 느끼는 현상이고 소방차에 탑승한 사람에게는 일정한 소리로 들린다.

 

유니티의 프로젝트 세팅에서 Doppler Factor 수치는 기본적으로 1이다. 이 수치는 소리의 움직임이 실제 도플러 효과와 거의 동일하게 시뮬레이션되며 값이 0에 가까워질수록 도플러 효과가 감소하고 값이 높아질수록 강조된다.

 

Default Speaker Mode

프로젝트의 오디오 출력을 설정할 수 있는 옵션이다. 유니티 엔진에서 오디오가 재생될 때 사용되는 스피커의 타입을 지정할 수 있다.

Audio - Default Speaker Mode

옵션의 종류는 다음과 같다.

Default Speaker Mode - Option

 

Mono

채널 개수가 1개이다.

오디오를 단일 스피커에서 재생한다. 오디오 소스는 좌우 채널이 결합된 단일 스피커로 재생된다. 

주로 모노 오디오 효과나 음성 등 단일 채널 오디오를 재생하는 데 사용된다.

 

Stereo

채널 개수가 2개이다.

좌우 스피커에서 각각의 채널이 재생된다. 대부분의 오디오에서 사용되는 일반적인 스테레오 효과를 재생할 때 사용되며 기본으로 선택된 설정이다.

 

Quad

채널 개수가 4개이다.

전후좌우  4개의 스피커에 각각의 채널이 재생되며 3D 오디오 효과를 표현할 수 있다.

 

Surround

채널 개수는 5개이다.

전면 좌우, 중앙, 후면 좌우 5개의 스피커를 사용한다. 더 입체적인 공간 음향 효과를 재생할 수 있다.

 

Surround 5.1/7.1

채널 개수는 5개 이상이다.

전면 좌우, 중앙, 후면 좌우 + 서브 우퍼 채널을 통해 사운드가 재생된다.

 

Prologic DTS(Digital Theater System)

채널 개수는 2개이다.

스피커는 스테레오로 출력되지만 데이터는 Prologic/Prologic2 디코더에서 인식하고 5.1 채널 스피커로 분리되도록 인코딩 된다.

 

System Sample Rate

출력되는 샘플 레이트를 설정한다. 해당 수치를 조절하면 오디오 주파수의 표현 범위를 조정할 수 있다. 0으로 설정하면 시스템의 샘플 레이트를 사용하고 0 이외의 값을 설정하면 입력한 값을 샘플 레이트로 사용하게 된다. iOS나 Android와 같은 특정 플랫폼에서 샘플 레이트를 변경할 수 있는 경우에만 해당한다.

 

Sample Rate

샘플의 빈도수 즉, 1초당 추출되는 샘플의 개수를 뜻한다. 샘플 레이트의 수치가 높을수록 정확한 음원을 저장할 수 있지만 그만큼 용량이 기하급수적으로 증가한다. 이에 따라 적당한 타협선인 44.1kHz의 샘플 레이트가 일반적으로 사용된다. 

 

DSP Buffer Size

Digital Signal Processing 버퍼 크기

실시간으로 들어오는 오디오 데이터를 처리하고 재생하기 위해서 일시적으로 저장하는 공간의 크기를 설정한다.

Audio - DSP Buffer Size

해당 저장공간이 작으면 오디오 데이터가 빠르게 처리되지만 CPU 부하가 증가하고 지연 시간이 감소한다. 반면에 공간이 큰 경우에는 한 번에 더 많은 오디오 데이터가 처리되므로 CPU부하가 감소하고 지연 시간이 증가한다.

 

DSP Buffer Size

Default

유니티의 기본 DSP 버퍼 크기를 사용한다. 대부분의 경우 적절한 응답성과 지연 시간을 제공하는 안정적인 설정이다.

 

Best latency

지연 시간을 고려하여 성능을 절충한다. 더 낮은 지연 시간이 요구되는 실시간 애플리케이션에 적합하다. CPU 부하가 증가할 수 있고 낮은 CPU 성능에서는 문제가 발생할 수 있다.

 

Good latency

지연 시간과 CPU 성능의 균형을 유지한다. 일반적인 오디오 처리 요구 사항을 충족하는데 적합하다.

 

Best performance

CPU 성능을 유리하도록 지연시간을 맞춘다. 높은 오디오 처리 요구 사항이 있거나 더 많은 CPU 성능을 활용해야 하는 경우에 적합하며 지연 시간이 증가할 수 있다.

 

Max Virtual Voices

Audio - Max Virtual Voices

오디오 시스템이 관리할 수 있는 최대 사운드의 개수를 설정한다. Real Voices의 수보다 크게 설정되어야 하며 그렇지 않은 경우 콘솔에서 경고 메시지가 표시된다. 가장 큰 소리들 중에서 Max Real Voices 수만큼만 실제로 재생되고 나머지 소리들은 재생 위치만 업데이트된다.

 

Max Real Voices

Audio - Max Real Voices

게임에서 동시에 재생 가능한 실제 음성의 수를 설정한다. 매 프레임마다 가장 큰 음성이 선택된다.

 

Spatializer Plugin

Audio - Spactializer Plugin

공간화된 오디오 처리를 수행하기 위한 플러그인이다. 오디오를 공간적으로 위치시키고 음향 효과를 적용하여 3D 소리의 현실감을 높이는 데 사용된다.

 

일반적으로 게임 엔진이나 오디오 미들웨어에서 제공되며 다양한 기능과 설정을 제공한다. 오디오 원본의 위치, 방향, 거리 등을 고려하여 소리를 공간 내에서 정확하게 재생할 수 있으며 일반 스피커 시스템이나 헤드폰을 사용하는 경우, 소리가 사용자 주변에서 움직이거나 공간의 특정 위치에서 들리는 것처럼 느껴지게 된다.

 

해당 기능을 사용하기 위해서는 해당 플러그인의 최신 SDK 설치가 필요하다.

현재 버전을 기준으로 공식문서에서 안내되는 플러그인 다운링크

 

Ambisonic Decoder Plugin

Audio - Ambisonic Decoder Plugin

Ambisonic을 Binaural 필터링하기 위한 플러그인을 설정할 수 있다.

유니티에서 제공되는 빌트인 디코더는 없으며 일부 VR 하드웨어 제조사의 경우 오디오 SDK에 유니티용 빌트인 디코더가 있다. 타깃 플랫폼 제조사의 문서를 통해 프로젝트에 적합한지 확인할 수 있다.

 

Ambisonic 오디오 클립을 임포트 하려면 임포트 한 파일의 Ambisonic 옵션을 체크해야 한다.

Import Ambisonic Audio Clip

Ambisonic 클립을 사용하기 위해서는 Audio Source 컴포넌트의 Spatialize 옵션을 비활성화해야 하고 해당 클립이 재생될 때 자동으로 프로젝트에서 선택된 플러그인을 통해서 디코딩된다.

 

Ambisonic

다중 마이크로폰 배열을 사용하여 소리의 공간 정보를 캡처하는 방법이다. 소리의 방향, 거리, 공간 위치 등을 캡처하여 공간적으로 정확한 사운드 재생을 가능하게 한다. 일반적으로 360도 환경 음향을 재현하거나 VR 및 3D 오디오 환경에서 사용된다. 다중 채널 포맷으로 저장되고 Ambisonic을 사용하면 각 채널을 특정 스피커에 매핑하지 않고 사운드필드가 더 전체적인 방법으로 표현된다. 

Binaural

인간의 이중귀를 모방하여 소리를 전달하는 기술이다. 두 개의 이어폰 또는 헤드폰을 사용해서 소리를 개별적으로 각 귀에 전달함으로 공간적인 사운드 경험을 제공한다. 3D 오디오를 더욱 현실적이고 공간적으로 인지할 수 있도록 한다.

 

Disable Unity Audio

Disable Unity Audio

런타임에 출력 장치를 할당하지 않도록 설정한다. 내장된 오디오 시스템 이외의 다른 사운드 시스템을 사용하는 경우에 활성화하는 옵션이다. 

 

Enable Output Suspension (editor only)

Enable Output Suspension

출력이 오랜 시간 동안 정지된 것이 감지되면 자동으로 오디오 출력을 일시 중단시킨다. 오디오 시스템을 중단하면 컴퓨터가 절전 모드로 전환되는 것을 방지하는 운영 체제의 기능이 비활성화되고 이를 통해 오랜 시간 동안 정지된 오디오 출력으로 인해 컴퓨터가 절전 모드로 전환되는 것을 방지할 수 있다. 주로 배터리 수명을 연장하거나 오디오가 정지된 상태에서 시스템의 에너지 소비를 최소화하기 위해 사용된다.

 

해당 설정은 기본적으로 활성화되어 있다.

 

Visualize Effects

컬링 되는 오브젝트의 Audio Source에서 Spatializer를 동적으로 비활성화하여 CPU를 절약한다. 

즉 카메라에 의해 렌더링 되지 않는 오브젝트에 대한 오디오 처리를 제한시킨다.

728x90
반응형

최근에 랩탑의 os를 Windows 11로 업그레이드했다.

Windows 10이 괜찮기 때문에 굳이 업그레이드할 이유가 없었지만 약간의 변경된 부분이 있다는 게 궁금해서 확인차 업그레이드를 진행했다. 출시되고 어느 정도 시간이 지난 지금에서야 하는 이유는 어느정도 업데이트가 되고 안정된 상태에서 사용하고 싶었기 때문이다.

 

 

Windows 11

현재까지 사용한 느낌으로는 몇 가지 자잘한 버그들이 남아있는 것 이외에는 크게 문제 되는 게 없는 거 같다. 물론 간단한 작업용으로 사용하는 랩탑이기 때문에 여러 프로그램을 테스트해보지는 못했다. 10에서와 크게 다른 점은 시작 메뉴의 기본 위치와 창의 최소화할 때 애니메이션 정도이다. 약간 경쟁사의 느낌이 들긴 하지만 MS는 모니터가 점점 비대해지는 시대에 맞춰 사용자의 불편함을 덜고자 구석이 아닌 가운데에 시작메뉴를 위치시켰다고 한다.

위치 이외에도 시작 메뉴 내부 구성도 변경되었는데 원래도 자주 쓰지 않았지만 기존 사용방식에 익숙했던 사람들에게는 호불호가 갈리는 가장 큰 변경사항이다.

 

이외에도 기능적으로 추가되고 변경된 게 있지만 굳이 11로 업그레이드할 만큼 눈에 띄는 건 없다. Windows 10의 서비스 기간이 25년까지이기 때문에 더 이후에 업그레이드를 해도 될 것 같다.

 

Edge Browser

Windows 11을 사용한 김에 Edge도 한번 사용해 보기로 한다.

브라우저는 이미 Chrome 이 잘 만들어져 있기 때문에 다른 걸 찾아서 써보진 않았지만 MS에서 만들었다고 하니 한번 사용해 보았다. 

 

우선 Edge와 Chrome의 브라우저 벤치마크부터 비교해 본다.

벤치마크 툴은 Motion Mark, Speedometer, JetStream을 돌려보았다.

 

좌 Chrome 우 Edge

 

Motion Mark

그래픽 성능과 애니메이션 처리 능력을 평가하기 위한 웹 브라우저 벤치마크 툴이다. 각 항목들은 특정 그래픽 및 애니메이션 작업을 수행하고 그 성능을 측정하는 데 사용된다.

Motion Mark

Multiply : 두 개의 이미지를 곱하는 연산을 픽셀 단위로 수행하여 이미지 처리 작업의 성능을 측정한다.

Canvas Arcs : <canvas> 요소를 사용하여 원을 그리는 작업을 수행하여 렌더링 능력을 평가한다.

Leaves : 움직이는 잎사귀들을 표시하는 작업을 수행하여 애니메이션 처리와 부드러운 움직임에 대한 성능을 평가한다.

Paths : 다양한 형태와 곡선을 따라 그려지는 경로를 생성하는 작업을 수행하여 벡터 그래픽 작업에 대한 성능을 측정한다.

Canvas Lines : <canvas> 요소를 사용하여 선을 그리는 작업을 수행하여 선그리기 능력을 평가한다.

 

Speedometer

웹 애플리케이션의 성능을 평가하기 위한 벤치마크 툴이다. 실제로 자주 사용되는 기술과 프레임워크를 사용하여 작성된 테스트 케이스를 실행하고 작업을 얼마나 잘 처리하는지를 측정한다. 

 

speedometer

구체적인 의미를 제공하지 않지만 결과 점수를 통해서 상대적인 점수를 지표로 활용할 수 있다.

 

JetStream

브라우저의 JavaScript 성능을 평가한다. 웹 페이지가 동적으로 구현될 때 JavaScript 코드를 얼마나 효율적으로 실행하는지를 축정한다. 

JetStream

Java Script를 사용한 숫자 연산, 문자열 처리, 배열 조작, DOM 조작, 애니메이션 등의 작업을 처리한 결과를 종합하여 점수로 표기한다.

 

동일한 상태에서 돌려본 결과 모든 점수가 chrome이 더 높지만 엄청나게 큰 점수차가 나는 건 아니었다. 두 브라우저를 모두 사용해본 결과 이미 사용중이고 익숙한 브라우저가 있다면 굳이 다른 브라우저로 갈아탈만큼 큰 차이도 없고 브라우저를 갈아탄다고 해서 불편할것도 없어 보인다.

 

E-tree

edge의 사이드바 메뉴에서 플레이할 수 있는 미니게임이 있다.

tree

매일 일정량의 물이 제공되고 추가 미션을 통해서 더 획득할 수 있다. 미션 중에 환경을 키워드로 bing을 통해서 검색해 보는 미션이 있다. 가상이지만 나무를 키우면서 현실의 환경에 대해서 되돌아보다가도 사이버 나무를 키우기 위해서 컴퓨터를 켜고 전기를 사용하는 게 실제 나무에게 더 안 좋은 영향을 끼치는 게 아닐까 생각도 잠시 했지만 나무를 키우려고 컴퓨터를 켜지는 않고 애초에 켜져 있을 컴퓨터 이왕이면 하다가 한 번쯤 환경을 되돌아보게 만드는 점이 더 크게 작용할 것이다.

728x90
반응형

'Life' 카테고리의 다른 글

치토스 맥앤치즈  (0) 2023.10.23
오랜만에 만족스러운 영화관람! 슈퍼 마리오 브라더스  (0) 2023.05.08
베트남 콘삭 커피  (0) 2023.04.09
티스토리 단축키  (0) 2023.03.30
장 줄리앙 전시회 - 그리고 거기  (1) 2023.03.27

+ Recent posts