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) & &&차이는 앞의 논리가 거짓 일때 && 뒤의 논리를 확인 안한다.
    | || 차이는 앞의 논리가 참일  || 뒤의 논리를 확인 안한다.

댓글 2개:

  1. 글을 수정하기가 곤란함. html 사용법을 잘모르는데 코드 형식으로 나타내려고 일부를 수정하였다.
    코드내에 < 가 있는 부분때문에 수정을 누르면 내용이 바뀜.

    답글삭제