2014년 8월 28일 목요일

관리자 권한 프로그램 빌드

관리자 권한을 갖는 프로그램을 만들어야 할 때가 있습니다.
커널을 다루거나 하는 시스템 소프트웨어 등이 그렇지요.
visual studio 2010에서 프로그램을 build할 때 관리자 권한을 설정하도록 할 수 있습니다.

속성 -> 링커 -> 메니페스트 파일 -> UAC 실행 수준 : requireAdminitrator(/level='requireAdminitrator)




Visual Studio 2008부터 설정 가능한 것으로 알고 있습니다.

2014년 8월 21일 목요일

C 언어


C 프로그래밍 언어 포스트를 준비합니다.

주요 포스트 주제는 다음과 같습니다.


C언어에 대해서
  • C언어의 유래
  • C언어 컴파일러


한눈에 보는 C 코딩
  • 프로그램의 시작
  • 문장의 구성
  • 블럭
  • 주석문


변수의 이해
  • 변수의 정의
  • 데이터 타입


문자열


사용자 정의 데이터 타입
  • 배열
  • 구조체
  • 열거형
  • 유니온


포인터
  • 포인터의 이해
  • 포인터 연산


함수의 이해
  • 함수의 정의
  • 함수 프로토 타입
  • 함수 파라메터
  • 함수 포인터


연산자의 이해
  • 연산자 특징
  • 대입 연산자
  • 산술 연산자
  • 논리 연산자
  • 비트 연산자
  • 포인터 연산자
  • 기타 연산자


선택과 분기
  • if 문
  • switch 문


순환문
  • for문
  • while 문
  • do while문


선행처리 지시자
  • #include 포함문
  • #define 매크로
  • #if 선택적 컴파일

2014년 8월 19일 화요일

변수의 특징



변수는 다음과 같은 특징이 존재합니다.

  • 변수의 이름(Name) : 변수를 나타내는 이름으로써 메모리상의 주소로 연결
  • 변수의 형식(Type) : 변수에 저장될 값의 종류(Data Type)
  • 변수의 값(Value) :  변수에 할당되어 저장될 값


따라서, 일반적으로 프로그래밍할 때, 변수를 정의(선언)하면, 위 세가지 요소를 정의한다고 보면 됩니다.

변수 선언 예) data_type variable_name = value

  • data_type : 변수의 형식, 값의 종류와 메모리 공간 크기를 정의함
  • variable_name : 변수의 이름, 변수가 위치하는 메모리 공간으로 메핑됨
  • value : 변수의 값, 변수에 값이 할당됨


변수의 이름(Name)

변수의 이름은 사용하는 프로그래밍 언어에서 규정하는 이름정의 규칙(Naming rule)을 사용합니다. 그러나 키워드(Key word)나 연산자(Operator), 그리고 예약어(Reserved word)는 변수명으로 사용할 수 없습니다. 변수명은 변수의 사용 용도나 성격에 맞는 적절한 이름을 선언하는 것이 좋습니다.
모든 메모리는 Byte 단위로 주소가 지정되어 있습니다. 즉, 컴퓨터 시스템에 설치된 4GB 또는 8GB 등의 메모리는 바이트 단위로 주소가 정해져 있으며, OS가 관리하게 됩니다. 변수를 선언하게 되면, OS에게 변수의 데이터형 크기에 맞는 메모리 공간을 요청하게 되고, OS는 메모리를 할당해서 프로그램에게 그 주소를 알려주게 됩니다. 프로그램은 변수의 이름을 이용해서 메핑된 메모리 주소에 접근하게 됩니다.

변수의 형식(Data type)

변수를 선언할 때, 변수 타입을 표기하게 됩니다. 변수 타입은 프로그래밍언어가 제공하며, 타입에 의해 두 가지 추가 속성이 정의 됩니다.
메모리 크기 : 각 타입에 따라 변수가 사용할 수 있는 메모리 크기가 정해져 있습니다. 또한 사용하는 OS 플랫폼에 따라 변수의 메모리 크기가 달라지기도 합니다. 예를 들어, x86 intel CPU 기반에서는 정수형(Integer) 타입의 크기는 4Bytes(32Btis)를 사용합니다. 하지만, x64 intel CPU에서는 8Bytes(64Bits)를 정수형으로 사용합니다. 프로그래밍 언어에서 제공하는 기본 변수형이 어느정도 공간을 사용하는지는 예측해서 프로그램해서는 안되며, 반드시 적절한 연산자나 함수를 사용하여 그 크기를 알아내야 합니다. C언어 또는 C++에는 sizeof 연산자를 사용하여 변수형의 크기를 알 수 있습니다.
예) int nSize = sizeof(int);
값의 형식 : 컴퓨터가 다루는 데이터 형식에는 다양합니다. 정수형, 실수형, 문자형, 그리고 사용자 정의 형식까지 매우 많습니다. 변수의 타입으로 정의된 변수가 다룰 값의 형이 결정됩니다. 값의 종류가 무엇이냐에 따라 변수를 이용한 연산의 종류도 달라집니다.

변수의 값(Value)

선언된 변수에 값을 할당할 수 있습니다. 값은 변수의 형식에 따라 의미가 달라집니다. 예를 들어, 데이터 타입이 문자형(Char)인 변수에는 문자 데이터 값이 들어가고, 주소를 다루는 포인터형 변수에는 메모리 주소 값이 할당됩니다.
위에서, 변수에는 크기가 있다고 했습니다. 제한된 크기에 더 큰 값을 넣을 수 없듯이 변수에 값을 할당할 때는 변수의 메모리 크기보다 작은 값인지 주의해야 합니다. 만약, 정수형 변수의 메모리 크기가 4Bytes라면, 값은 0 ~ 232 - 1 범위의 값을 다룰 수 있습니다.

2014년 8월 14일 목요일

OOP 특징

객체지향프로그래밍(OOP : Object Oriented Programming)에 대해서 알아봅니다.

목적하는 기능을 수행하기 위해 데이터(Data)를 정의하고, 알고리즘(Algorithm)을 만들어 가는 과정이 프로그래밍 입니다. 즉, "Program = Data + Algorithm" 입니다. 
OOP는 프로그램하고자 하는 목표에 대한 모델링을 매우 중요하게 생각합니다. 목표를 객체(Object)로 보면서 객체의 속성과 기능을 분석하고, 외부와의 관계는 어떠한지 등에 대해 모델링을 하는 거죠. (과거 절차적 프로그래밍 언어는 수행절차 즉 알고리즘을 중요하게 다루었습니다.)

OOP의 유래

...

OOP 언어의 종류

  • C++
  • Java
  • C#


OOP의 특징

... 

OOP의 장단점

...





2014년 8월 12일 화요일

Java 코드 형식

Java 프로그램을 작성하기 위해서 Java 소스 코드를 작성하고, .java로 저장해야 합니다. Java 소스 코드 파일은 일반적으로 다음과 같이 구성됩니다.


public class class_name
{
  void func1()
{
statement1;
statement2;
:
}

void func2()
{
statement1;
:
statementn;
}
}

모든 Java 소스 파일은 클래스(class)를 정의하는 것으로 시작됩니다. 클래스는 Java 객체를 생성하기 위한 일종의 템플릿으로써, JVM에 의해 객체 생성 방법을 알려주는 중요한 역할을 합니다.
클래스 안에 메소드(Method)를 기록합니다. 메소드는 클래스의 특정 동작을 수행할 수 있는 일종의 함수입니다.

작성된 Java 소스 코드는 클래스 이름과 동일한 파일 이름으로 저장되며, 확장자는 .java를 갖게 됩니다.(ex. class_name.java)

2014년 8월 11일 월요일

Java 개발 환경

Java를 이용해서 프로그램 개발 하기 위해서 JDK(Java Development Kit)을 설치해야 합니다. 또한, Java 소스코드의 편집과 컴파일, 그리고 실행화면을 보기 위해 console을 사용할 수도 있지만, 통합개발환경(IDE : Integration Development Envirment)를 제공하는 이클립스(Eclipse)를 사용하면 보다 편하게 개발을 수행할 수 있습니다.

먼저, JDK를 설치합니다. JDK는 오라클 사이트에서 받을 수 있습니다. 현재는 Java 8.0(Java 1.8) 버전이 공개되어 있으며, 최신 버전의Java 8.0 버전을 다운로드(Java SE 8.0 download) 받을 수 있습니다.



download 받은 JDK를 실해해서 시스템에 설치합니다.


이제, Eclipse.org에서 이클립스 최신 버전을 다운로드 합니다. 이클립스 최신 버전인 LUNA를 다운로드(Eclipse Luna 4.4 download) 합니다.


다운로드 받은 이클립스는 zip 형태로 압축되어 있습니다. 적절한 폴더에 압축을 해제합니다. JDK 또는 일반적인 윈도우 프로그램과 다르게 압축을 해제하면 별도의 설치 과정 없이 바로 eclipse를 실행할 수 있습니다. 압축이 해제된 폴더에 보면, "eclipse.exe" 파일이 실행 파일입니다.

2014년 8월 10일 일요일

Java 가상머신



Java와 크로스 플랫폼

Java는 크로스 플랫폼(Cross-platform) 프로그래밍 언어입니다. 다시 말하면, Java를 이용해서 만든 프로그램은 어떤 플랫폼에서나 동일하게 동작한다는 이야기입니다. 이것은 매우 중요한 특징입니다. 예를 들어, Microsoft Windows 운영체제를 사용하는 컴퓨터에서 개발된 프로그램은 Unix 또는 Mac OS에서는 실행되지 않습니다. 특정 운영체제 또는 CPU 아키텍쳐에서 개발된 소프트웨어는 해당 플랫폼에서 사용되는 명령어 기반으로 바이너리가 생성되기 때문입니다. 하지만, 멀티 플랫폼(Multi-platform) 소프트웨어는 운영체제를 가리지 않고 시스템에 독립적으로 여러 플랫폼에서 동작할 수 있도록 만들어집니다. Java는 그러한 크로스 플랫폼 동작 특성을 보장하는 소프트웨어를 개발할 수 있는 프로그래밍 언어입니다.
Java로 만들어진 소프트웨어가 여러 플랫폼에서 동작할 수 있도록 하는 매커니즘을 Java 가상머신(JVM : Java Virtual Machine)이 제공합니다.


Java 코드의 실행과 JVM

자바 프로그램을 개발하는 과정은 다음과 같습니다.


  • 소스 코드 작성 : 원하는 동작을 수행하는 프로그램을 Java 문법으로 코딩을 합니다. 이때, eclipse와 같은 개발환경이 사용됩니다. 소스코드는 확장자가 .java로 만들어 집니다.
  • 소스 컴파일 : .java로 작성된 소스 코드를 자바 컴파일러(javac)로 바이트 코드를 생성합니다. 바이트 코드는 .class 확장자를 갖는 파일로 생성됩니다. .java 소스 파일에 존재할 수 있는 문법적 오류를 모두 해결해야만 javac 컴파일러는 바이트코드 .class 파일을 정상적으로 생성할 수 있습니다.
  • 바이트 코드의 실행 : .class 파일을 실행합니다. java 바이트 코드를 실행하기 위해서는 JVM이 필요합니다. 시스템에 설치된 JVM은 입력된 .class 파일의 바이트 코드들을 해석하고, 플랫폼에 맞도록 동작을 수행하게 됩니다.
이렇게 JVM은 Java로 개발된 프로그램이 여러 플랫폼에서 동일하게 동작하도록 하는 기능을 제공하는 매우 중요한 역할을 합니다.

2014년 8월 9일 토요일

JAVA란?


Java 특징

Java(자바)는 크로스 플랫폼(Cross-Platform) 환경에서 사용할 수 있는 프로그래밍 언어입니다. 크로스 플랫폼 또는 멀티 플랫폼(Multi-Platform)은 이종의 CPU 아키텍쳐(Architecture)에서 소프트웨어가 동일하게 동작할 수 있다는 것을 의미하는 용어입니다.이렇게 이종의 플랫폼에서 실행될 수 있는 소프트웨어를 크로스 플랫폼 소프트웨어라고 합니다. Java는 가상머신(JVM : Java Virtual Machine)을 이용해서 크로스 플랫폼 동작을 보장합니다.
원시 코드(Source Code)는 Java 컴파일러에 의해 바이트 코드로 변환됩니다. 그리고 플랫폼에 설치된 Java 가상 머신에 의해 Java 바이트 코드가 실행됩니다. 따라서, 한번 작성된 Java 코드가 모든 플랫폼에서 동일하게 동작하기는 하지만, 직접 기계어를 실행하는 다른 컴파일러 언어보다 대체적으로 수행 속도가 떨어지곤 했습니다. 하지만, 최근 버전의 Java 가상머신은 보다 빠른 수행 속도를 보이기도 합니다.

Java는 객체지향 프로그래밍 언어입니다. Java의 개발은 처음부터 객체지향언어를 목표로 설계되었으며, C언어와 C++를 기반으로 하였기 때문에 문법적 특징이 많이 유사합니다. 하지만, 몇 가지 큰 차이점을 가지고 있습니다.

C언어 처럼 메모리를 대상으로 번지(Address) 연산을 수행할 수 없습니다.
할당된 메모리의 해제를 주기적으로 한번에 수행하는 Garbage Collection을 수행합니다.
C++처럼 다중상속을 허용하지 않습니다.


Java 역사

1991년 썬 마이크로시스템즈(SUN Microsystems) 제임스 고슬링(James Gosling)에 의해 개발되었으며, 객체지향 프로그래밍 언어로써 개발되었습니다. SUN은 현재 오라클(Oracle)에 인수되었기 때문에, Java 또한 오라클에서 개발 및 배포되고 있습니다. 초기 개발 목표는 PC가 아닌 전자가전제품에 사용될 수 있는 프로그램 개발을 위한 언어였지만, 현재는 PC 뿐만 아니라, 셋탑, Android 스마트 폰 등 많은 플랫폼에서 사용되고 있습니다. 
1995년 Java 1.0이 무료로 배포되었으며, 많은 에러를 수정하고 기능이 보강된 후속 버전의 Java 1.2가 몇해 후 발표 되어 많이 사용되게 되었습니다. Java 1.2 버전은 다양한 플랫폼에서 사용할 수 있도록 설정 기능이 보강되었습니다. 이때부터, J2SE - Java SE(Standard Edition), J2EE - Java EE(Enterprise Edition), J2ME - Java ME(Macro Edition)으로 나누어 배포되고 있습니다. 흔히, Java라고 하면, Java SE 버전을 의미하며, JDK(Java Development Kit)을 포함합니다. 
Java의 기능이 대폭 강화된 1.2 버전이 마이너 업그레이드 느낌이 강해서 Java 2.0으로 이름이 변경되었으며, Java 1.5 버전은 5.0, 그리고 현재, Java 8 버전까지 배포되고 있습니다.