*프로그램이란 ?

 

- 어떤 목적을 이룰수 있도록 프로그래밍 언어로 진행 순서를 기술한 것을 프로그램이라고 한다.

 

- 프로그램이란 보통 어떤 작업이 나열된 계획표 또는 순서표를 뜻한다.

 

- 프로그램은 컴퓨터에게 작업할 일을 순서대로 알려주기 위해 만든 파일이라 할수있다.

 

- 확장자가 .exe인 파일을 의미한다. (실행파일)

 

- 컴퓨터가 작업할 내용을 컴퓨터가 이해할 수 있는 언어(기계어)로 만들어져있다. 

 

 

#프로그래밍 언어란 ?

 

- 컴퓨터는 2진숫자(0과1)로 이루어진 기계어를 사용한다.

 

- 사람들이 사용하기 편한 언어로 작성한 작업내용을 기게어로 번역할수 있도록 번역한다. (컴파일)

 

- 프로그래밍 언어는 컴파일러와 약속한 표현을 사용해야한다.

 

- 각 상황에 맞게 특화된 프로그래밍 언어가 만들어지기 시작했으며, 그중하나가 C언어이다.

 

- 결국 프로그래밍 언어란 사람에게 친숙한 표현법을 사용하여 프로그래밍할 수 있도록 만든 언어이다.

 

 

#C언어의 탄생

 

- 1960년대 개발되었던 운영체제들은 하드워에 종속적인 언어를 사용하여 개발되었다.

  따라서 하드웨어가 바뀌면 운영체제의 많은 부분을 다시 개발해야했다.

 

- 벨 연구소의 데니스 리치 와 켄 톰슨은 이런 불편함을 없애고자 하드웨어가 변경되어도 프로그램을

  다시 작성하지 않아도 되는 운영체레를 만들기 위해 노력했다.

 

- 1970년에 켄 톰슨이 B언어를 만들었지만 이 언어도 독립된 운영체레를 만드는 데 적합하지 않았다.

 

- 1972년 켄 톰슨은 데니스 리치와 함께 새로운 언어를 개발 이것이 C언어이다.

 

 

#C언어의 특징

 

- C언어는 유닉스 운영체제를 만드는 데 사용한 프로그래밍 언어이다.

 

#C언어의 4가지 특징

 

1. C언어는 구조화된 언어이다

 

 - 일정한 단위로 명령들을 그룹으로 묶는 방법을 제공 , 작업 단위가 명확하게 구분되어 유지 보수가 편리

   자신이 원하는 작업을 분리하기도 쉽기 때문에 새로운 프로그램을 개발할 때 재사용하기에도 좋다.

 

2. C언어는 이식성이 높다

 

 - C언어로 만든 프로그램을 거의 수정하지 않고 다른 하드웨어 또는 운영체제로 가져갔을 때도 잘 동작한다는 뜻이다.

   하드웨어에 종속적일 수 있는 부분을 C언어에서 분리해 런타임 라이브러리(Runtime Library)라는 개념을 제공한다.

 

3. C언어는 확장성이 좋고,표현법이 다양해서 자기만의 표현법을 개발할 수 있다.

 

 - 다른 언어에 비해 표현법이 더 많고, 개발자가 개발 상황에 따라 선택할 수 있는 문법 구조나 표현법이 다양하여 자율성이 높다.

 

4. C언어는 생산성이 높다.

 

 - C언어를 사용하는 프로그래머들은 스스로 개발 인프라(명령,그룹,함수)를 구축하기 때문에 경력이 쌓일수록 인프라가 다양해져서

   프로그램 개발 속도가 빨라진다. 그뿐 아니라 사용자의 여려가지 요구에대해 스스로 대처할수 있기때문에 완성도와 만족도가

   더 높을수 밖에없다.

 

 

#C프로그램 실행파일

 

 

#소스파일(*.c)

 

- 소스파일(Source File)은 프로그래머가 만들고 싶은 프로그램을 C언어 문법을 사용해서 작성한 파일이다. (텍스트 파일 형식)

 

- 대부분의 개발자들이 C언어 소스파일을 구별할때 .c 확장자를 사용하기 때문에 파일 확장자는 .c를 사용한다.

 

 

 

#목적파일(*.obj)

 

- 목적파일은(Object File)은 컴파일러(번역기)가 소스파일을 컴파일하면 만들어지는 파일이다.

 

- 컴파일러가 실행 파일을 만드는 시간을 줄이기 위해 만드는 파일이기도 하다.

 

- 내용이 많은 소스파일에서 비슷한 작업들을 모아서 여러 개의 파일로 나누고 각각의 파일을 컴파일 하는 방식을 사용한다.

 

 

 

# 실행파일(*.exe)

 

- 실행파일(Executable File)은 컴퓨터에서 실행할 수 있는 파일을 말한다.

 

- 하나이상의 목적파일을 연결자(Linker)가 연결(Link)해서 실행파일을 만든다.

 

- 이렇게 만들어진 실행파일은 기게어로 나열된 프로그램 파일로서 더 이상의 컴파일 작업 없이 컴퓨터에서 바로 실행가능하다.

 

- 실행 파일의 확장자나 형식은 운영체제마다 다르다.

 

 

#Visual Studio 다운

 

https://www.visualstudio.com/

 

 

 

 

 

 

#Visual Studio로 만드는 간략한 소스 설명

 

 

 

 

 

 

# #include <stdio.h>

 

- C언어에서는 #으로 시작하는 문장을 전처리기라고 부른다.

 

- 전처리기(Preprocessor)는 미리,사전에 처리한다는 뜻이다.

 

- 소스 코드를 번역하기 위해 stdio.h 파일을 먼저 참조해야하는데 그 이유는

   stdio.h 파일에 main함수에서 사용한 printf 함수를 사용하기 위한 정보가 기록되어있기 때문이다.

 

- 전처리기는 끝에 ( ; ) 세미콜론을 사용하지 않는다.

 

 

 

#main , 함수

 

- 프로그램의 시작을 나타내려면 main함수를 반드시 정의해야 한다.

 

- 함수(function) : 특정 기능을 수행하는 처리 단계들을 괄호로 묶어서 이름을 붙인것

 

- 함수는 프로그램을 구성하기 위한 기본적인 단위이다.

 

- 함수는 여러개의 문장으로 이루어져있다.

 

- 문장들은 순차적으로 실행된다.

 

- 문장의 끝에는 반드시 ( ; ) 세미콜론이 있어야 한다.

 

- { }를 사용하여 자신의 영역을 표현해야 한다.

 

 

 

#void

 

- '정해지지 않았다'는 의미의 예악어(Reserved word)이다. 

 

- '없다'라는 의미로도 많이 사용된다.

 

- main앞에 있는 void는 '함수의 수행 결과 값이 정해지지 않았다' 라는 뜻이고

  main뒤 ()괄호 안에 있는 void는 'main 함수로 전달되는 정보가 정해지지 않았다' 라는 뜻이다.

 

 

 

#printf("Hello World");

 

- printf는 C언어의 표준 출력함수이다.

 

- 모니터 등의 콘솔(Console)화면에 'Hello World'라고 출력한다.

 

- 문장 끝에 반드시 ( ; ) 세미콜론을 반드시 입력해야 오류가 발생하지 않는다.

 

 

 

 

#주석

 

- 상황을 설명하거나 작업내욜을 기억하기 위해 소스 파일에 메모를 남기는 것

 

- 주석은 컴파일러가 번역을 하지 않으므로 어떤 내용을 적어도 상관없다.

 

 

 

 

#들여쓰기

 

- 들여쓰기(indentation) :  같은 수준에 있는 문장들을 왼쪽 끝에서 몇자 안으로 들여쓰는 것

 

- 주석을 사용하지 않으면 무슨 처리를 하고있는 프로그램인지 알기 어렵고 들여쓰기를 사용하지 않으면 

  문장을 구분하기 어렵기 때문에 코드의 가독성을 높이기위해 주석과 들여쓰기는 사용해주면 좋다.                                                               

*스레드 (Thread)

 

- 프로그램을 구성하는 명령문은 순서대로 하나씩 처리 되는것이 기본이다.

  조건문,반복문,메소드 호출문으로 복잡하게 얽혀있는 프로그램도 명령문이 실행되는 순서를

  따라가다보면 길게 연결된 한 가닥 실과 같은 흐름이 있다.

  이런 실행 흐름을 스레드(Thread)라고 부른다.

 

- 스레드 객체는 한번만 사용이 가능하다.

 

 

 

#싱글 스레드 (Single Thread)

 

- Single Thread 프로그램 스레드는 main 메소드의 첫번째 명령문부터 시작되고

  main 메소드의 마지막에 도달하거나 return문을 만나면 끝이난다.

 

 

 

 

 

#스레드 구현 Runnable 인터페이스 활용

 

- 클래스에 상속받아 구현하는것이 아닌 Ruunable 인터페이스를 사용해 구현

 

- 특정 기능이 있는 클래스를 상속받아 사용해야 하는데 그 기능을 스레드로 돌리고 싶을때 사용

 

 

 

 

#스레드간의 커뮤니케이션

 

- 공용데이터를 만들어 그 플래그 값을 기준으로 프로세스 진행을 제어하는 방법

 

 

 

 

- 자바의 컴파일러는 프로그램 성능 향상을 위해서 값을 바꾸지 않고 반복해서

  체크할 경우 그 값을 한번 가져다 놓고 여러번 사용하기 때문에 위의 예제에서는

  문제가 된다.

  그럴경우에 최적화 없이 항상 가져다 체크하도록 명령을 내리는 volatile명령어를 쓰면 된다.

 

 

 

 

 

#2개의 쓰레드를 활용하여 캐릭터끼리 공격과 방어를 하는 게임만들기

 

- 영단어는 랜덤으로 나옴 영어 스펠링을 맞추면 공격 스펠링이 틀리면 상대방 체력증가

 

- 방어 턴일 때는 에너지 증가

 

- 상대방 에너지가 0이 되면 승리

 

 

 

 

 

#황금알 낳는 거위 프로그램 만들어보기

 

- 황금알을 낳는 클래스가 있다. 이 거위는 1초마다 알을 1개씩 낳는다.

 

- 엔터키를 입력하면 거위를 우리 밖에 꺼내놓고  그동안 낳은 알을 모두 가져온다. 모두 가져오는 시간은 3초걸린다.

 

- 알을 가져오는 동안은 거위는 밖에 있으므로 알을 낳지 않는다.

 

 

 

 

 

 

#스레드 구현 커뮤니케이션2

 

- 스레드끼리 신호를 직접적으로 주고 받는 방법으로 공유 객체를 통해서 notify와 wait로 연락을

  주고 받을 수 있다.

 

- 스레드는 공유 객체에서 wait메소드를 notify가 올 때까지 대기 상태가 된다.

 

- 다른 스레드는 먼저 끝내야 할 작업을 끝낸 후 공유 객체를 통해서 notify메소드를 호출해주면 

  wait 하고 있던 상대방 스레드는 다시 작동을 하게 된다.

 

 

 

#이전에 플래그 값을 세워서 동기화를 구현했던 예제에서 notify와 wait를 구현해보자

 

- isDone값을 한번 체크하고 루프를 돌면서 또 체크 하지말고 wait로 다른 스레드에서 결과가

  끝나고 호출을 보내주기를 기다린다. (동기화 처리 필요)

 

- 작업이 끝난 후에 notify로 작업이 끝났다고 notify를 날려서 wait 대기 중인 스레드를 다시 실행하도록 한다.

  (동기화 처리 필요)

 

 

  

 

#스레드를 총합적으로 복습해보자

 

- 단어장 배열에 10개의 단어가 있으며 0~9번까지 배열을 돌면서 각 문제를 가져와

  문제를 보여준다. 단, 한번은 영어를 보여주고 한글뜻을 입력하고 한번은 한글을 보여주고

  영어 철자를 입력하는 프로그램이다.

 

- 문제를 푸는동안 2개의 스레드가 돌아간다.

 

-> 한글을 풀때 시간을 체크하는 스레드

-> 영어를 풀때 시간을 체크하는 스레드

 

- 모든 문제를 풀고 나서 각각 소요된 시간 결과를 보여준다.

 

'Java > Java2' 카테고리의 다른 글

Java [Canvas,Swing]  (0) 2017.09.30
Java [자료구조]  (0) 2017.09.24
Java [예외처리,직렬화]  (0) 2017.09.18
Java [Object,Inner 클래스]  (0) 2017.09.16
Java [Gregorian Calendar,Math,Wrapper]  (0) 2017.09.14

* Canvas

 

- 그래픽적인 화면을 그리는 요소 객체

 

- panel과 비슷하게 frame에 올리면 되지만 panel과는 다르게 버튼이랑 라벨 등

  다른 객체를 포함하지는 않는다.

 

 

#Canvas 사용방법

 

- 캔버스를 상속받을 클래스를 만든다.

 

- paint 메소드를 오버라이드 한다.

 

- 파라미터로 들어몬 Graphics 객체를 이용해서 그림을 그린다.

 

 

#Canvas 주요 메소드

 

- setColor : 색상을 지정하는 함수 Color 클래스안에 있는 색깔을 지정해서 사용한다.

                텍스트나 도형을 그릴 때 여기서 지정한 색깔로 그려진다.

 

 

 

 

- drawString : 문자를 적는 메소드  문자내용, x좌표 , y좌표 3개의 파라미터를 사용하며 Font 객체를 이용해서

                   문자스타일을 수정할 수 있다.

 

 

 

 

- drawLine : 라인을 긋는 메소드 파라미터로 시작점 x좌표,시작점 y좌표,도착점 x좌표,도착점 y좌표를 지정해주면

                해당하는 점 사이에 라인을 그린다.

 

 

 

 

- drawOval : 원을 그리는 메소드 파라미터로 x좌표,y좌표,가로,세로를 지정하면 해당하는

                 크기만큼 원을 그린다.

 

 

 

 

 

- fillOval : 채우기가 되어있는 원을 그리는 메소드 drawOval과 사용법 동일

 

 

 

 

 

 

- drawRect : 사각형 그리는 메소드

 

 

 

 

 

 

- fillRect : 채우기가 되어 있는 사각형 그리는 메소드 drawRect와 사용법이 동일

 

 

 

 

 

 

- drawImage : 이미지를 그리는 메소드 Toolkit을 이용해서 이미지를 불러오며 이때 이미지의 위치는 프로젝트

                   내의 최상위를 기본으로 한다.

                   파라미터로 image 객체, x좌표,y좌표,가로,세로,frame 객체를 넘겨준다.

 

 

 

 

 

 

#Swing

 

- 자바 영역에서 사용하는 look&feel 을 적용 받아 모든 운영체제에서 동일한 느낌을 제공

 

- AWT와 가장 큰 차이점은 플랫폼으로부터 어떠한 native code도 가져다가 사용하지 않는 다는 것이다.

  사용 방법이나 코드 모양은 AWT와 거의 흡사하지만 내부적으로 실행되는 것은 완전히 다르다.

 

- 주의점은 AWT와는 달리 Frame에 직접 올리면 안되고 무조건 panel을 통해서 올려야 한다.

 

 

#Swing 주요 클래스 및 메소드

 

- 윈도우의 닫기 버튼을 동작하기 위해서는 AWT와는 다르게 아래와 같이 설정을 해야 한다.

 

- setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

 

- 기본적으로 AWT에서 확장된 클래스들은 앞에 'J'를 붙여주면 된다.

 

예) Jframe , Jpanel , Jbutton , JTextField , JTextArea , Jlist , JCombo(Choice)

     Jcheckbox , Jlabel , Jdialog , JFileChooser(FileDialog) , JScrollpane

     JMenuBar , Jmenu , JMenuItem , JPopupMenu

 

 

 

 #Canvas를 이용해 여러가지 그려넣어보기

 

 

 

 

 

 

#Canvas를 이용하여 공 튀기기

 

 

 

 

 

 

 

 

#Canvas keyCode를 받아 공을 방향키로 조작하기

 

 

 

 

 

'Java > Java2' 카테고리의 다른 글

Java [스레드(Thread),멀티 스레드]  (0) 2017.10.03
Java [자료구조]  (0) 2017.09.24
Java [예외처리,직렬화]  (0) 2017.09.18
Java [Object,Inner 클래스]  (0) 2017.09.16
Java [Gregorian Calendar,Math,Wrapper]  (0) 2017.09.14

+ Recent posts