five minutes of funk

검색 :
RSS 구독 : 글 / 댓글 / 트랙백 / 글+트랙백

C# 메모리 구조로 보는 간단한 배열할당과 박싱 언박싱

2010/01/21 09:35, 글쓴이 web20korea

메모리의 구조

사용자 삽입 이미지

박싱 언박싱

사용자 삽입 이미지

배열



사용자 삽입 이미지

Call By Value




사용자 삽입 이미지

2010/01/21 09:35 2010/01/21 09:35

맨 위로

10 C# 클래스(Class) 2 중첩 클래스_클래스 멤버

2010/01/21 08:56, 글쓴이 web20korea

중첩 클래스(nested class)

class 안에 또다른 class를 정의
class가 논리적으로 다른 class에 포함되어 있지만, 독립적으로는 별 의미가 없을 때 중첩 클래스로 구성 outer class = 주 역할, nested class = 보조 역할 public, internal 접근 제한자일 때 outer class 밖에서도 접근 가능(하지만 제공 목적상 outer 에서 주로 사용) 외부에서 nested class에 접근하려면 outer class를 포함하여 type을 지정

중첩 클래스(nested class)

member method

member property

member property

set 접근자
void 형 메소드와 같음
value 라는 특수한 parameter가 사용됨, 이 value에는 property를 설정하기 위한 값이 전달됨 property를 읽기전용으로 하려면 set 접근자를 생략하면 되고
property를 쓰기전용으로 하려면 get 접근자를 생략하면 된다.

static method, instance method

class에 정의된 member method 중 static이라는 키워드가 붙어있는 method 는 class 이름으로 호출
class 의 member method class에 정의된 member method 중 static이라는 키워드가 붙지 않은 method는 class의 instance로 호출
instance(객체)의 member method 예
2010/01/21 08:56 2010/01/21 08:56

맨 위로

09 C# 클래스(Class) 1 객체와 class

2010/01/21 08:51, 글쓴이 web20korea

객체(object) 와 클래스(class)

객체(object) : 실제로 존재하는 구체적인 대상

클래스(class) : 유사한 특성(attribute)과 행위(behavior)를 갖는 객체를 표현(정의)한 것
세탁기 class
특성 : 브랜드명, 모델명, 일련번호, 용량, 색상 등
행위 : '옷 넣기', '물 투입', '세탁 ', ' 행굼' , '탈수', '완료 신호' 등

OOP(object oriented programming) 객체(object)
Class 를 기반으로 생성된 실체

객체의 3가지 특징

특성(attribute)
해당 객체에 저장되어 있는 정보

행위(behavior)
해당 객체가 행동하거나 반응하는 방법을 결정

정체성(identiry)
해당 객체를 다른 객체와 구별짓게 하는 식별값

객체지향의 기본원리

추상화(abstraction)
필요한 만큼의 특성과 행위를 추출해 내는 것.

캡슐화(encapsulation)
구현방법에 대한 자세한 사항을 내부에 감추고 외부에 노출된 인터페이스(interface)를 통해서만 사용할 수 있게하는 개념

상속(inheritance)
하나의 객체는 자신의 class에 속해 있는 특성과 행위를 모두 물려받는다.

다형성(polymorphism)
다른 class인데 같은 이름의 행위를 가지게 되는 경우

class

사용자가 정의하는 하나의 data type

생성자(constructor), 소멸자(destructor), 상수(constant), 필드(field), 메소드(method), 속성(property), 인덱서(indexor), 연산자(operator) 등을 멤버로 포함

class 의 정의

class의 특성

class의 특성은 member field와 property로 구현

class의 행위

member field

상수와 static field

상수 : 값이 변할 수 없는, 항상 같은 값


static field
static method 처럼 객체의 member가 아닌 class의 member
static constructor를 통해 초기화 가능

2010/01/21 08:51 2010/01/21 08:51

맨 위로

06 C# 형변환(Data Type Conversion)

2010/01/21 08:48, 글쓴이 web20korea

형변환의 문제

데이터 형식 끼리 변환해야하는 필요가 발생

하나의 data type에서 다른 data type 으로 변환을 할 때, 컴파일러는 데이터 손실이 발생할 경우 명시적 형변환을 요구하고, 손실이 발생하지 않는다면 묵시적으로 형변환을 한다.
묵시적 형변환 : 작은 data type에서 큰 data type으로 변환 시
명시적 형변환 : 큰 data type에서 작은 data type으로 변환 시

묵시적 형변환

데이터의 형식변환에서 데이터 값이 변하지 않는다는 보장이 있을 때 자동으로 형변환이 이루어 지는 것
메모리상의 크기가 적은 data type에서 메모리상의 크기의 큰 data type으로의 변환


명시적 형변환

묵시적으로 형변환이 될 수 없는 예
int -> short
int -> uint
long -> int
float -> int
숫자 데이터 형 -> char
decimal -> 다른 숫자 데이터 형
......
명시적 형변환
형변환의 위험성을 개발자가 인지하고 있다는 것을 컴파일러에게 알려주어 강제적인 형변환이 가능하도록 하는 것


명시적 형변환의 위험성

명시적 형변환의 위험성

위의 예제는 error를 발생하지 않지만 결과는 원하던 결과와 다르게 나온다.
명시적 형변환 자체가 위험을 감수하고 변환하는 것이기 때문에 개발자는 이런 엉뚱한 상황이 발생할 수 있다는 것을 인지하고 있어야 한다.

이런 상황이 올 수 있는 경우 checked 연산자를 사용하여 stack overflow를 검사할 수 있다.

checked 연산자의 사용

명시적 형변환시 연산도중 발생할 수 있는 stack overflow를 검사하는 연산자
이를 통해 현재의 형변환이 안전한지를 검사할 수 있다.

처리되지 않은 'System.OverflowException' 형식의 예외가 ConApp5.exe에서 발생했습니다.
추가 정보: 산술 연산으로 인해 오버플로가 발생했습니다.
checked 연산자를 통해 실행시 발생하는 문제를 미리 점검할 수 있다.

Boxing

value type 을 reference type 으로 묵시적으로 변환


Unboxing

reference type 을 value type 으로 명시적으로 변환

2010/01/21 08:48 2010/01/21 08:48

맨 위로

05 C# 열거형M_구조체_연산자

2010/01/20 15:20, 글쓴이 web20korea

열거형(enumeration)

열거자(enumerator)란 이름이 부여된 일련의 정수 상수로 구성되는 데이터 타입
열거자의 값은 기본적으로 0으로 시작하여 1씩 증가
값을 바꿀 수 있는데, 한 값을 바꾸면 다음 열거자부터는 바뀐값에서 1씩 증가
default type 은 int 이며 char를 제외한 정수형 타입(byte, sbyte, short, int, uint, long, ulong)의 지정이 가능

열거형 정의 및 사용

열거형 정의

열거형 사용

구조체

대문자로 표시
value type
사용자 정의 데이터 타입을 정의하는데 사용
일반적으로 여러개의 필드를 포함하는 복합 데이터 타입(composite data type)을 정의하기 위해 사용
공개필드 멤버로만 포함하는 것이 일반적
생성자를 가질 수 있다.
이때 default 생성자는 재정의할 수 없으며, 반드시 파라메터가 있는 생성자이어야 한다.

구조체 정의 및 사용

구조체 정의

구조체 사용

구조체 생성자 사용


2010/01/20 15:20 2010/01/20 15:20

맨 위로