[기획서]
[마일스톤]
[진행상황]
'Project > 라그나로크' 카테고리의 다른 글
라그나로크 작업일지 (0) | 2016.09.28 |
---|
[기획서]
[마일스톤]
[진행상황]
라그나로크 작업일지 (0) | 2016.09.28 |
---|
16_08_17
작업내용
- 아이템 상세 내용
- 아이템 정보 입력 프로그램 제작 30%
16_08_18
작업내용
- UI관련 리소스 50% 완료
- 아이템 정보 입력 툴 40% 완료
16_08_23
작업내용
- 장비창, 기본정보 창 UI 형태 구현
16_08_24
작업내용
- 상점, 스탯상세정보 UI 형태 구현
16_08_31
작업내용
- 더미데이터를 사용한 기본정보 및 스텟 구현 100%
- 인벤토리 변경 및 이동 가능하도록 수정 중 20%
16_09_01
작업내용
- 인벤토리에 있는 아이템 간의 이동 구현 ( 80% )
16_09_02
작업내용
- 장비 착용
- 착용 장비에 따른 스탯 계산
16_09_04
작업내용
- 상점 구매 판매 구현
- 옵션창 구현
시간과의 싸움이 되는 팀 포트폴리오의 개인일정 진행....
[숫자야구]
[짝맞추기]
[빙고게임]
도서관리 - 회원가입 (0) | 2016.09.28 |
---|
절차지향 프로그래밍
- 큰 문제를 작은 문제 단위로 쪼개어 순차적으로 진행되는 형태
객체지향 프로그래밍
- 기능 단위로 구분하여 각 기능들을 조립하여 하나의 프로그래밍을 만드는 형태
등장배경
하드웨어가 빨라지고 대용량화 되는 시기에 소프트웨어가 하드웨어의 성장을 따라가기 힘든 상황이 발생하였고 그 상황이 바로 소프트웨어의 위기이다
그에 따라 소프트웨어의 대응책으로 여러 가지 개발방법이 생겨 났고 그 중에 가장 탁월한 기법인 객체지향적 프로그래밍(Object Oriented Programming)방식이다
객체지향적 프로그래밍(Object Oriented Programming) 특징
캡슐화 ( Encapsulation )
- 데이터와 기능을 하나의 단위로 묶는 과정
Why?
- 독립적이며 프로그램의 부품으로 활용
정보 은폐 ( Information Hiding )
- 외부에서 사용하는 기능만 제공하고 나머지는 숨기는 것
Why?
- 객체의 손상을 방지하기 위해서
추상화 ( Abstraction )
- 캡슐화와 정보 은폐를 통해 외부의 사용자에게 제공하는 인터페이스를 설계하는 과정
Why?
- 객체의 효율적이고 안전한 사용을 위해서
상속 ( Inheritance )
- 추상화를 통해 만들어진 기본 클래스 ( Based Class )를 기반으로 모든 속성이나 기능을 물려 받아 새로운 클래스를 만드는 것. ( 파생 클래스 : Derived Class )
Why?
- 필요한 기능을 추가 / 변경 / 제거 하여 새로운 클래스를 만들 수 있기 때문에
다형성 ( Polymorphism )
- 똑같은 호출이라도 상황에 따라 같거나 다른 동작을 수행 하는 것.
Why?
- 코드의 일관성
접근지시자 ( Access Specifier )
- 클래스 멤버들의 허용 범위를 지정하는 것
-
클래스의 기본 접근권한은 private
|
클래스 내부 |
상속 클래스 |
외부 클래스 |
public |
가능 |
가능 |
가능 |
protected |
가능 |
가능 |
불가능 |
private |
가능 |
불가능 |
불가능 |
바인딩 ( Binding )
일반적으로 속성과 개체 사이 또는 연산과 기호 사이와 같은 연관 ( Association )
변수에 변수와 관련된 속성을 연관시키는 것
값들이 확정이 되어 구속(Bind) 된 상태
함수 호출된 부분에서 함수가 위치한 메모리 번지를 연결
바인딩 타임 ( Binding Time )
프로그램에서 변수들이 갖는 속성이나 값이 완전히 결정되는 시간.
이름에 속성이 연결되는 시간
바인딩 타임의 종류 ( Variety of Binding Time )
1. 언어 정의 시간 ( Language Definition Time )
언어에서 허용되는 대부분의 자료구조나 프로그램 구조 등을 확정.
ex) int를 정수형으로 나타낸다고 정의
2. 언어 구현 시간 ( Language Implementation Time )
언어를 정의할 때 이루어 지는 형태(표현 자리 수, 범위, 크기 등이 정해짐)
렉싱 ( Lexing ) : 키워드를 문법대로 자르는 것
ex) int a 를 4바이트로 결정, int, char 등 사전에 정의된 키워드를 렉싱
3. 컴파일 시간 ( Compile Time )
원시프로그램 을 번역할 때 이루어지며 . Data, Stack 등 메모리에 들어갈 변수가 정해짐.
정적바인딩, 변수의 이름 또는 형과 프로그램 문장 구조
고레벨 언어를 Binary File , Obj 파일로 전환
작동) Obj 파일로 변환하는 과정에서 코드가 문법에 맞는지 검사 (Parsing)
4. 링크 시간 ( Link Time )
프로그램을 라이브러리와 링크할 때 이루어 지는 형태
사용 가능성을 조사하고, 라이브러리와 모듈을 합친다.
5. 적재 시간 ( Load Time )
변수를 메모리 로 적재할 때 (주소가 결정됨)
운영 체제에서 메모리로 프로그램을 불러와 실행
6. 실행 시간 ( Run Time )
프로그램을 실행 할 때 이루어지며 변수의 값을 확정
변수의 기억장소 할당
실행 부터 종료 까지 변수 값을 바인딩
정적 바인딩 ( Static Binding )
실행 시간 전에 일어나고, 실행 중에 변하지 않는 상태로 유지되는 바인딩
ex) int a; // 정수 타입(Integer Type)을 이름 'a'에 정적으로 바인딩
동적 바인딩 ( Dynamic Binding )
실행 시간 ( Run-Time ) 중에 일어나거나 프로그램 실행 과정에서 변경되는 것
(정적 바인딩한 변수들도 실행 중에 변경 되면 동적 바인딩이다)
ex) int * ptr = malloc( sizeof(int) * 10 );
할당 ( Allocation )
기억장소 할당 : 변수에 메모리 공간을 바인딩( Binding )하는 과정
정적 할당 ( Static Allocation )
메모리 에 적재될 크기를 미리 아는 것
Run-Time 에 각 타입에 맞는 메모리 영역 ( Segment ) 에 할당
동적 할당 ( Dynamic Allocation )
외부환경에 의해 변화하여 크기를 미리 알 수 없는 것
명시적인 명령어에 의해 실행되는 할당
동적할당이 공간은 힙영역( Heap Segment )
포인터나 참조 변수를 통해 접근이 가능
바인딩, 바인딩의 종류, 할당에 대해 알아보았다
바인딩은 변수의 값이 실제 값과 묶이는 것이며 묶인 속성과 값이 완전히 결정되는 시간이 바인딩 타임이다.
할당에는 정적할당과 동적할당이 있다.
출처 : http://wookss-blog.tistory.com/6 / http://people.cs.clemson.edu/~turner/courses/cs428/summer00/webct/content/pz/ch2/ch2_5.html
상수 포인터 int * const p
int * const p
포인터 자체가 상수화 된다.
주소는 변경이 불가능하고, 가리키는 곳의 값은 역참조로 변경이 가능
상수 지시 포인터 const int *p
포인터가 지시하는 곳의 값을 상수화 시킨다
주소는 변경이 가능하지만, 가리키는 곳의 값은 역참조로 변경이 안된다.
char *name = "홍길동"
*name='a'; 오류
상수 지시 상수 포인터 const int * const p
포인터 변수와 가리키는 곳은 상수화
주소와 가리키는 곳 모두 변경이 불가능
포인터 상수 ( 배열포인터 ) int arr[5]
배열 포인터라고도 부르며 상수 포인터와 비슷한 의미
배열명만 포인터 상수라 부른다
일반 포인터의 경우 4바이트에 메모리를 가지지만
배열의 경우 메모리를 가지고 있지 않고,
찾아가기 위해 존재하는 상징적인 포인터
arr = &num <= 에러존재
배열명의 의미
포인터 상수이기 때문에 l-value에 위치 불가능
일반 포인터와 다르게 메모리 공간을 따로 미할당
배열의 첫번째 요소의 주소를 상직적으로 표현
l-value에 위치하지만 않으면 일반포인터의 모든 연산 수행 가능
배열포인터라 불림
배열로 선언된 지역의 메모리 공간을 대표하는 상징 (모배열)
포인터 배열과 배열 포인터
포인터 배열
각각의 요소가 포인터로 이루어진 배열
int *arr[5]
배열 포인터
int형 타입이 5개로 이루어진 배열을 지시하는 포인터
int (*arr)[5]
문자열
문자열? NULL(숫자 0, '\0') 으로 끝나는 char 타입의 데이터 집합
문자배열 : char name[5]={'a','b','c','d','e'}
| 'a' | 'b' | 'c' | 'd' | 'e' |
문자열 : char name[5]="abcde"
| 'a' | 'b' | 'c' | 'd' | 'e' | '\0' |
위 같은 경우 문자열은 끝에 NULL('\0') 문자가 삽입
문자열 상수와 문자열
문자열 상수인 char *name = "abcd" 인 경우
name이라는 이름을 가진 하나의 포인터가 "abcd"라는 문자열 상수를 가리키게 된다
따라서 상수를 참조하게 되므로 문자열 수정이 불가능
문자열인 char name[5]="abcd"인 경우
메모리를 직접 할당한 문자열. 즉, 배열참조형식 이므로 문자열수정이 가능
문자열 함수
strlen : NULL을 제외한 길이를 구하는 함수
원형 : size_t strlen( const char *str )
- str에서 NULL을 제외한 길이를 구하는 함수
strcpy : 문자열 복사 함수
원형 : char *strcpy( char* dest , const char *src )
- dest에 src를 복사하는 함수
strcat : 문자열 결합 함수
원형 : char *strcat( char* dest , const char *src )
- dest와 src를 결합하는 함수
strcmp
원형 : int strcmp( const char *dest, const char *src )
- dest와 src를 비교
이외에 여러가지지가 있으나 위에 4가지가 많이 쓰인다.
포인터 배열과 배열 포인터의 차이를 알고 포인터를 상수화하는 방법을 알아보았다
포인터 배열 말 그대로 포인터로 이루어진 배열이고 배열 포인터는 배열을 가리키는 포인터
상수 지시 포인터와 상수 포인터를 정확히 알고 쓰자!!
출처 : soen.kr / 학원
배열의 정의
배열은 동일한 타입을 가지는 변수들의 유한 집합
- 배열의 기본형식
- type 배열명[크기][크기]....;
- 배열명은 배열의 이름이고 [] 괄호 사이에 있는 값은 몇 개의 단위가 묶여서 구성하는지 지정하며 자연수로된 상수만 적어야 한다.
배열의 특징
다차원 배열
2차원 배열은 [] 첨자 두 개를 사용하는 배열이고 차원이 늘어날 수록 [] 첨자 연산자가 늘어날 수록 차원이 높아진다.
int apple[3][6]; 정수형 변수 6개가 3개의 묶음으로 생성 된다. 생성되는 배열 요소는 6 * 3 = 18개를 apple 이라는 배열명으로 선언한 것.
Apple[0][0] |
Apple[0][1] |
Apple[0][2] |
Apple[0][3] |
Apple[0][4] |
Apple[1][0] |
Apple[1][1] |
Apple[1][2] |
Apple[1][3] |
Apple[1][4] |
Apple[2][0] |
Apple[2][1] |
Apple[2][2] |
Apple[2][3] |
Apple[2][4] |
이 배열이 메모리상에 생성된 모양을 그려보면 위와 같다. 하지만 메모리는 선형적인 구조이기 때문에 이해를 돕기위해 위와 같이 그려서 관리할 뿐 실제로는 일직선으로 연결 되어 있다.
배열명은 단독으로 사용되는 배열의 시작번지값을 가지는 포인터 상수이다.
즉, 배열명만 쓰면 배열의 시작번지를 가리키는 포인터 값이 된다.
배열 초기화
배열은 여러 변수들의 집합이며 정수형 변수나 실수형 변수와 자격은 동일하며 변수에 적용되는 규칙이 배열에서 똑같이 적용된다.
배열의 부류 지정자도 일반 변수와 동일하며 효과 또한 동일하다.
int apple[5]; 와 같이 초기화를 하지 않을 경우 쓰레기 값이 들어가게 된다.
type 배열명[크기]={초기화값들};
int apple[5] = {4,8,3,69,-7};
위와 같이 선언과 동시에 초기화를 메모리를 할당 받음과 동시에 초기화 값들로 메모리를 채운다.
초기식 int number[1000] = {1,2,3,0,0,............... }
즉 비어 있는 초기화의 경우 995개가 다 0으로 채워진다
배열 크기와 초기값이 |
결과 |
꼭 맞으면 |
만사형통 / int a[2][2]={1,2,3,4}; |
초기값이 모자라면 |
나머지는 0 |
초기값이 남으면 |
에러로 처리 |
배열크기를 생략하면 |
개수만큼 자동으로 크기 설정 |
배열의 활용
불규칙한 정보를 담아 그걸 표현하는 형태로 활용이 가능하고 난수로 생성한 좌표를 배열에 저장해 놓고 필요할 떄 사용할 수 도 있다.
작업 결과를 저장하는 데에도 사용하게 된다.
배열은 동일한 타입의 유한한 집합
다차원 배열을 사용할 수 있으며 int a[2][3]의 경우 정수용 변수 3개의 묶음이 2개가 있는 것이라고 볼 수 있다.
출처 : soen.kr
메모리 구조
- Initialized Data Segment
- BSS(Block Started by Symbol)
(전역(extern), 정적변수 0으로 자동 초기화)
위와 같은 변수들은 초기화를 안할 경우에 문제가 생길 수 있기 때문에 존재한다.
High Address
Low Address
코드(텍스트) 영역 ( Code(Text) Segment )
데이터 영역 ( Data Segment )
힙 영역 ( Heap Segment )
자유 영역 ( Free Segment )
스택 영역 ( Stack Segment )
메모리 구조는 6가지로 구분된다.
CODE, DATA, BSS, HEAP, FREE, STACK
출처 :
바인딩과 바인딩 타임 그리고 할당 (0) | 2016.04.21 |
---|---|
메모리 관리기법 (0) | 2016.03.21 |
가상 메모리 ( Virtual Memory )
페이징 ( Paging )
세그먼테이션 ( Segmentation )
제목
내부 단편화
외부 단편화
결론
내용
내용
출처 :
바인딩과 바인딩 타임 그리고 할당 (0) | 2016.04.21 |
---|---|
메모리 구조 (0) | 2016.03.23 |