반응형 책65 Effective C# - 제네릭타입, 닫힌 제네릭 타입, 열린 제네릭 타입, JLT Compiler, IL 제네릭 타입 하나 이상의 타입 매개변수를 가지는 클래스 또는 메서드이다. class Piggy 닫힌 제네릭 타입 구체적인 타입이 할당되지 않은 상태에서 사용된다. Piggy codePiggy = new Piggy(); 열린 제네릭 타입 일부의 타입 매개변수만 구체적인 타입이 정해서 사용된다. Piggy codePiggy = new Piggy(); 머신 코드 공유 참조 타입 데이터가 실제로 저장된 메모리 주소를 가리키는 참조를 사용한다. 객체의 인스턴스는 힙메모리에 저장되고 변수는 그 객체를 가리키는 참조를 갖는다. MyPiggy piggy1 = new MyPiggy(); MyPiggy piggy2 = piggy1; 제네릭 타입의 타입 매개변수로 참조 타입이 전달되면,컴파일러는 해당 제네릭 타입에 대한 일.. 2023. 12. 5. 컴퓨터 구조 - RAID의 정의와 종류(RAID,RAID0,RAID1,RAID4,RAID5,RAID6) RAID(Reduncdnat Array of Independent Disks) 여러 개의 물리적인 디스크 드라이브를 하나의 논리적인 보조기억장치로 사용하는 기술로 주로 데이터의 안전성을 높이거나 높은 성능을 위해 사용된다. 하드 디스크와 SSD에 사용된다. RAID의 종류 여러 개의 하드 디스크나 SSD를 마치 하나의 장치처럼 사용하는 RAID를 구성하는 방법은 여러 가지가 있다. RAID 구성 방법을 RAID레벨이라 표현한다. 01 RAID0 여러 개의 보조기억장치(하드 디스크 또는 SSD)에 데이터를 단순히 나누어 저장하는 구성 방식이다. 이때 나뉜 데이터를 스트라이프(Stripe)라고 하며 각 디스크는 번갈아 가면 Stripe를 저장한다. 이런 분산된 저장 방식을 스트라이핑(Striping)이라고 .. 2023. 12. 5. 컴퓨터 구조 - 하드 디스크(플래터, 스핀들, 헤드, 디스크 암) 플래시 메모리(SLC,MLC,TLC),가비지 컬렉션 하드 디스크(HHD:Hard Disk Drive) 자기적인 방식으로 데이터를 저장하는 보조기억장치이다. 자기 디스크(magentic disk)의 일종이다. 플래터라고 불리는 회전하는 디스크에 자기적인 방식으로 데이터를 기록하고 읽어오는 원리로 동작한다. 01 플래터(Platter) 회전하는 원형 디스크로 각각의 자기판에 데이터가 자기적으로 기록된다. 하드 디스크에서 실질적으로 데이터가 저장되는 곳이다. 하드 디스크는 자기적인 방식으로 데이터를 저장하므로 N극과 S극을 저장한다. N극과 S극은 0과 1의 역할을 수행한다. 02 스핀들(Spindle) 플래터를 회전시키는 원판으로 회적 속도는 HDD의 성능에 영향을 미친다. 빠르게 회전하는 스핀들은 데이터에 빠르게 액세스할 수 있도록 한다. 03 RPM(Re.. 2023. 12. 5. 컴퓨터 구조 - 저장 장치 계층구조, 캐시 메모리, 캐시 적중률, 참조 지역성의 원리(시간지역성,공간지역성) CPU는 프로그램을 실행하는 과정에서 메모리에 저장된 데이터를 빈번하게 사용한다. 하지만 CPU가 메모리에 접근하는 시간은 CPU의 연산 속도보다 느리다. CPU가 연산을 빨리 한다 해도 메모리에 접근하는 시간이 느리면 CPU의 빠른 속도는 아무런 쓸모가 없어지므로 이를 극복하기 위한 저장 장치가 바로 캐시메모리이다. 저장 장치는 일반적으로 아래와 같은 명제를 따른다. 1) CPU와 가까운 저장 장치는 빠르고 멀리 있는 저장 장치는 느리다. 2) 속도가 빠른 저장 장치는 저장 용량이 작고 가격이 비싸다. 낮은 가격대의 대용량 저장 장치를 원한다면 느린 속도는 감수해야 하고 빠른 속도의 저장 장치를 원한다면 작은 용량과 비싼 가격은 감수해야 한다. 저장 장치 계층 구조(Memory Hierachy) CPU.. 2023. 12. 5. Effective C# - Item 17 표준 Dispose패턴을 구현하라 .NET에서는 비관리 리소스를 System.Runtime.Interop.SafeHandel을 상송한 파생 클래스를 통해 표현하는데 이 클래스 또한 Dispose패턴을 완변하게 구현하고 있다. 파생 클래스는 다음 작업을 수행해야 한다. -파생 클래스가 고유의 리소스 정리 작업을 수행해야 한다면 베이스 클래스에서 정의한 가상 메서드를 재정의 한다. - 멤버 필드로 비관리 리소스를 포함하는 경우에만 finalizer추가해야 한다. - 베이스 클래스에서 정의하고 있는 가상 함수를 반드시 재호출 해야 한다. 비관리 리소스를 포함하고 있다면 무조건 finalizer를 구현해야 한다. IDisposable인터페이스는 단 하나의 메서드만을 가진다. public interface IDisposable { void Dis.. 2023. 12. 3. Effective C# - Item 16 생성자 내에서는 절대로 가상 함수를 호출하지 말라 객체가 완전히 생성되기 이전에 가상 함수를 호출하면 이상 동작을 일으킨다. 어떤 타입이든 생성자가 수행을 완료할 때까지는 완전히 생성되었다고 할 수 없다. 따라서 생성자 내에서 가상 함수를 호출하면 예상 처럼 동작하지 않는다. class B { protected B() { VFunc(); } protected virtual void VFunc() { Console.WriteLine("VFunc in B"); } } class Derived : B { private readonly string msg = "Set by initailizer"; public Derived(string msg) { this.msg = msg; onsole.WriteLine("Program 출력 " + msg); } protec.. 2023. 12. 3. 이전 1 ··· 3 4 5 6 7 8 9 ··· 11 다음 반응형