반응형 책65 Effective C# - Item 15 불필요한 객체를 만들지 말라 GC( Garbage Collection )는 사용자를 대신하여 사용하지 않는 객체를 효율적인 방식으로 제거한다. 하지만 이러한 작업이 아무리 효율적이라 하더라도 힙에서 새로운 객체를 생성하고 삭제하는 작업은 그러한 일을 전혀 하지 않는 것에 비한다면 상대적으로 많은 프로세서 시간을 사용하므로 성능 문제를 일으킬 수 있다. 따라서 GC가 과도하게 동작하지 않도록 주의 해야한다. 기술적으로 몇 가지만 유념하면 GC의 작업을 현저히 줄일 수 있다. GC 작업을 줄일 수 있는 방법 01 지역변수를 멤버 변수로 변경 모든 참조 타입의 객체는 지역변수라 하더라도 동적으로 메모리를 할당한다. 이렇게 할당된 객체는 이 객체를 참조하는 상위 객체가 삭제되면 가비지가 된다. 지역변수의 경우 그 변수를 선언한 메서드를 벗.. 2023. 12. 3. Effective C# - Item14 초기화 코드가 중복되는 것을 최소화하라 C# 컴파일러는 공용 생성자를 이용하는 초기화 방식을 매우 특별한 문법으로 인식한다. 변수에 대한 중복 초기화 코드를 제거해줄 뿐 아니라 베이스 클래스의 생성자가 반복적으로 호출되는 것도 막아준다. 즉 객체 초기화를 위해 수행해야 하는 코드를 최적화해준다. 개발자 입장에서는 초기화 과정 일부를 공용 생성자에 위임할 수 있으므로 작성하는 코드의 양을 최소활 할 수 있다. 1. Constructor Chaining 여러 생성자 중에서 가장 많은 입력을 필요로 하는 생성자를 기준으로 하여, 입력할 값의 수가 적은 다른 생성자들을 이 기준이 되는 생성자를 통해 간접적으로 호출하는 기법이다. 이를 통해 코드의 중복을 최소화하고 재사용성을 높일 수 있다. Unity - Constructor Chaining(생성자 .. 2023. 12. 3. 컴퓨터 구조 - 논리주소와 물리주소, MMU, 베이스 레지스터 및 한계 레지스터 메모리에 저장된 정보의 위치는 주소로 나타낼 수 있다. CPU와 실행 중인 프로그램은 현재 메모리 몇번지에 무엇이 저장되어 있는지 다 알고 있을까요? 없다. 메모리에 저장된 정보는 시시각각 변하기 때문이다. 메모리에는 새롭게 실행되는 프로그램이 시시때때로 적재되고 실행이 끝난 프로그램은 삭제된다. 게다가 같은 프로그램을 실행하더라도 실행할 때마다 적재되는 주소가 달라진다. 그렇다면 CPU와 실행 중인 프로그램이 이해하는 주소는 무엇일까? 주소에는 메모리가 사용하는 물리주소가 있고 CPU와 실행 중인 프로그램이 사용하는 논리주소가 있다. 01 물리 주소(Phyiscal Address) 메모리 입장에서 실제로 데이터가 저장된 물리적인 주소를 나타낸다. 주로 하드웨어 에서 사용되며 각 데이터의 실제 물리 위치.. 2023. 12. 2. 컴퓨터 구조 - RAM의 특성과 종류(DRAM,SRAM,SDRAM,DDR SDRAM) 컴퓨터의 핵식 부품에는 CPU, 메모리, 보조기억장치, 입출력장치가 있다. 메모리에 더 알아보자 주기억장치(메인메모리)는 종류에는 크게 RAM과 ROM 두가지가 있고 메모리라는 용어는 그 중 RAM을 지칭하는 경우가 많다. 휘발성 저장 장치(Volatile Memory) RAM(Random Access Memory)는 주로 컴퓨터에서 실행 중인 프로그램 및 작업에 필요한 데이터를 일시적으로 저장하는데 사용된다. RAM은 전원이 켜져 있는 동안에만 데이터를 보유하며 전원이 꺼지면 저장된 내용이 사라진다. 특성 1 ) 실행 중인 운영 체제 및 응용 프로그램이 RAM에 로드되어 빠른 액세스를 허용한다. 데이터를 임시로 저장하여 CPU가 빠르게 읽고 쓸 수 있도록 도와준다. 2) 전원이 꺼지면 RAM에 저장된 .. 2023. 12. 2. Effective C# - Item13 정적 클래스 멤버를 올바르게 초기화하라 정적 멤버 변수를 포함하는 타입이 있다면 인스턴스를 생성하기 전에 반드시 정적 멤버 변수를 초기화 해야한다. C#에서는 정적 멤버 초기화 구문과 정적 생성자라는 두 가지 기능을 제공한다. 예시 static MyClass()는 정적 생성자이며 클래스가 처음으로 사용될 때 한 번만 호출된다. 이를 통해 정적 멤버 변수 myPiggy를 초기화 할 수 있다. public class MyClass { // 정적 멤버 변수 public static int myPiggy; // 정적 멤버 초기화 구문 static MyClass() { myPiggy = 42; } } 정적 생성자를 사용하는 대표적 사례 : 싱글톤 패턴 인스턴스가 하나만 생성되도록 보장하는 디자인 패턴 중 하나이다. 정적 생성자를 사용하여 구현할 때 정.. 2023. 12. 1. Effective C# - Item12 할당 구문보다 멤버 초기화 구문이 좋다 클래스를 만들다보면 종종 둘 이상의 생성자를 작성해야 하는 경우가 있다. 그러면 자칫 초기화 코드를 누락하는 경우가 있는데 이러한 오류를 범하지 않으려면 생성자의 본문에서 멤버 변수에 값을 할당하기보다 멤버 초기화 구문을 사용하는 것이 좋다. 멤버 초기화 구문 생성자에게 멤버 변수에 값을 할당하는 대신에 해당 변수를 선언하는 동시에 초기값을 설정하는 방법이다. 01 멤버 초기화 구문의 사용 public class MyClass { //컬렉션을 선언하는 동시에 초기화 private List labels = new List(); } 02 멤버 초기화 구문과 생성자 멤버 초기화 구문에서 변수를 초기화하면 생성자 본문에서 해당 변수를 초기화할 필요가 없다. 멤버 초기화 구문이 생성자보다 먼저 실행되므로 생성자에.. 2023. 11. 30. 이전 1 ··· 4 5 6 7 8 9 10 11 다음 반응형