2017년 1월 19일 목요일

DAY002_Java basic and using Eclipse (JAVA 기초 Eclipse 사용)

DAY002_IoT Embedded Developer in KOSTA (IoT교육 KOSTA)

1. 공유폴더의 도메인을 알려주었음. (업로드, 추가기능 다운로드 등)
2. temp 폴더 삭제(Eclipse 가 아닌 cmd[명령프롬프트]에서 작업했던 폴더)
3. 환경변수는 %변수명% 로 만들고 PATH 를 %변수명%\bin 으로 할 수도 있다.
   (Mac은 $vi ~/.bash_profile 로
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home
로 할 수 있음)

4. New> Java Project  에서 test01hello 로 만듦

5. New>Package 에서 test.com 으로 만듦
6. src에 java01hello/src/test/com 의 내용(Test01hello.java, Test02comment.java, Test03Score.java)을 붙여넣음.

7. 파일을 따로 Java 폴더에 옮기지 않고 eclipse에서 우클릭 Import 로 가져올 수 있다.
Import> General > Existing Projects into workspace > Browse > java01Hello 선택 후
Options 의 Copy projects into workspace 를 체크하여야 현재 Java project 폴더로 복사하여 가져올 수 있음. 체크 안할 시 폴더관리가 안되고 현재 존재하는 위치를 연결하므로 문제가 될 수 있다.

8. 그래서 소스 내용만 가져오는 것이 가장 수월한 방법이다.( project 전체 copy중 충돌 방지)
9. 강의 중 복습 등 참고하는 방법으로 Capture를 사용한다.(강사 Open Capture 사용)
    *나의 경우에는 Mac 환경이라 Command+Shift+4 부분 캡쳐 후 PhotoScapeX 로 편집하였음 (밑줄, 글씨, 네모 박스 등) (별거아니지만 좋은 팁이라고 생각함)
10. 대문자 시작: Class, 소문자() : Method 의 간단한 구분 (가독성 편리)
 ex) System.out.println("변수") : System이라는 클래스 내의 out 내의 println 메소드 사용
11. 같은 method 같은 class 내에 같은 변수 못 만든다.
12. java02variable 프로젝트를만들고 test.com package 내에 Test01int class를 생성하고 작업시작함

main Ctrl+Space를 눌러 Enter를 하면 메인 메소드가 완성됨.

sysout 으로 content assist(ctrl+space)로 완성함.













 순서로 작업함.

String grade = "A"; 가아니라 한 문자 이므로 char grade = 'A'; 로 바꾸었음.

13. Test03Score.java 를 단순한 코딩에서 변수로 수정하기 (작업 시행)
14. int total="" +kor+eng+mat -> type 오류임. ""문자가 붙어 "778899"라는 문자열이 된다.

15. Test04member class 생성 (java02variable 프로젝트 내) 및 작업
우클릭 New > Class 로 생성

Test04member 이름으로 정하고 , public static void main(String[] args) 체크 후 Finish

위 그림의 주석은 결과로 나와야 할 내용 들이다. (class 목표)

내가 작성한 값은 다음과 같다.

final 로 final 상수로 만든 경우에는 밑에서 title = "다른값"; 으로 변경할 때 위와 같은 오류가 뜬다. 

강사님께서 수정한 것은 위와 같다. final 로 타이틀을 정하였고, final 상수는 변경 못하므로 오류난 부분을 주석 처리 하였다. 물론 강의에서는 변수선언부와 출력부분을 나누지 않았고, sysout과 변수 선언 부분을 섞어놓았다. 
(*내생각: 현재 강의 단계에서 변수선언 부분과 출력부분을 나누게 되었을 때 복잡하다고 느낄 수도 있다고 생각해서 그러는 것 같다.)

16. Test01int 를 F2를 눌러서 Test01type 으로 변경하고 이걸 복사 붙여넣어 Test01type2를 편집함.

type 종류에 대한 설명 ( 타입 범위 등)

17. Test02casting 클래스 생성 후 작성
우클릭 > New > Class 로 클래스 생성

Test02casting 이름으로 public static void main(String[] args) 체크 후 Finish

b 는 byte 인데 128은 byte 범위를 초과하여 다음과 같은 메시지가 뜬다. 두가지 해결 방법이 있음.

int 는 대략 21억 범위이므로 상수범위 초과가 뜬다.

L을 붙여주면 long으로 타입을 캐스팅을 하거나 type을 바꿔주라는 메시지로 바뀐다.


package test.com;

public class Test02casting {

 public static void main(String[] args) {
  System.out.println("casting....");
  
  char c = 65;
  System.out.println(c);
  System.out.println((int)c);
  
  int i =65;
  System.out.println(i);
  System.out.println((char)i);
  
  byte b = 127;
  System.out.println(b);
  b = (byte) 129;
  System.out.println(b);
  b = (byte) 130;
  System.out.println(b);
  b = (byte) 131;
  System.out.println(b);
  
  int su = (int) 2200000000L;
  System.out.println(su);
  
  float f = 3.12345678901234567890f;
  System.out.println(f);
  
  double d = 3.12345678901234567890;
  System.out.println(d);
 }

}

위와 같이 casting을 할 수 있고, 캐스팅(casting, 형변환) 이라고 하며 여기의 경우 type casting 이고, 
크기가 큰 것으로 형변환 하는 것을 up casting 작은 것으로 형변환 하는 것을 down casting 이라함.
up casting은 자동 down casting은 강제함.

18. Test01Operator 작성


 New > Java Project 로 자바 프로젝트를 생성한다.
java03operator 이름으로 설정하고 Finish한다.

우클릭 New> Package 패키지 생성한다.

test.com 으로 test 하위에 com이 있도록 패키지를 정하고 Finish 한다.

우클릭 New > Class 로 클래스를 생성한다.

Test01Operator 로 class이름을 정하고 public static void main(String[] args) 체크 후 Finish한다.

아래는 이 클래스의 코딩 이다.


package test.com;

public class Test01Operator {

 public static void main(String[] args) {
  System.out.println("Operator....");
  // 연산자

  // 1. 산술연산 +, -, * , /, %
  System.out.println(10 + 3);
  System.out.println(10 - 3);
  System.out.println(10 * 3);
  System.out.println(10 / 3);
  System.out.println(10 % 3);
  System.out.println((5+5)*2-3);
  System.out.println("=======");

  // 2. 대입연산 =, += ,-=, *=, /=, %=, &=, |=, ^=
  int su = 10;
  System.out.println(su);

  su += 30;
  System.out.println(su);

  su -= 30;
  System.out.println(su);

  su /= 3;
  System.out.println(su);

  su %= 3;
  System.out.println(su);

  int su2 = 10;
  su2 &= 3;
  // su2 |= 3;
  // su2 ^= 3;
  System.out.println(su2);

  // 3. 비트연산 (bit) &(and,교집합), |(or,합집합), ^(xo,배타적논리합)
  // 10 : 1010
  // & 3: 0011
  //      0010 : 2

  // 10  : 1010
  // | 3 : 0011
  //       1011 : 11
  System.out.println(10|3);

  // 10  : 1010
  // ^ 3 : 0011
  //       1001 : 9
  System.out.println(10^3);
  
  // 4. 논리연산  &&, ||, &, |
  System.out.println(10 & 3);
  System.out.println(true & true);
  System.out.println(true && false);
  System.out.println(5>5 & 5==5);
  System.out.println(5>5 && 5==5);
  //System.out.println(10 && 3);
  
  System.out.println(5==5 | 5>5);
  System.out.println(5==5 || 5>5);
  
  // 5.쉬프트연산  >>, <<, >>>,
  System.out.println(8 >> 2); // 1000 >> 2 : 0010(2)
  System.out.println(2 << 2); // 0010 << 2 : 1000(8)
  System.out.println(-2 << 2);
  System.out.println(-8 >> 2);
  System.out.println(-8 >>> 2);

  // 6.비교연산 ==, !=, >, >=, <, <=, 
  System.out.println(5==5);
  System.out.println(5!=5);
  System.out.println(5>=5);
  System.out.println(5>5);
  System.out.println(5<=5);
  System.out.println(5<5 --="" ...="" .="" 10.="" 1000="" 111:222="" 1="" 7.="" 8.="" 9.="" :="" a:="" a="" avg="" b:="" b="" int="" money="" system.out.println="" x="10;" y="20;" z="30;">= 90 ? "A":"other");
  //System.out.println(avg >= 90 ? "A":avg >= 80 ? "B": avg >= 70 ? "C":"other");

 }

}

코딩 중 && 연산자의 경우 true, false 의 경우에만 사용할 수 있으니 주의 한다.

19. java02variable 프로젝트의 Test03Score 클래스를 복사하여, java03Operator 프로젝트로 붙여넣는다. 그리고 나서 상황연산자 사용하여 (if문 사용 없이) 90이상 A, 80이상 B, 70이상 C 나머지 F를 출력하도록 프로그래밍 한다.

정답은 위와 같다. 

나의 경우는 주석 내용처럼 grade에 계속 저장하는 형태로 삼항 연산자를 사용하였는데, 삼항연산자를 제대로 이해하지 못하고 단순한 방법으로만 사용하였다. 




package test.com;

public class Test03Score {

 public static void main(String[] args) {
  // 성적처리 프로그램 시작
  // 이름을 입력하세요
  // 양성호
  // 국어점수를 입력하세요
  // 100
  // 영어점수를 입력하세요
  // 100
  // 수학점수를 입력하세요
  // 100
  // 총점 : 300점
  // 평균 : 100점
  // 등급 : A
  // 성적처리 프로그램 끝

  // 줄정리 단축키 ctrl + shift + f
  
  
  System.out.println("성적처리 프로그램 시작");
  // ctrl+alt+하단화살표
  
  int kor=90;
  int eng=90;
  int mat=0;
  double total = kor+eng+mat;
  double avg = total/3;
  String name = "양성호";
  
  char grade=avg<70? 'F' : avg<80? 'C' : avg<90? 'B' : 'A';
  //char grade = 'A';
  
//  grade = (avg<70)?"Other":"C";  //평균이 70보다 작을때 "Other", 클때 "C"
//  grade = (80<=avg&&avg<90)?"B":grade;//평균이 80에서 90 사이일때 "B",아닐때 grade 그대로
//  grade = (90<=avg)?"A":grade;  //평균이 90보다 클 때 "A",아닐때 grade 
  
  
  
  //변수로 선언하고 출력하세요
  System.out.println("이름을 입력하세요");
  System.out.println(name);
  System.out.println("국어점수를 입력하세요");
  System.out.println(kor);
  System.out.println("영어점수를 입력하세요");
  System.out.println(eng);
  System.out.println("수학점수를 입력하세요");
  System.out.println(mat);
  System.out.println("총점 : "+total+"점");
  System.out.println("평균 : "+avg+"점");
  System.out.println("등급 : "+grade);
  System.out.println("성적처리 프로그램 끝");
 }
}



전체코드는 위와 같다.


깨알 *
1) double click: 단어 블럭, triple click : 한줄 블럭
2) 문자, 숫자 타입  지키기
3) java에서는 (/) 연산자가 몫만 가져옴.
4) double int 포함하므로 문제 없다.
5) 하나의 과제를 줘도 그것만 하지 않고 반복 수행하기
6) "" -> "++" -> "+변수+" 추가로 문자열을 변수 포함으로 빠르게 바꾸는 방법이 있다.
7) 변수(variable) 명사 위주로 적으며 함수(method) 동사 위주로 적는다.
8) 변수 첫글자는 소문자로 쓴다.(class 헷갈림 방지)
9) & &&차이는 앞의 논리가 거짓 일때 && 뒤의 논리를 확인 안한다.
    | || 차이는 앞의 논리가 참일  || 뒤의 논리를 확인 안한다.

2017년 1월 18일 수요일

DAY001_IoT Embedded Developer in KOSTA (IoT교육 KOSTA)

한동안 긴 공백기를 가지고, 2017.01.18~ 2017.06.27 동안 사물인터넷 임베디드 프로그래밍 개발자 양성과정에 참여하게 되었다.

짧은 오리엔테이션이 끝나고, ICT, IoT, 교육과정 커리큘럼에 대한 설명을 듣고 교육을 시작하였다.

다음 주 일요일까지 영타 200타를 완성하고, 교육이 끝날때 쯤 영타 500타 이상을 목표로 하라고 하였다. 첫번 째 과제라고 할 수 있다. 영타가 빠르면 교육을 쫓아가는 것도 도움이 되고, 같은 작업을 하더라도 멋이 있다는(?) 것을 농담반 진담반으로 이야기 하였다. (개발자 다움 혹은 훌륭한 개발자처럼 보이는 작은 차이) 유머였기도 하지만, 가만 생각해보면 'Social Network' 영화나 매체의 영향을 받고 프로그래머가 되고 싶다는 생각도 했기에 공감하였다. 

커리큘럼에 따르면, Java 계열(?)의 교육부터 시작하여 C를 하게 된다. 이 과정에 얕고 넓게 배워야 할 것 들이 많아서 집중해야겠다.

교육장 내 개발환경 (강사 설명 및 다른 학생들)
PC: HP 2013 laptop 
OS: Windows 7 Home Premium K

내 개인 개발환경
PC: Macbook Pro 13-inch, Early 2015
OS: macOS Sierra 10.12.2


KOSTA 149기 이기에 IOTstudy149 폴더내에 다음과 같이 정리하였다. 
windows 개발에서 C:\에 IOTstudy149를 바로 만들었다.


기본으로 DOC, images, utils 로 나누었다. (temp 와 javaProject는 이후 설명)

utils 엔 설치 파일들을 저장하였고, 
설치 는 Chrome(크롬), JDK, Eclipse 를 설치하였다. 

Chrome 은 구글에서 다운받을 수 있고,
JDK 는 www.oracle.com 에서 Downloads -> Java for Developers 에서

Java SE Development Kit 8u121를 설치하였다. 


Accept 를 반드시 눌러 동의하여야 다운받을 수 있고, Windows 와 Mac OS X의 경우에는 그림의 박스를 각각 클릭한다. 윈도우의 경우는 운영체제 bit에 맞는 것을 다운받는다. OS에 맞게 각자 올바르게 선택할 필요가 있음.


 (과거에 java가 sun에서 개발해서 java.sun.com으로 적힌 서적도 있다고 하는데, 역시나 oracle 로 링크되어 이동된다.)

Eclipse 는 www.eclipse.org 에서 다운받을 수 있다. Eclipse Neon 버전을 받음.

다운받는 동안 cmd.exe 를 실행 Windows + r 로 빠른실행을 실행할 수 있고, cmd 를 입력하여 cmd(명령프롬프트) 를 실행했다. 

*이 후로 $뒤에 나오는 것의 경우 터미널 혹은 명령프롬프트에서 입력하는 명령어를 뜻함

$cd 경로명 : change directory 경로명으로 현재위치 변경
$dir : 현재경로의 파일 확인 
의 명령프롬프트의 명령어 들을 사용하는 방법을 알려주었다. 

나와 같은 Macintosh 개발환경에서는 $cd 는 같으나, $ls 로 현재경로의 파일 을 확인할 수 있다. 

$cd C:\IOTstudy149  //IOTstudy149 경로로 이동
$mkdir temp    //temp 폴더 생성
$cd temp        //temp 폴더로 경로 이동
$notepad Test.java   //메모장으로 Test.java 파일 생성
( Mac에서는 notepad가 없으므로, $vi Test.java 로 vi에디터로 생성하여 편집하였다. 
vi내의 개발은 익숙하지 않을경우 저장과 편집등을 전혀 못할 수 있으므로 'vi 명령어' 를 검색하여 참고하여  편집하면 사용할 수 있다. 그리고 꼭 vi로 생성할 필요는 없으나 터미널 상에서 개발을 설명하는 부분이여서 해볼 필요성 은 있다.)

Eclipse 와 JDK를 설치한다. (긍정적인 반응의 버튼을 누르면 설치할 수 있다.)

Eclipse 사용을 했다. 

우측상단의 Open Perspective 아이콘을 클릭하여 java로 변경하였다. 
eclipse의 모든 기능을 다 사용하는 것이 아니라 java를 사용하므로 java로 단순하게 변경 (변경시에 java application 컴파일등 바로 편리하게 게 최적화 되어 사용할 수 있다.)

new -> java project -> java01Hello 로 생성
java01Hello/src 우클릭 new -> package test
java01Hello/src 우클릭 new -> package test.com 생성
( .의 의미 : 왼쪽 단어 하위에 우측 단어가 위치하게됨)

test.com 우클릭 new class -> Name란에 Test 로 생성 (* 첫번째 글자는 대문자로 해야함! 아닐시 경고)

test.com 우클릭 Properties -> Location 확인 가능! 

Test01hello.java의 내용은 다음과 같고, 후에 cmd혹은 terminal에서 작업하는 temp/Test.java 파일엔 5~15라인을 복사 붙여넣는다.

환경설정 preference General -> Appearance -> Colors and Fonts -> Basic -> Text Font 에서 글자크기 변경 가능 

코딩영역은 package와 public class 사이 혹은 public class Test { } 중괄호 사이

컴파일시 오류 에러 없는 코딩이 문제없는 코딩

sysout  'content assist'  :System.out.println(); 으로 변경됨 (자동완성)

JDK는 C:\Program files\Java\jdk1.8.0_121\bin에 위치하고있다. 
(jdk의 버전은 설치시기에 따라 다를 수 있음)
(Mac은 MacintoshHD/라이브러리/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/bin 에 위치해있음)

여기에서 javac를 이용하는데 위의 /bin 까지의 경로를 PATH로 잡는다. Windows의 경우 내컴퓨터 속성 -> 환경변수 에서 PATH를 추가하여 경로를 입력하면 되며, 맥의 경우 terminal에서
$vim ~/.bash_profile 
입력 후 
PATH=${PATH}:/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/bin 
이후에 원하는 경로를 추가한다. 여기서 원하는 경로가 /Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/bin 인 것이다.

PATH를 잡았으면    
$cd /Users/OKSU/Desktop/IOTstudy149/temp  (Mac)
$cd C:\IOTstudy149/temp (Windows)
를 입력 후 
$javac Test.java    //Test.class 생성됨 (컴파일)
$java Test     //Test.class 실행

System의 S(대문자)를 s(소문자)로 바꾸어서도 컴파일($javac Test.java) 해본다.
오류 내용을 알 수 있다.



그 후 실습한 내용은 위와 같다. 

그외 
System.out.print 와 System.out.println의 차이는 개행 차이이다.
Run configuration 의 오른쪽의 화살표를 누르면 컴파일 했던 여러 클래스 중 선택이 가능하다. 
o^s 그림의 의미는 o: method , s: static 이다.
javadoc 으로 컴파일시 문서화주석만 만들어준다.





*단축키 
Ctrl+ Shift + L : 단축키 찾는 단축키 (Mac은 Command + Shift +  L)
Ctrl+ Space : Content assist 자동완성 (Mac은 Spotlight 버튼과 겹쳐서 Shift + space 로 변경하였음
General -> Keys -> Content assist에서 변경할 수 있다.)

Ctrl+ s , c, v, z, 등을 숙지한다. s(저장) c(복사) v(붙여넣기) z(실행취소)
블럭 후 Ctrl+ shift+ / : 부분주석 (Mac은 Control+ Command+ / ) 
블럭 후 Ctrl+ shift +\ : 부분주석 해제 (Mac은 Control + Command + \ )
F2로 이름을 바꾸어 줄 수 있다. (바꿀 때 코딩 내의 method 도 바꿔준다.)
Ctrl+Shift + F : 줄 정리하기 (Mac은 Command + Shift + F)
Ctrl+Alt + 아래화살표 : 커서 줄 복사해서 아래에 붙여넣기 (* 윈도우에서 Windows 화면이 뒤집어주는데 바탕화면 우클릭 옵션조정으로 없앨 수 있다. )










2016년 2월 16일 화요일

[Embedded Academy with IoT] C language Chapter 1, 2 and Orientation [Day 1]

It was yesterday. but it isn't. 
I have lectured C language for Embedded S/W. It will be during 2 weeks. 
Us book is [THIS IS C] in English (이것이 C언어다.in Korean).
The author teaches us with the book in MDS Academy in Guro Digital Center. We learned Chapter 1 and 2.
I know this education class's goal is to make Embedded employers. 

I will lecture until next week. It's maybe hard to review the book myself.