1 / 333

자바 강의

자바 강의. eastflag@gmail.com 010-3010-1482. 이동기. 0. 개요. 과정 소개. - 강사 소개 * 연세대 전자공학과 / 연세대학원 전자공학과 컴퓨터네트워크 전공

kassia
Download Presentation

자바 강의

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 자바 강의 eastflag@gmail.com 010-3010-1482 이동기

  2. 0. 개요 과정 소개 • - 강사 소개 • * 연세대 전자공학과 / 연세대학원 전자공학과 컴퓨터네트워크 전공 • * KTF 선행연구소 근무-멀티캐스트 프로토콜 연구 및 관련 특허 3건 국내 출원/등록, 해외출원/등록 '무선 이동 통신망에서 멀티캐스트 구현을 위한 아이지엠피 메시지 처리 방법 및 장치''이동통신망에서 고효율의 데이터 전송을 위한 멀티캐스트 라우팅 방법 및 시스템''이동통신망에서 리다이렉션 페이지 개선을 통한 성능 향상 방법 및 장치'* KT엠하우스 개발본부 근무-114 지역 검색 서비스 프로젝트(jsp)-MMS 광고 플랫폼 구축 프로젝트(jsp/springframework)MMS관련 국내 특허 3건 출원 및 등록-KTF 종합광고서비스 플랫폼 구축 프로젝트(c# with .NET)-기프티쇼 서비스 프로젝트(jsp/springframework)* 파스텔커뮤니케이션 개발이사 근무- 다수 안드로이드앱 개발 및 프로젝트 참여'실시간 대기오염 앱', '척추건강체크 앱', '오르골앱' 개발'나인뮤지스', 'VNT' 스타 홍보 앱 개발'포미닛/비스트 슬라이딩 퍼즐', '포미닛/비스트틀린그림찾기' 게임 개발'포미닛/비스트정시알람' 스타 소재 위젯 개발'LG전자 클라우드 포토다이어리 프로젝트'* 현재LG전자 단말 탑재 안드로이드앱 개발 프로젝트 참여중

  3. - 참고 교재 Java의 정석(도우출판, 남궁성 지음) 소설같은 자바 (자북, 최영관 저) 참고교재 & 사이트 http://javabrains.koushik.org (자바 고급 강좌, 자바, jsp, struts, spring, maven ) http://www.youtube.com/user/RnBWan (유튜브, 완샘, 자바강좌) http://www.webhard.co.kr (castello/javachobo, 자바의 정석 자료) http://cafe.naver.com/javachobostudy.cafe (자바의정석 카페) http://cafe.naver.com/easyispub/945 (카페, 이지스퍼블리싱) http://www.jabook.com (소설같은 자바 강좌 및 자료) 0. 개요 과정 소개

  4. 0. 개요 과정 소개 • 1일차 • - 자바 & 안드로이드 개발환경 구축하기 • java jdk설치, 개발 s/w(eclipse) 설치 • - 자바 로드맵 리뷰 • 개발환경, 실행환경, 전자정부 표준프레임웍 • 2일차 • 변수 • 3일차 • 연산자 • 4일차 • 조건문과 반복문 • 5일차 • - 배열 • 6일차 • - OOP 프로그래밍 1 • 클래스와 객체 • 변수와 메서드 • 오버로딩 • 생성자 • 초기화 • 7일차 • - OOP 프로그래밍 2 • 상속 • 제어자 • 오버라이딩 • 다형성 • 추상클래스 • 인터페이스 • 8일차 • - 예외 처리 • 9일차 • - 유틸리티 클래스 • String, StringBuffer • Wrapper • Date • Formatting • 10일차 • 내부클래스 • 익명클래스 • 11일차 • - 제네릭 • - List, Set, Map • 12일차 • - 쓰레드(Thread) • 쓰레드 와 프로세스의 이해 • 구현과 실행 • - 실행제어 및 상태관리 • - 동기화 • 13일차 • - 입출력(I/O) • 바이트기반 스트림 • 보조스트림 • 문자기반 스트림 • - 직렬화(Serialization) • 14일차 • - 소켓프로그래밍 • TCP • UDP

  5. 1. JDK 설치 및 환경 설정 http://www.oracle.com/technetwork/java/javase/downloads/index.htmlJDK 1.6 설치자바 환경 설정(시스템변수에 JAVA_HOME 추가 및 path 설정)2. 이클립스(eclipse) 설치 및 설정 (자바 개발 소프트웨어)http://www.eclipse.org/downloadsEclipse IDE for JAVA EE Developersd:\LDK\eclipse 폴더에 이클립스 다운로드 및 실행 (LDK는 사용자 임의 폴더)d:\LDK\workspace에 작업공간 설정* workspace란? 안드로이드 개발 혹은 jsp웹개발, 스프링프레임웍 개발 등 해당 개발환경에 맞는 여러가지플러그인을 설치하여 작업하는 공간3. 안드로이드SDK 다운로드, 설치 및 설정http://developer.android.com/사이트 접속, Develop -> Toos -> Download ->Download the SDK for Windows, 실행 d:\LDK\android-sdk 폴더에 인스톨eclipse 실행 Window -> preferences -> Android에 s아 location 위치를 d:\LDK\android-sdk 폴더로 설정SDK 매니저 실행하여 4.1 버전, 2.2버전 extra 버전 다운로드4. ADT(Android Develoment Tools) 플러그인 설치 (안드로이드 개발환경 plug-in)Eclipse 메뉴 Help -> Install New Software -> Add 버튼 클릭 -> 주소에 아래url을 넣고 엔터https://dl-ssl.google.com/android/eclipse 0. 개요 개발환경 세팅 eclipse 설치 (자바개발툴) 안드로이드 SDK 설치 ADT(안드로이드개발툴) (eclipse plug-in) JDK 설치

  6. 0. 개요 자바 : 개발환경 구성

  7. 0. 개요 자바 : 개발환경 오픈소스

  8. 0. 개요 자바 : 오픈소스 개요

  9. 0. 개요 자바 : 전자정부프레임웍 구성 예

  10. 0. 개요 자바 : 전자정부프레임웍 구성 예

  11. 0. 개요 자바 : 전자정부프레임웍 구성 예

  12. 0. 개요 자바 : 전자정부프레임웍 구성 예

  13. 0. 개요 JDK 디렉토리 구조 Jdk1.6.X eclipse가 자주 죽을시 이 부분 eclipse.ini 에 이 추가 bin lib jre java.exe javac.exe javaw.exe javap.exe javah.exe javadoc.exe tools.jar dt.jar bin lib java.exe java.dll awt.dll client server rt.jar i18n.jar ext security applet jvm.dll jvm.dll bin : 실행파일 폴더 demo : 데모프로그램 include : 고유 메소드들을 위한 파일 jre : 자바 실행환경 lib 라이브러리 파일 src.zip : 라이브러리 소스파일

  14. 1일차 Hello world 출력 Javac.exe Java.exe Hello.java 작성 Hello.class생성 실행 *.class 로드 클래스 검사 main 호출

  15. Compile-time-Environment Runtime Environment(Java Platform) Class Loader Byte Verifier Java Class Libraries Java Source (*.java) Java Bytecodes Move locally Or through network Java Interpreter Just-In-Time Compiler Java Compiler Java Virtual Machine Runtime System Java Bytecode (*.class) Operating System Hardware 1일차 Hello world 실행단계

  16. 1일차 Hello world 실행단계 public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); . . . 5 4 Native Code Byte Code JVM HW/OS HW/OS Source 1 3 010101010000101010010101010100011110101010010101000100010101010010000101010101010101010010111101001010101000101000101000100000000000111001010101001010101010101010010000101010101010101010101010101010101010101010101000101010000101100101000100010001000101010101010001110001010101010101010000 Byte Code 2 龕봅 - <init> ()V Code LineNumberTable main ([Ljava/lang/String;)V SourceFile HelloWorld.java Hello World! . . . Window Unix Linux

  17. 1일차 Hello world 메모리 구조 프로그램 실행 시 메모리로 로딩 명령 처리 후 레지스트리 또는 메인 메모리에 저장 Main Memory (RAM) 반복 보조기억장치 (HDD, CD등) OS영역 명령어 Fetch CPU 메서드 영역 HelloWorld.class HelloWorld.class 레지스트리 처리결과 저장 HelloWorld.class 스택(Stack) 영역 힙(Heap) 영역 처리결과 화면 표시등 Free 메모리 영역 1개 프로그램 메모리 영역 입출력장치 키보드, 모니터 등

  18. 1일차 Hello world 메모리 구조 // Hello.java class Hello { public static void main(String[] args) { System.out.println(“HelloWorld!”); } } • public 키워드 • 접근 제한을 나타낸다. • public으로 선언하면 클래스 내/외에서 접근하는데 제한이 없다 • static 키워드 • static은 공유의 의미를 갖음 • 모든 객체에서 공통으로 사용하는 메모리 • void 키워드 • 모든 메서드는 리턴 타입을 선언해야 한다 • void는 리턴 값이 없음을 나타낸다

  19. 1일차 Hello world 메모리 구조 // Hello.java class Hello { public static void main(String[] args) { System.out.println(“HelloWorld!”); } } • public 키워드 • 접근 제한을 나타낸다. • public으로 선언하면 클래스 내/외에서 접근하는데 제한이 없다 • static 키워드 • static은 공유의 의미를 갖음 • 모든 객체에서 공통으로 사용하는 메모리 • void 키워드 • 모든 메서드는 리턴 타입을 선언해야 한다 • void는 리턴 값이 없음을 나타낸다

  20. 2일차 데이터 타입 • 데이터 타입 이란? 프로그래머가 메모리를 얻어올 때 그 크기를 지정한다는 의미 • 메모리를 얻고 사용하는 절차 • 필요한 메모리의 크기를 정한다. • 크기에 해당하는 만큼의 메모리를 얻는다. • 메모리에 데이터를 집어 넣는다. • 만약 4바이트의 메모리를 프로그래머가 얻어낸다는 것은 어렵기 때문에 메모리의 크기를 미리 지정해 두었는데 그것이 데이터 타입이다. • 데이터 타입을 이용하면 효과적인 메모리 활용이 가능하다.

  21. 2일차 데이터 타입 • 메모리를 얻는 방법 • int a; • 4바이트 메모리를 얻는다 • 얻은 메모리의 주소(위치)를 받아낸다 • 메모리 위치를 a라는 이름과 연결시켜 준다 • 데이터 타입은 메모리를 얻기 위한 하나의 수단으로 활용. • 데이터 타입은 (메모리의)크기(size)이다. (VM이 미리 정해 놓은)

  22. 2일차 데이터 타입 • 자바의 기본 데이터 타입 • 컴파일러 차원에서 미리 제공되는 데이터 타입을 기본 데이터 타입이라 한다. • byte(1),char(2),short(2),int(4),long(8),float(4),double(8) • byte : 8비트, 2의 보수 (-128 ~ 127) • short : 16비트 (-32768 ~ 32767) • char : 16비트, 유니코드 (0 ~ 65535) • int : 32비트 (-2147483648 ~ 2147483647) • long : 64비트 (-9223372036854775808 ~ 9223372036854775807) • float : 32비트 • double : 64비트 • boolean : true, false • 자바의 레퍼런스데이터 타입 • 4바이트 주소값이 저장된다.

  23. 2일차 데이터 타입 • 잊지 말아야 할 사항 • 데이터 타입은 메모리의 크기(Size)와 형태(Type)를 지정하는 것이다. • 변수 타입 • 기본형(primitive type): 실제 값을 저장. 1 ~ 8 byte • 참조형(reference type) : 4byte 객체의 주소를 저장

  24. 2일차 변수 타입

  25. 2일차 변수 • 변수란 • 데이터 타입에 명시된 형태의 데이터를 담을 수 있는 메모리이다.(그릇) • 변수는 데이터 타입을 통해 존재할 수 있다. • 변수는 데이터를 보관하기 위해서이다. <- 변수의 목적 • int a=5; • 4바이트 메모리확보(정수형) • 메모리의 주소에 a라는 이름을 메핑시킴 • a라는 변수를 통해서 해당 메모리에 5라는 값 할당 • 32비트 정수형 데이터가 스택 메모리에 저장 (00000000 00000000 00000000 00000101)

  26. 2일차 변수 예제 // VariableTest.java public class VariableTest{ public static void main(String[] args) { int a = 1; System.out.println("a = " + a); int b = 2; System.out.println("b = " + b); a = b; System.out.println("a = " + a); a = 10; b = 20; int c = a + b; System.out.println("a + b = " + c); int d=10; d=d+20; System.out.println("d + 20 = " + d); } }

  27. 2일차 상수 • 상수 • 미리 정해진 실제 값 • 상수 자체가 수이며 이미 만들어져 있는 것 • literal이라 부름 • 상수는 그 자체가 값이기 때문에 변경할 수 없음. ( 5 = 100 -> 오류) • 변수에 저장되지 않으면 쓸모가 없다. • 변수를 상수로 만들 수도 있다.(public final int a = 100;) • 상수의 종류 • 정수형 상수의 구분 • 100 : 명시하지 않으면 int형 상수 -default • 100L, 100l : long형 상수 • 실수형 상수의 구분 • 5.34 : 명시하지 않으면 double형 상수 -default • 5.34F, 5.34f : float형 상수 • 5.34D, 5.34d : double형 상수

  28. 2일차 상수 • 문자 상수의 예 • 'A', 'a' • 문자열 상수의 예 • "abcd" • 마지막에 널문자('\0')가 자동으로 추가된다. • "abcd"라는 문자열은 10바이트의 메모리를 차지한다. • 문자열 + anytype or any type + 문자열 => 문자열 • 7 + 7 + “7” => 147, “7” + 7 + 7 => 777

  29. 2일차 상수 예 //LiteralTest.java public class LiteralTest{ public static void main(String[] args) { int a = 100; int b = 200L; long c = 300L; long d = 400l; System.out.println("a = " + a); System.out.println("b = " + b); System.out.println("c = " + c); System.out.println("d = " + d); System.out.println("============================="); char ca = 'a'; char cb = "b"; System.out.println("ca = " + ca); System.out.println("cb = " + cb); System.out.println("============================="); String str1="안녕하세요! 오늘부터 우리는 자바 오덕후!!"; String str2='안녕하세요! 오늘부터 우리는 자바 오덕후!!'; System.out.println("문자열 출력1: "+str1); System.out.println("문자열 출력2: "+str2); System.out.println("============================="); System.out.println("==String Concatenation Test=="); System.out.println(a+b+" 문자 "); System.out.println(a+" 문자 "+b); System.out.println(" 문자 "+a+b); System.out.println(" 문자 "+(a+b)); } }

  30. 2일차 상수 예 public class SansuStatic { public static final int MAN=1; public static final int WOMAN=2; } public class SansuStaticMain { public final static int MEN = 3; public final static int WOMEN = 4; public static void main(String[] args) { int people1=WOMEN; switch(people1){ case 3: System.out.println("남자");break; case 4: System.out.println("여자");break; } //intSansuStatic.WOMAN=4; 상수에 assign 못함 int people2=SansuStatic.WOMAN; switch(people2){ case 1: System.out.println("남자");break; case 2: System.out.println("여자");break; } } }

  31. 2일차 할당 • = 연산자 • = 연산자는 데이터 타입에 맞는 값을 할당하라는 의미를 담고 있다. • 기본타입에서 할당은 “Copy of value” • 할당의 법칙 • 오른쪽에서 왼쪽으로만 할당이 가능하다.(절대적) • 변수끼리도 할당이 가능하다.(오른쪽에서 왼쪽으로 할당) • 변수에 이미 상수가 존재하더라도 다른 것을 할당하면 마지막에 넣은 것이 최종적으로 할당된다. • 선언과 동시에 초기화 • int a = 100; • 선언과 할당의 분리 • int a; • a = 100; • 여러 개를 선언함과 동시에 초기화 • int a = 100, b = 200; • 여러 개를 선언한 후 할당 • int a, b; • a = 100; • b = 200; • 변수끼리의 할당 • int a = 100; • int b; • b = a;

  32. 2일차 변수의 형변환 형변환 변수 또는 리터럴의 타입을 다른 타입으로 변환 Boolean을 제외한 7개의 기본형은 서로 형변환이 가능 큰 범위를 작은 범위로 캐스팅할때는 명시적으로 캐스팅 사용 작은 범위를 큰 범위로 캐스팅할때는 자동 형변환 • String을 숫자로 변환하기 • String a = "37.123456"; • Double.parseDouble(a); //Double.valueOf(a); 도 같은 결과 • // Integer.parseInteger, Float.parseFloat도 마찬가지로 존재

  33. 2일차 변수의 형변환 2. int → byte int i2 = 300; byte b2 = (byte)i2; // 생략불가 1. byte → int byte b = 10; int i = b; // 생략가능 (int) 오버플로우 지정된 범위를 넘어갈때 발생

  34. 2일차 형변환 예제1 public class DataCastingTest { public static void main(String[] args) { byte ba=10; byte bb=20; byte bc=10+20; //byte bd=ba+bb; byte be=(byte)(ba+bb); System.out.println("01 : "+bc); System.out.println("02 : "+be); short sa=30; short sb=50; short sc=30+50; //short sd=sa+sb; short se=(short)(sa+sb); System.out.println("03 : "+sc); System.out.println("04 : "+se); intia=20; intib=30; intic=20+30; int id=ic+sa; System.out.println("05 : "+ic); System.out.println("06 : "+id);

  35. 2일차 형변환 예제1 long la=40l; long lb=50L; long lc=la+lb; System.out.println("07 : "+la); System.out.println("08 : "+lb); System.out.println("09 : "+lc); float fa=45.0f; float fb=46.67F; //float fc=30.4; float fd=30; float fe=fa+fb; double da=12; double db=45+Float.MAX_VALUE; double dc=da+db; //int di = 30.4; System.out.println("10 : "+dc); System.out.println("11 : "+"int범위: "+Integer.MIN_VALUE+" ~ "+Integer.MAX_VALUE); System.out.println("12 : "+"float 양의 범위: "+Float.MIN_VALUE+" ~ "+Float.MAX_VALUE); System.out.println(5/3); System.out.println((float)5/3); System.out.println((double)5/3); } }

  36. 2일차 형변환 예제2 CatingRangeMain.java public class CatingRangeMain { public static void main(String[] args) { char cc='ㄱ';// System.out.println(cc);// char를 찍자 System.out.println((int)cc); // int로 바꾸어 찍자 cc='ㄴ';// System.out.println(cc);// char를 찍자 System.out.println((int)cc); // int로 바꾸어 찍자 cc='ㄷ';// System.out.println(cc);// char를 찍자 System.out.println((int)cc); // int로 바꾸어 찍자 System.out.println("------------------------------"); for(int i=1;i<=100;i++){ System.out.print((char)i+" ");//찍고 공백 추가 그자리 // (char)i --> int를 char로 casting if((i%10==0)){// 10으로 나누어 떨어지는 가? System.out.println();//한칸을 내려라 } } } }

  37. 2일차 형변환 예제3 public class TypeConversion { public static void main(String[] args) { String strNum1="12345"; String strNum2="67890"; // String strNum1=args[0]; // String strNum2=args[1]; int tempNum1=1000; //String--> int int intNum1=Integer.parseInt(strNum1); int intNum2=Integer.parseInt(strNum2); int sum = intNum1+intNum2; double douNum1=Double.parseDouble(strNum1); //int--> String String stringSum = Integer.toString(sum); System.out.println(stringSum); String strNum3=Integer.toString(tempNum1); System.out.println(strNum3); } }

  38. 3일차 연산자 http://www.javachobo.com 연산자의 종류 ▶ 단항 연산자 : + - (타입) ++ -- ~ ! 산술 : + - * / % << >> >>> ▶이항 연산자 비교 : > < >= <= == != 논리 : && || & ^ | ▶삼항 연산자 : ? : ▶대입 연산자 : =

  39. 3일차 연산자

  40. 3일차 연산자 연산자의 우선순위 - 괄호의 우선순위가 제일 높다. - 산술 > 비교 > 논리 > 대입 - 단항> 이항 > 삼항 - 연산자의 연산 진행방향은 왼쪽에서 오른쪽(→)이다. 단, 단항, 대입 연산자만 오른쪽에서 왼쪽(←)이다. 3 * 4 * 5 x = y = 3 연산 수행 규칙 예 inta=88; int b=10 double c = a/b; //8.0 이 저장 //연산을 수행시int로 형변환후 수행

  41. 3일차 연산자 연산자의 우선순위 단항 > 이항 ex1) –x + 3 ex2) x + 3 * y 곱셈, 나눗셈 > 덧셈, 뺄셈 ex3) x + 3 > y - 2 산술 > 비교 ex4) x > 3 && x < 5 비교 > 논리 ex5) int result = x + y * 3; 항상 대입은 맨 끝에

  42. 3일차 연산자 증감연산자 ++, -- ▶증가연산자(++) : 피연산자의 값을 1 증가시킨다. ▶감소연산자(--) : 피연산자의 값을 1 감소시킨다. int i = 5; int j = 0;

  43. 3일차 연산자 부호연산자(+,-)와 논리부정연산자(!) ▶부호연산자(+,-) : ‘+’는 피연산자에 1을 곱하고 ‘-’는 피연산자에 -1을 곱한다. ▶논리부정연산자(!) : true는 false로, false는 true로 피연산자가 boolean일 때만 사용가능 boolean power = false; power = !power; power = !power; int i = -10; i = +i; i = -i;

  44. 3일차 연산자 비트전환연산자 - ~ - 정수를 2진수로 표현했을 때, 1을 0으로 0은 1로 바꾼다. 정수형에만 사용가능.

  45. 3일차 연산자 이항연산자의 특징 이항연산자는 연산을 수행하기 전에 피연산자의 타입을 일치시킨다. - int보다 크기가 작은 타입은 int로 변환한다. ( byte, char, short →int ) - 피연산자 중 표현범위가 큰 타입으로 형변환 한다. byte + short → int + int → int char + int → int + int → int float + int → float + float → float long + float → float + float → float float + double → double + double → double

  46. 3일차 연산자 이항연산자의 특징 int a = 1000000; // 1,000,000 int b = 2000000; // 2,000,000 long c = a * b; // c는 2,000,000,000,000 ? // c는 -1454759936 !!! int * int→int long c = (long)a * b; // c는 2,000,000,000,000 ! long * int → long * long → long

  47. 3일차 연산자 이항연산자의 특징 char c1 = ‘a’; char c2 = c1 + 1; // 에러 char c2 = (char)(c1 + 1); // OK char c2 = ++c1; // OK int i = ‘B’–‘A’; int i = ‘2’–‘0’;

  48. 3일차 연산자 나머지연산자 - % • 나누기한 나머지를 반환한다. • 홀수, 짝수 등 배수검사에 주로 사용. int share = 10 / 8; int remain = 10 % 8; 10 % 8 → 2 10 % -8 → 2 -10 % 8 → -2 -10 % -8 → -2

  49. 3일차 연산자 쉬프트연산자- <<, >>, >>> • 2n으로 곱하거나 나눈 결과를 반환한다. • 곱셈, 나눗셈보다 빠르다. x << n 은 x * 2n과 같다. x >> n 은 x / 2n과 같다. 8 << 2 는 8 * 22과 같다. 8 >> 2 는 8 / 22과 같다.

  50. 3일차 연산자 비교연산자 - > < >= <= == != • 피연산자를 같은 타입으로 변환한 후에 비교한다. • 결과 값은 true 또는 false이다. - 기본형(boolean제외)과 참조형에 사용할 수 있으나 참조형에는 ==와 !=만 사용할 수 있다.

More Related