[기획서]

01234567891011121314151617181920212223242526272829303132333435


[마일스톤]


[진행상황]


'Project > 라그나로크' 카테고리의 다른 글

라그나로크 작업일지  (0) 2016.09.28

 





16_08_17


작업내용

- 아이템 상세 내용

- 아이템 정보 입력 프로그램 제작 30%


16_08_18


작업내용

- UI관련 리소스 50% 완료

- 아이템 정보 입력 툴 40% 완료


16_08_19

작업내용
- 리소스 60% 완료
- UI 참조 소스 분석


16_08_20

작업내용
- UI 참조 소스 분석
- ItemNode 및 ItemMgr 설계


16_08_21

작업내용
- UI 참조 소스 참조 하여 UI 구현
- ItemNode 및 ItemMgr 구현


16_08_22

작업내용
- 인벤토리 화면 구현 및 포커싱 처리


16_08_23


작업내용

- 장비창, 기본정보 창 UI 형태 구현


16_08_24


작업내용

- 상점, 스탯상세정보 UI 형태 구현


16_08_29

작업내용
- 인벤토리 내부구현

16_08_30

작업내용
- 인벤토리 저장 및 수량 감소
- 인벤토리 내용 삭제 구현
- 상점 저장 부 구현 30%

16_08_31


작업내용

- 더미데이터를 사용한 기본정보 및 스텟 구현 100% 

- 인벤토리 변경 및 이동 가능하도록 수정 중 20%


16_09_01


작업내용

- 인벤토리에 있는 아이템 간의 이동 구현 ( 80% )


16_09_02


작업내용

- 장비 착용

- 착용 장비에 따른 스탯 계산


16_09_04


작업내용

- 상점 구매 판매 구현

- 옵션창 구현

 



 시간과의 싸움이 되는 팀 포트폴리오의 개인일정 진행.... 

 



'Project > 라그나로크' 카테고리의 다른 글

라그나로크 기획서  (0) 2016.09.28

[수도코드]



[손코딩]



'Project > 콘솔프로젝트' 카테고리의 다른 글

콘솔게임 마인드맵  (0) 2016.09.28

[숫자야구]






[짝맞추기]



[빙고게임]

'Project > 콘솔프로젝트' 카테고리의 다른 글

도서관리 - 회원가입  (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


'프로그래밍 > 프로그래밍 기초' 카테고리의 다른 글

메모리 구조  (0) 2016.03.23
메모리 관리기법  (0) 2016.03.21

 상수 포인터 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 / 학원



'언어 > C' 카테고리의 다른 글

배열  (0) 2016.03.25
표준함수  (0) 2016.03.19
기억부류  (0) 2016.03.19
함수와 프로시저  (0) 2016.03.18
연산자  (0) 2016.03.14

 배열의 정의



배열은 동일한 타입을 가지는 변수들의 유한 집합
- 배열의 기본형식
- type 배열명[크기][크기]....;
- 배열명은 배열의 이름이고 [] 괄호 사이에 있는 값은 몇 개의 단위가 묶여서 구성하는지 지정하며 자연수로된 상수만 적어야 한다.

 



 배열의 특징


  1. 배열의 요소의 번호인 첨자는 항상 0부터 시작한다(Zero Base)
    - 컴퓨터의 첫번째 시작은 항상 0이다.
    - int a[5]; 라고 선언된 배열의 시작은 0~4 ( n-1 )의 번호이다.

  2. 배열의 총 메모리 양은 배열의 크기에 배열의 요소의 크기를 곱해서 구할 수 있다
    - sizeof(타입) * 정수(크기, 갯수)
        예시> int a[5]; => sizeof(int) * 5 => 4byte * 5 => 20byte
    - 배열의 크기 = sizeof(배열) / sizeof(배열[0])
        예시> sizeof(int a[5])/sizeof(a[0]) => 20byte / 4byte => 5개

  3. 배열을 선언 시 크기값은 반드시 상수 이어야 한다.
    - 배열의 생성 시는 상수를 입력해 주어야 하지만,
      생성 이후에는 i라는 int형 변수값을 첨자로 사용할 수 있다.

  4. 배열의 범위를 점검하지 않는다.
    - int ar[5]; 로 정해져 있는 경우 int a[8]; 이면 컴파일은 되지만 정상적인 실행은 되질 않는다.
        그렇기 때문에 보통은 반복문을 이용해서 배열의 범위만큼만 루프를 돌도록 해주면 배열의 범위를 벗어나지 않는다.
    - for (i=0;i<5;i++)
      {
        if( i>=0 && i< 5)
       {
            x += a[i];
       }
    }
     


 다차원 배열



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]={{1,3},{4,5,}};

초기값이 남으면

에러로 처리
int a[2][3]={{1,2,3},{4,5,}};

배열크기를 생략하면

개수만큼 자동으로 크기 설정
int a[][2]={{1,2},{3,4},{5,6}};



 



 배열의 활용



불규칙한 정보를 담아 그걸 표현하는 형태로 활용이 가능하고 난수로 생성한 좌표를 배열에 저장해 놓고 필요할 떄 사용할 수 도 있다.
작업 결과를 저장하는 데에도 사용하게 된다. 

 


 


 배열은 동일한 타입의 유한한 집합

 다차원 배열을 사용할 수 있으며 int a[2][3]의 경우 정수용 변수 3개의 묶음이 2개가 있는 것이라고 볼 수 있다.

 

출처 : soen.kr



'언어 > C' 카테고리의 다른 글

배열과 포인터 그리고 문자열  (0) 2016.04.19
표준함수  (0) 2016.03.19
기억부류  (0) 2016.03.19
함수와 프로시저  (0) 2016.03.18
연산자  (0) 2016.03.14

메모리 구조

  • CODE(TEXT) SEGMENT
  • HEAP SEGMENT ( L -> H )
  • FREE SEGMENT
  • STACK SEGMENT (H->L) 후입선출
  • DATA SEGMENT ( L -> H )

- Initialized Data Segment

- BSS(Block Started by Symbol)

(전역(extern), 정적변수 0으로 자동 초기화)

위와 같은 변수들은 초기화를 안할 경우에 문제가 생길 수 있기 때문에 존재한다.

High Address

Low Address

 

코드(텍스트) 영역 ( Code(Text) Segment )

  • 코드 자체를 구성하는 메모리 영역

 

  • Hex 파일이나 Bin 파일 메모리

 

  • 프로그램 명령이 위치하는 곳으로 기계어로 제어되는 메모리 영역

 

  • " 문자열 상수를 제외한 지역변수에 할당 "되는 리터럴 상수가 기계어로 저장

 

  • 알고가자!!!
    문자열 상수( "홍길동" ) => Data Seg\Rom 영역
    선언된 지역에 따라 메모리 영역이 다르다.

 

데이터 영역 ( Data Segment )

  • 전역변수와 정적(static) 변수 중 초기화가 할당된 변수가 저장되는 영역

 

  • 변수는 RAM에 저장( Read & Write )

 

  • 변수에 대입하는 초기값은 ROM에 저장

 

  • ROM에 저장된 변수 생성시 복사하여 변수에 할당

 

  • 할당하는 초기값 중 문자열 상수를 제외한 리터럴 상수는 컴파일러에 따라 코드영역에서 복사는 경우도 있다.

 

  • 데이터 영역 - BSS< Block Started by Symbol >
    전역변수 또는 정적 변수 중 초기값이 할당되지 않은 변수가 저장되는 영역

 

  • 메모리를 생성하지 않고 상징적인 변수의 이미지(상징)만 존재

 

  • 프로그램 시작 시 BSS에 저장된 변수들은 0으로 초기 값을 대입

 

  • Data영역으로 이동 / 메모리는 RAM에 할당. 즉, 상징적으로만 존재하는 영역

 

힙 영역 ( Heap Segment )

  • 런타임에 할당하는 동적 메모리가 위치하는 영역

 

  • 크기는 정형화 되어 있지 않고 유동적이고 Free 영역에 가변적으로 크기를 확장

 

  • 동적 할당한 메모리는 식별자(명칭)가 존재하지 않으므로 포인터 변수를 사용해서 접근가능

 

  • 메모리는 낮은 주소에 높은 주소로 할당

 

  • 메모리가 부족할 경우 할당이 실패하여 NULL을 반환

 

  • 런타임에 BSS와 HEAP 사이를 기준 으로 HEAP은 아래로 순차적으로 메모리를 사용한다

 

  • 포인터 변수는 각 지역의 특성에 영향을 받아 생성하고 참조하는 메모리가 HEAP에 존재

 

자유 영역 ( Free Segment )

  • 힙영역과 스택영역의 완충지 역할

 

  • 두 영역이 유동적 일 수 있는 것은 자유영역에 해당 영역의 크기 확장할 수 있다.

 

  • 스택 영역이 Free 영역을 침범해서 Heap 영역을 침범할 경우 StackOverFlow

 

  • 반대의 경우에 Heap 은 NULL 을 리턴

 

스택 영역 ( Stack Segment )

  • 프로그램이 실행 시 자동으로 사용하는 임시 메모리 영역

 

  • 크기는 정형화 되어 있지 않고 유동적이며 Free 영역에서 가변적으로 크기 확장이 가능

 

  • 기본적으로 약 1MB의 크기로 할당

 

  • 지역 변수, 매개 변수, 리턴 값 등 잠시 사용 후 사라지는 유형의 데이터가 저장 되는 영역

 

  • 메모리는 높은 주소에서 낮은 주소로 할당 되며 메모리 부족 시 StackOverFlow 발생

 

메모리 구조는 6가지로 구분된다.
CODE, DATA, BSS, HEAP, FREE, STACK

출처 :

'프로그래밍 > 프로그래밍 기초' 카테고리의 다른 글

바인딩과 바인딩 타임 그리고 할당  (0) 2016.04.21
메모리 관리기법  (0) 2016.03.21


가상 메모리 ( Virtual Memory )

  • 주기억 장치인 RAM 의 실제 물리적인 공간 외에 하드 디스크 (보조기억장치) 에 부족한 시스템 메모리를 보조해 주는 역할

  • 새로운 프로세스가 실행되어 실제 메모리의 공간이 부족하면 휴면상태인 프로세스를 임시 공간인 가상메모리로 보낸 후에 새로운 프로세스를 실행하게 된다.

  • 실제 메모리와 가상 메모리 사이로 데이터를 옮기는 과정이 추가 되어 시스템이 느려지는 원인이 될 수 있습니다. 이유는 램에 비해 디스크의 속도면에서 차이가 나기 때문이다

  • 그렇기 때문에 가상 메모리는 되도록 사용 안하는 것이 좋다. 그만큼 실제 메모리 (RAM) 의 용량이 충분해야 할 필요가 있을 것이다. 일부의 프로그램에서 메모리 공간이 부족하지 않더라도 가상 메모리를 사용하는 경우도 있으니 참고하기 바랍니다.

  • 가상 메모리 관리
  1. 가장 빠른 디스크에 설정하는 것이 좋다.
    SSD에 윈도우와 가상 메모리가 위치해 있는 경우 분리를 위해 HDD로 옮기게 되면 엑세스 부하를 줄여 얻는 이득에 비해 엑세스 속도 저하로 인한 손해가 큽니다.

  2. 램 용량이 충분하면 가상메모리는 아예 없애는 것이 좋다.
    일부 소수의 프로그램들이 가상메모리를 사용하는 경우가 있기 때문에 최소한으로만 설정하여 사용하는 것이 좋다.

  3. 가상 메모리는 고정된 크기로 설정하는 것이 좋다.
    자동의 경우에는 계속해서 늘어나는 경우도 생길 것이고 잘못된 고정값을 설정하게 되면 부족한 현상이 발생될 수 있습니다. 따라서 자신에 사용에 맞게 설정하는 것이 가장 좋습니다.

  4. 나에게 적당한 가상 메모리 용량은 얼마일까?
    가상 메모리 크기를 64비트 기준으로 최소값인 16MB로 설정 후 최대 크기는 여유 있게 지정합니다. 그 이후에 재부팅 후 변화를 적용하고 평상시 사용하는 프로그램들을 실행해 봅니다.
    가상 메모리 설정 창에서 확인하면 사용한 만큼 늘어나 있을 것이고 그렇지 않다면 RAM의 용량이 충분하다는 것입니다. 평균적인 가상 메모리 크기를 알아낸 뒤에는 1.2~1.5배의 여유를 둔 가상 메모리를 설정합니다.

  5. 가상 메모리는 사용되지 않을 수록 좋다
    주기억장치에 비해 보조기억장치의 속도는 전투기와 거북이 수준으로 차이가 납니다.
    따라서 램 용량은 자신의 현재 원하는 작업 수준 보다 한단계 높은 수준으로 셋팅 해주는 것이 좋습니다. 그래야 가상 메모리 사용을 줄이거나 없앨 수 있기 때문입니다.


페이징 ( Paging )

  • 내용








세그먼테이션 ( Segmentation )

  • 내용








제목

  • 내용







내부 단편화

  • 내용








외부 단편화

  • 내용








결론

내용

내용

출처 : 



'프로그래밍 > 프로그래밍 기초' 카테고리의 다른 글

바인딩과 바인딩 타임 그리고 할당  (0) 2016.04.21
메모리 구조  (0) 2016.03.23

+ Recent posts