메모리의 구조

박싱 언박싱

배열

Call By Value

객체(object) : 실제로 존재하는 구체적인 대상
클래스(class) : 유사한 특성(attribute)과 행위(behavior)를 갖는 객체를 표현(정의)한 것
세탁기 class
특성 : 브랜드명, 모델명, 일련번호, 용량, 색상 등
행위 : '옷 넣기', '물 투입', '세탁 ', ' 행굼' , '탈수', '완료 신호' 등
OOP(object oriented programming) 객체(object)
Class 를 기반으로 생성된 실체
특성(attribute)
해당 객체에 저장되어 있는 정보
행위(behavior)
해당 객체가 행동하거나 반응하는 방법을 결정
정체성(identiry)
해당 객체를 다른 객체와 구별짓게 하는 식별값
추상화(abstraction)
필요한 만큼의 특성과 행위를 추출해 내는 것.
캡슐화(encapsulation)
구현방법에 대한 자세한 사항을 내부에 감추고 외부에 노출된 인터페이스(interface)를 통해서만 사용할 수 있게하는 개념
상속(inheritance)
하나의 객체는 자신의 class에 속해 있는 특성과 행위를 모두 물려받는다.
다형성(polymorphism)
다른 class인데 같은 이름의 행위를 가지게 되는 경우
사용자가 정의하는 하나의 data type
생성자(constructor), 소멸자(destructor), 상수(constant), 필드(field), 메소드(method), 속성(property), 인덱서(indexor), 연산자(operator) 등을 멤버로 포함
class 의 정의
class의 특성은 member field와 property로 구현
상수 : 값이 변할 수 없는, 항상 같은 값
static field
static method 처럼 객체의 member가 아닌 class의 member
static constructor를 통해 초기화 가능
데이터 형식 끼리 변환해야하는 필요가 발생
하나의 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를 검사할 수 있다.
명시적 형변환시 연산도중 발생할 수 있는 stack overflow를 검사하는 연산자
이를 통해 현재의 형변환이 안전한지를 검사할 수 있다.
처리되지 않은 'System.OverflowException' 형식의 예외가 ConApp5.exe에서 발생했습니다.
추가 정보: 산술 연산으로 인해 오버플로가 발생했습니다.
checked 연산자를 통해 실행시 발생하는 문제를 미리 점검할 수 있다.
value type 을 reference type 으로 묵시적으로 변환
reference type 을 value type 으로 명시적으로 변환
열거자(enumerator)란 이름이 부여된 일련의 정수 상수로 구성되는 데이터 타입
열거자의 값은 기본적으로 0으로 시작하여 1씩 증가
값을 바꿀 수 있는데, 한 값을 바꾸면 다음 열거자부터는 바뀐값에서 1씩 증가
default type 은 int 이며 char를 제외한 정수형 타입(byte, sbyte, short, int, uint, long, ulong)의 지정이 가능
열거형 정의
열거형 사용
대문자로 표시
value type
사용자 정의 데이터 타입을 정의하는데 사용
일반적으로 여러개의 필드를 포함하는 복합 데이터 타입(composite data type)을 정의하기 위해 사용
공개필드 멤버로만 포함하는 것이 일반적
생성자를 가질 수 있다.
이때 default 생성자는 재정의할 수 없으며, 반드시 파라메터가 있는 생성자이어야 한다.
구조체 정의
구조체 사용
