Software Development 378

PC 구매 전 기본 상식 - CPU 쉽게 이해하기

CPU(Central Processing Unit, 중앙처리장치) 컴퓨터의 머리. 명령어를 해석하여 데이터를 연산/처리하고 돌아가도록 제어해주는 부분. 컴퓨터가 동작하기 위한 모든 계산을 처리한다. CPU 클럭(Clock, 동작속도) : intel - CPU 클럭속도는 무엇입니까? - CPU의 동작 속도, CPU는 매초 다양한 프로그램의 로드와 명령을 처리하는데 클럭 속도는 CPU가 초당 실행하는 사이클 수를 GHz(기가헤르츠)단위로 측정한다. 클럭값이 클수록 동작을 빠르게 처리한다는 의미. CPU 코어 실제 CPU에서 일을 처리하는 부분 싱글 코어 : 1개의 코어가 일한다. 멀티 코어 : 2개 이상의 코어가 일한다.(듀얼코어-2, 쿼드코어-4, 헥사코어-6, 옥타코어-8) CPU 스레드 CPU 코어가 ..

[Effective C#] const보다는 readonly 사용하기

const보다는 readonly 사용하기 const - 컴파일 타임 상수, 컴파일 타임에 변수가 값으로 대체된다. readonly - 런타임 파일 상수, 런타임 타임에 값이 평가된다. 컴파일 타임에 값으로 대체되지 않고 상수에 대한 참조로 컴파일 된다. //컴파일 타임 상수: public const int Millennium = 2000; //런타임 상수: public static readonly int ThisYear = 2004; const 예제) if (myDateTime.Year == Millennium) 위 코드는 컴파일시 아래와 같이 컴파일 된다. if (myDateTime.Year == 2000) - const는 컴파일 시점에 값이 대체, readonly의 경우엔 const처럼 값으로 대체되..

[Effective C#] 지역변수 선언은 var를 사용/var 이해하기

var : 암시적 타입 지역변수(implicitly typed local variable) var i = 10; // Implicitly typed. int i = 10; // Explicitly typed. var는 데이터 타입을 개발자가 아닌 컴파일러가 결정하게 만드는 키워드이다. 위 예제에서 var i의 값은 int 10이 설정됨으로 컴파일러에 의해 int형으로 타입이 결정된다. var 사용 예제 // i is compiled as an int var i = 5; // s is compiled as a string var s = "Hello"; // a is compiled as int[] var a = new[] { 0, 1, 2 }; // expr is compiled as IEnumerable..

타입스크립트(Typescript) 알아보기

타입스크립트(TypeScript) Microsoft에서 개발하고 관리하는 언어. 자바스크립트의 슈퍼셋(상위확장)인 오픈소스 프로그래밍 언어이다. 확장자는 .ts이며 컴파일하여 .js를 출력한다. 최종적으로 이 자바스크립트를 구동하게 된다. 타입스크립트는 컴파일하면 자바스크립트가 되는 언어이며, 자바스크립트에 Type을 설정할 수 있는 게 가장 큰 특징이다. 자바스크립트(JavaScript) - 프로토타입 기반의 프로그래밍 언어, 스크립트 언어이다. HTML, CSS와 함께 웹을 구성하는 요소 중 하나로 HTML이 웹페이지의 기본 구조, CSS가 디자인, JavaScript는 웹페이지의 동작을 담당한다. - HTML5가 나오기 전 대부분의 인터랙티브한 웹페이지는 기존 플래시와 같은 플러그인에 의존하였었는데..

C# yield 기초 이해하기

yield 호출자(Caller)에게 컬렉션 데이터를 하나씩 리턴할 때 사용한다. Enumerator(Iterator)라고 불리는 이러한 기능은 집합적인 데이터 셋으로부터 데이터를 하나씩 호출자에게 보내주는 역할을 한다. - yield return : 컬렉션 데이터를 하나씩 리턴하는데 사용 - yield break : 리턴을 중지하고 iteration 루프를 빠져나올 때 사용 예제 1) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 using System; using System.Collections.Generic; class Program { static IEnumerable GetNumber() { yield return 1; // 첫번째 루프에서 리턴되는 ..

[Effective C#] C# 표준 Dispose 패턴 이해하기

Implement a dispose pattern -> Link - .Net Framework 내부에서 비관리 리소스를 정리하는 표준화된 패턴 - 개발자들에게 IDisposable 인터페이스를 통해 리소스를 삭제할 수 있는 기능을 안정적으로 제공한다. - 비관리 리소스를 명시적으로 정리해야 한다는 사실을 잊거나 인지하지 못한 경우에도 finalizer를 통해 리소스가 정리될 수 있도록 해준다. 베이스 클래스에서의 작업 - 리소스를 정리하기 위해 IDisposable 인터페이스를 구현한다. - 멤버 필드로 비관리 리소스를 포함하는 경우에 한해 방어적으로 동작할 수 있도록 반드시 finalizer를 추가한다. -> 사용자가 Dispose()메서드를 항상 올바르게 호출할 것이라고 가정할 수 없다. 비관리 리소..

[Effective C#] C# 정적 클래스 멤버 초기화 유의사항

정적 멤버 변수를 포함하는 타입이 있다면 인스턴스를 생성하기 전 반드시 정적 멤버 변수를 초기화 하여야한다. C#에선 '정적 멤버 초기화'와 '정적 생성자' 두가지를 제공한다. * 정적 변수를 초기화하기 위해 인스턴스 생성자나 전용의 private 메서드 혹은 다른 관용구를 사용해서는 안된다. 정적 멤버 초기화 - 인스턴스 멤버 초기화와 마찬가지로 정적 멤버를 간단히 초기화하는 경우라면 정적 생상자보단 멤버 초기화 구문을 사용하는 것이 좋다. - 정적 생성자가 호출되기 이전에 실행되며, 베이스 클래스의 정적 생성자보다도 먼저 호출된다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 public class MySingleton { private static reado..

[Effective C#]C# 멤버 초기화 - 할당 구문보다 멤버 초기화를 사용한다.

할당 구문보다 멤버 초기화(member initializer) 구문 사용 - 생성자가 여러개인 경우, 멤버 변수 초기화를 누락하여 사용할 수 있다. 멤버초기화는 이러한 누락을 방지할 수 있다. 1 2 3 4 5 6 public class MyClass { //컬렉션을 선언하는 동시에 초기화 private List labels = new List(); } Colored by Color Scripter cs 이와 같은 코드는 MyClass 타입에 몇개의 생성자가 추가되든 올바른 초기화를 사용할 수 있다. * 컴파일러는 모든 생성자의 시작 부분에 멤버 초기화 구문을 포함시킨다. 새로운 생성자가 추가되거나 사용자가 생성자를 선언하지 않아 기본 생성자가 만들어진 경우에도, 항상 생성자가 실행되기 전 멤버 초기화 ..

Photoshop 감성 색감 - 사진 보정 연습

여러 블로그나 유튜브를 찾아봤는데 아래 유튜브 영상이 가장 쉽게 따라할 수 있면서도 효과적?으로 결과물이 나오는 영상이였다. 초보자인 저도 쉽게 따라할 수 있는 영상! 기능 찾아보기 쉽게 포스팅으로 정리하기. 제대로 따라해보실분은 아래 영상으로 공부하세요! www.youtube.com/watch?v=u0BQnsxjqc8 공부겸 위 유튜브 영상을 하나씩 따라한 내용입니다. 일단 사진 불러오기. 우측에 '조정(Adjustment)를 통해 설정한다. (창-조정) 메뉴는 아래와 같이 구성되어 있다. 1. 흑백 위 메뉴에서 흑백 아이콘을 누르면 이미지가 바로 흑백으로 변한다. 우측에 보이는 '속성' 메뉴의 색상값을 조정하며 흑백 이미지를 설정할 수 있다. 흑백이미지는 입체감이 중요하다. 값들을 조정해서 입체감있게..

[Effective C#] C# 가비지 컬렉터(Garbage Collector) 기초 / finalizer 이해하기

가비지 컬렉터(Garbage Collector, GC) 자동 메모리 관리자, 애플리케이션의 메모리 할당 및 해제를 관리한다. 즉 개발자는 메모리 관리를 위한 코드를 작성할 필요가 없다. 메모리 누수, 댕글링 포인터(dangling pointer), 초기화 되지 않은 포인터 등의 기타 메모리 관련 문제를 개발자가 직접 다루지 않게 된다. * dangling pointer : 유효한 곳을 가르키고 있지 않는 포인터 -관리되지 않는 리소스(Unmanaged Resource, 비관리 리소스)의 경우엔 개발자가 직접 관리해야 하며, 이벤트 핸들러, 델리게이트 등도 잘못 사용하면 이를 참조하고 있는 객체가 불필요하게 메모리에 남게 되므로 사용에 유의해야 한다. ->그럼에도 Garbage Collector가 메모리를..