A Tour of Java

Similar documents
A Tour of Java

PowerPoint Presentation

PowerPoint Presentation

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

Java ...

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

쉽게

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

PowerPoint 프레젠테이션

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

PowerPoint 프레젠테이션

JAVA PROGRAMMING 실습 02. 표준 입출력

PowerPoint 프레젠테이션

금오공대 컴퓨터공학전공 강의자료

Design Issues

PowerPoint Presentation

슬라이드 1

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

PowerPoint Presentation

PowerPoint 프레젠테이션

JAVA PROGRAMMING 실습 08.다형성

PowerPoint Presentation

PowerPoint Presentation

gnu-lee-oop-kor-lec06-3-chap7

Microsoft PowerPoint - Java7.pptx

슬라이드 1

JAVA PROGRAMMING 실습 09. 예외처리

PowerPoint 프레젠테이션

Microsoft Word - java19-1-midterm-answer.doc

PowerPoint Presentation

TEST BANK & SOLUTION

Microsoft PowerPoint - additional01.ppt [호환 모드]

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

PowerPoint 프레젠테이션

쉽게 풀어쓴 C 프로그래밍

03-JAVA Syntax(2).PDF

02 C h a p t e r Java

Microsoft PowerPoint - chap06-2pointer.ppt

Microsoft PowerPoint - ch07 - 포인터 pm0415

Microsoft PowerPoint - Chapter 6.ppt

슬라이드 1

JAVA PROGRAMMING 실습 02. 표준 입출력

JUNIT 실습및발표

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

1. 자바프로그램기초 및개발환경 2 장 & 3 장. 자바개발도구 충남대학교 컴퓨터공학과

PowerPoint 프레젠테이션

1

A Tour of Java V

17장 클래스와 메소드

PowerPoint Presentation

PowerPoint Presentation


PowerPoint 프레젠테이션

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

4장.문장

슬라이드 1

예제 2) Test.java class A intvar= 10; void method() class B extends A intvar= 20; 1"); void method() 2"); void method1() public class Test 3"); args) A

Microsoft PowerPoint - 2강

JVM 메모리구조

PowerPoint 프레젠테이션

쉽게 풀어쓴 C 프로그래밍

Network Programming

05-class.key

PowerPoint Presentation

C++ Programming

Java

Microsoft PowerPoint - 04-UDP Programming.ppt

C# Programming Guide - Types

Cluster management software

OCW_C언어 기초

PowerPoint Presentation

JAVA PROGRAMMING 실습 05. 객체의 활용

class Sale void makelineitem(productspecification* spec, int qty) SalesLineItem* sl = new SalesLineItem(spec, qty); ; 2. 아래의액티비티다이어그램을보고 Java 또는 C ++,

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

Microsoft PowerPoint - Lect04.pptx

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

PowerPoint Presentation

Tcl의 문법

10.0pt1height.7depth.3width±â10.0pt1height.7depth.3widthÃÊ10.0pt1height.7depth.3widthÅë10.0pt1height.7depth.3width°è10.0pt1height.7depth.3widthÇÁ10.0pt1height.7depth.3width·Î10.0pt1height.7depth.3width±×10.0pt1height.7depth.3width·¡10.0pt1height.7depth.3width¹Ö pt1height.7depth.3widthŬ10.0pt1height.7depth.3width·¡10.0pt1height.7depth.3width½º, 10.0pt1height.7depth.3width°´10.0pt1height.7depth.3widthü, 10.0pt1height.7depth.3widthº¯10.0pt1height.7depth.3width¼ö, 10.0pt1height.7depth.3width¸Þ10.0pt1height.7depth.3width¼Ò10.0pt1height.7depth.3widthµå

Microsoft PowerPoint - C프로그래밍-chap03.ppt [호환 모드]

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

CHAPTER 02 데이터형과수식 JAVA Programing

Microsoft PowerPoint - additional06.ppt [호환 모드]

Microsoft PowerPoint - Chap12-OOP.ppt

PowerPoint Presentation

제11장 프로세스와 쓰레드

Microsoft PowerPoint - chap03-변수와데이터형.pptx

PowerPoint Presentation

(8) getpi() 함수는정적함수이므로 main() 에서호출할수있다. (9) class Circle private double radius; static final double PI= ; // PI 이름으로 로초기화된정적상수 public

Microsoft PowerPoint - chap10-함수의활용.pptx

Microsoft PowerPoint - chap06-1Array.ppt

슬라이드 1

Microsoft PowerPoint - chap05-제어문.pptx

OCW_C언어 기초

No Slide Title

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout << " 양수입력 : "; cin >> *p; if (*p <= 0) cout << " 양수를입력해야합니다 " << endl; return; 동적할

Semantic Consistency in Information Exchange

JAVA PROGRAMMING 실습 02. 표준 입출력

제4장 기본 의미구조 (Basic Semantics)

Transcription:

A Tour of Java Sungjoo Ha March 4th, 2016 Sungjoo Ha 1 / 50

Introduction 앞으로의계획 ( 바뀔수있음 ) 환경구축및자바의기초소개 사용자정의타입및모듈화, 프로그래밍일반론, 디버깅, 등 클래스 인터페이스 제네릭 과제 2 안내 수업후실습실에서실습예정 Sungjoo Ha 2 / 50

First Principle 문제가생기면침착하게 ( 영어로 ) 구글에서찾아본다. 오류메시지를입력한다. 증상을설명한다. 대체로 stackoverflow 등의사이트에답변이있다. Sungjoo Ha 3 / 50

Java 최신버전은 8 이지만채점서버가 7u75 로되어있다. 자바 7 과자바 8 은차이가있으니염두에두기바란다. 소프트웨어실습실에는자바 8 이설치되어있다. http://www.oracle.com/technetwork/java/javase/ downloads/jdk7-downloads-1880260.html JRE 가아니라 JDK 를받아야한다. Sungjoo Ha 4 / 50

윈도우는 [ 내컴퓨터 - 속성 ] 에서 x86 인지 x64 인지확인가능하다. Sungjoo Ha 5 / 50

Path 자바실행을위해 PATH 설정을해줘야한다. 제어판 - 시스템 - 고급설정 - 환경변수 Sungjoo Ha 6 / 50

Sungjoo Ha 7 / 50

Sungjoo Ha 8 / 50

Sungjoo Ha 9 / 50

Eclipse 통합개발환경 (IDE) https://eclipse.org/ Sungjoo Ha 10 / 50

Online IDE 이번학기에는온라인 IDE 를사용할예정이며자세한내용은추후공지될것이다. Sungjoo Ha 11 / 50

JVM 자바는컴파일되어야하는언어이다. 프로그램이수행되기위해소스텍스트가컴파일러를거쳐서바이트코드가생성된다. 이바이트코드는 JVM 이이해할수있는언어로되어있고, JVM 이이를실행한다. Sungjoo Ha 12 / 50

JVM JVM 만설치되어있으면.class 파일을어떤환경에서나실행할수있다. Sungjoo Ha 13 / 50

Java Platform 플랫폼은프로그램이수행되는환경이다. 자바플랫폼은두개로나뉜다. JVM과 Java API이다. JVM은이미소개하였다. API는이미만들어진프로그램집합이다. API를내가만든프로그램에서사용할수있다. Sungjoo Ha 14 / 50

Hello, World! public class HelloWorld { // 최소한의자바프로그램 public static void main(string[] args) { main 메소드를정의하고있다. args 라는커맨드라인인자를받는다. 메소드는다른언어의함수와비슷한위상이라고생각해도좋다. public, static, class 는무시한다. 클래스이름 HelloWorld 는파일이름 HelloWorld.java 와같아야한다. Sungjoo Ha 15 / 50

Hello, World! public class HelloWorld { // 최소한의자바프로그램 public static void main(string[] args) { 중괄호 {, 는그룹을나누는것을의미한다. 클래스와메소드의시작과끝을표현한다. // 는주석을의미한다. 시작부터줄마지막까지적용된다. 주석은사람이읽기위해존재한다. 모든자바프로그램은 main 메소드를딱하나갖고있어야한다. 여기부터프로그램이시작한다. void 는 main 프로그램의리턴타입을알려주는데, 아무것도리턴하지않음을뜻한다. Sungjoo Ha 16 / 50

Hello, World! import java.lang.system; public class HelloWorld { public static void main(string[] args) { System.out.print("Hello, World!\n"); 보통프로그램은결과물을내놓게마련이다. 위의프로그램은 Hello, World! 를출력하는프로그램이다. Sungjoo Ha 17 / 50

Hello, World! import java.lang.system; public class HelloWorld { public static void main(string[] args) { System.out.print("Hello, World!\n"); import java.lang.system; 은컴파일러에게 java.lang.system 의내용을포함하라고지시한다. 여기에서는화면에출력하기위한 standard output stream out 을활용하기위해포함되었다. 하지만기본적으로 java.lang 의모든패키지가 import( 추가 ) 된다. 그러니위의 import 는필요없다. Sungjoo Ha 18 / 50

Hello, World! public class HelloWorld { public static void main(string[] args) { System.out.print("Hello, World!\n"); 위의프로그램은 out 의 print 메소드를호출한다. 이때인자는 Hello, World!\n 이다. 따옴표로묶인문자들의나열을문자열 (string) 이라부른다. 역슬래시 \ 와하나의문자는특수문자이다. \n 은 newline 문자이며그래서 Hello, World! 를출력한뒤다음줄로넘어가게된다. Sungjoo Ha 19 / 50

Hello, World! public class HelloWorld { public static void main(string[] args) { System.out.println("Hello, World!"); 새줄로넘어가는기능은무척많이사용하므로따로메소드가있다. Sungjoo Ha 20 / 50

Method Call public class Square { static double square(double x) { return x*x; static void print_square(double x) { System.out.println("the square of " + x + " is " + square(x)); public static void main(string[] args) { print_square(1.234); 사실상실행되는모든코드는어딘가의메소드로존재하며, main 메소드에서직간접적으로호출되게된다. square 메소드의앞쪽 double 은리턴타입이 double 형임을알려준다. Sungjoo Ha 21 / 50

Method 자바에서무언가하는주된방법은클래스에속한메소드를호출하는것이다. 메소드를정의해서하고싶은일을설명하게된다. 메소드의정의는메소드에이름을달아주고, 호출시필요한인자의개수및타입을알려주며리턴값의타입도알려준다. Sungjoo Ha 22 / 50

Method 우리는대체로코드가이해하기쉽길원한다. 그래야유지보수가쉽다. 이를위한첫번째단계는각종계산을이해가능한수준의작은조각으로자르는것이다. 이런작은조각은메소드로 ( 및클래스 ) 표현된다. 버그 는프로그램의복잡도와길이에비례하게된다. 프로그램을작은조각으로나누면두문제다피할수있다. 특정코드를메소드로만들면해당코드가어떤일을하는지이름붙이게된다. 이해에도움이된다. 같은코드를여러번작성하지않아도되게한다. Sungjoo Ha 23 / 50

Overloading public class Print { static void print(double num) { System.out.println("double"); System.out.println(num); static void print(string str) { System.out.println("string"); System.out.println(str); public static void main(string[] args) { print(3.23); print(" 한글 "); 두메소드가같은이름을갖지만다른종류의인자를가지면컴파일러가적당한메소드를선택해서호출해준다. Sungjoo Ha 24 / 50

Overloading public class Print2 { static void print(int num1, double num2) { System.out.println(num1); System.out.println(num2); static void print(double num1, int num2) { System.out.println(num1); System.out.println(num2); public static void main(string[] args) { //print(0, 0); // compile error 만약두메소드가동등하게적합하다면컴파일오류가난다. Sungjoo Ha 25 / 50

Overloading 이렇게같은메소드이름을사용하는기법을오버로딩 (overloading) 이라고한다. 이후에다시다루게될것이다. 같은이름을갖는메소드는같은 의미 를구현하여야한다. 가령 print 함수라면 출력 하는의미를갖도록구현하자. Sungjoo Ha 26 / 50

Type int cm; 모든종류의이름과표현식 (expression) 은타입이달려있다. 타입에의해우리가할수있는행동이결정된다. cm 은 int 타입을가짐을뜻한다. cm 은정수형 (int) 변수이다. 선언 (declaration) 은프로그램서사용할이름을선언하는행위이다. 이는이름의타입을지정하게된다. 타입은가능한값의집합과연산의집합을정의한다. 객체 (object) 는어떤타입의값을쥐고있는메모리이다. 값 (value) 은타입에따라해석되는비트이다. 변수 (variable) 는이름이달린객체이다. Sungjoo Ha 27 / 50

Primitive Data Type public class Types { public static void main(string[] args) { boolean B = true; char 문자 = 가 ; int answer = 42; double pi = 3.141592; 자바는다양한기본데이터타입 (primitive data type) 을제공한다. 가령 char 변수는문자하나를저장하는변수가된다. 자세한내용은 http://docs.oracle.com/javase/ tutorial/java/nutsandbolts/datatypes.html 을참고한다. 변수의초기화 (initialization) 는등호 (=) 를사용한다. 변수는선언과동시에초기화하기를강력히권고한다. Sungjoo Ha 28 / 50

Arithmetic Operator public class Arithmetic { public static void main(string[] args) { int x = 10; int y = -3; System.out.println(x + y); System.out.println(+y); System.out.println(x - y); System.out.println(-x); System.out.println(x * y); System.out.println(x / y); System.out.println(x % y); 산술연산자를적합한타입의조합과함께사용할수있다. Sungjoo Ha 29 / 50

Comparison Operator public class Comparison { public static void main(string[] args) { int x = 10; int y = -3; System.out.println(x == y); System.out.println(x!= y); System.out.println(x < y); System.out.println(x > x); System.out.println(x <= y); System.out.println(x >= y); 비교연산자도사용할수있다. Sungjoo Ha 30 / 50

Bitwise Logical Operator public class Logical { public static void main(string[] args) { int x = 10; int y = -3; System.out.println(x & y); System.out.println(x y); System.out.println(x ^ y); System.out.println(~x); 비트단위논리연산자 (bitwise logical operator) 도있다. 각인자의비트단위로연산을적용한다. Sungjoo Ha 31 / 50

Logical Operator public class Logical { public static void main(string[] args) { boolean a = true; boolean b = false; System.out.println(a && b); System.out.println(a b); 논리연산은참 (true) 혹은거짓 (false) 를리턴한다. Sungjoo Ha 32 / 50

Assignments public class Arithmetic2 { public static void main(string[] args) { int x = 10; int y = -3; x += y; ++x; x-=y; --x; x*=y; x/=y; x%=y; System.out.println(x); System.out.println(y); 기본적인산술연산및논리연산외에변수를변경하는연산자도제공한다. Sungjoo Ha 33 / 50

Local Scope public class Scope { public static void main(string[] args) { int x = 10; System.out.println(x); { System.out.println(x); int a = 10; System.out.println(a); //System.out.println(a); // compile error 메소드내부에서선언된변수는선언시점부터블럭의끝까지를스코프로가진다. 블럭은중괄호로표현된다. 함수인자는로컬스코프로판정된다. Sungjoo Ha 34 / 50

Class Scope public class Scope2 { String name; public static void main(string[] args) { Scope2 s = new Scope2(); s.name = " 이름 "; System.out.println(s.name); 클래스내부에서선언되면클래스스코프를갖는다. 객체 (object) 는생성 (construct) 되어야사용할수있다. 이렇게생성된객체는스코프가끝나면파괴된다. 맴버는객체가파괴될때함께파괴된다. 나중에클래스를다룰때다시논하기로한다. Sungjoo Ha 35 / 50

Constants public class Final { static int sum(final int a, final int b) { // a = 3; // compile error return a + b; public static void main(string[] args) { final int a = 10; //a = 2; // compile error int b = sum(3, 4); System.out.println(b); 불변성을표현하기위해 final 키워드를사용한다. 대략 이값을변화하지않겠음 정도의의미로사용된다.. Sungjoo Ha 36 / 50

Array public class Array { public static void main(string[] args) { char [] v = new char[5]; v[0] = 한 ; v[1] = 글 ; v[2] = 문 ; v[3] = 자 ; v[4] = 열 ; char [] v2 = { a, b, c ; [] 는배열을의미한다. char [] v 는문자형배열타입을갖는변수 v 를의미하게된다. 배열의인덱스는 0 부터시작한다. 초기화는 new 키워드를사용하거나암묵적으로초기화할수있다. Sungjoo Ha 37 / 50

Array public class Array2 { public static void main(string[] args) { int[] v1 = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10; int[] v2 = new int[10]; for (int i=0; i < 10; ++i) { v2[i] = v1[i]; System.out.println(v2[3]); for 는루프문을의미한다. Sungjoo Ha 38 / 50

Array public class Array3 { public static void main(string[] args) { int[] v1 = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10; for (int i: v1) { System.out.println(i); for each 문도있다. Sungjoo Ha 39 / 50

Pass By Value public class Pass { static void swap(int a, int b) { // does not work as intended int temp = a; a = b; b = temp; public static void main(string[] args) { int x = 1; int y = 2; swap(x, y); System.out.println(x); System.out.println(y); Sungjoo Ha 40 / 50

Pass By Value 기본형은값의복사가일어난다. swap(x, y) 는 x 와 y 의값을각각 a 와 b 에복사한다. 그러므로 a 와 b 가변해도 x 와 y 는변하지않는다. Sungjoo Ha 41 / 50

Pass By Value public class Ref { static void setzero(int[] v) { v[0] = 10; return; public static void main(string[] args) { int[] v1 = {4, 3, 2, 1, 0; for (int i: v1) { System.out.println(i); setzero(v1); for (int i: v1) { System.out.println(i); Sungjoo Ha 42 / 50

Pass By Value 기본형이아니면이름표가걸린다. 기본형이아니라면변수명은이름표처럼동작한다. v1 은 [4, 3, 2, 1, 0] 의데이터가저장된메모리공간에이름표로걸린다. setzero 메소드호출의인자로 v1 을넘기면이이름표가걸린메모리공간에 v 이름표도걸린다. v[0] = 10 은해당메모리공간을수정하게된다. 그러므로값이변경된다. Sungjoo Ha 43 / 50

Pass By Value public class Ref { static void newarray(int[] v) { v = new int[5]; v[0] = 3; for (int i: v) { System.out.println(i); public static void main(string[] args) { int[] v1 = {4, 3, 2, 1, 0; newarray(v1); for (int i: v1) { System.out.println(i); Sungjoo Ha 44 / 50

Pass By Value 기본형이아니면이름표가걸린다. newarray 메소드는 v 이름표가 v1 이름표가걸려있던메모리공간에같이걸린다. 다시 v 는 new int[5] 로생성된메모리공간에걸린다. 새로운공간의 0 번과 1 번위치의값을 3 으로고쳐쓴다. v1 은여전히 [4, 3, 2, 1, 0] 을가리키므로변화는없다. Sungjoo Ha 45 / 50

Conditional IF import java.util.scanner; public class Input { static boolean accept() { System.out.println(" 진행할까요? (y/n)"); Scanner reader = new Scanner(System.in); String answer = reader.nextline(); if (answer.charat(0) == y answer.charat(0) == Y ) { return true; else { return false; public static void main(string[] args) { boolean answer = accept(); System.out.println(answer); Sungjoo Ha 46 / 50

Conditional SWTICH import java.util.scanner; public class Input2 { static boolean accept() { System.out.println(" 진행할까요? (y/n)"); Scanner reader = new Scanner(System.in); String answer = reader.nextline(); switch(answer.charat(0)) { case y : case Y : return true; case n : case N : return false; default: System.out.println(" 아닌걸로간주할게요."); return false; public static void main(string[] args) { boolean answer = accept(); System.out.println(answer); Sungjoo Ha 47 / 50

Loop and Conditional import java.util.scanner; public class Action { public static void main(string[] args) { int x = 0; int y = 0; Scanner reader = new Scanner(System.in); while (true) { String action = reader.nextline(); for (char ch: action.tochararray()) { switch (ch) { case u : // up case n : // north ++y; break; case r : // right case e : // east ++x; break; // something more default: System.out.println(" 그대로멈춰라!"); break; Sungjoo Ha 48 / 50

Advice 모르는것이있어도너무걱정하지않아도좋다. 나중에다시다루게된다. 좋은프로그램을작성하기위해언어의모든측면을알아야하는것은아니다. 언어의세세한특징이아니라프로그래밍테크닉에집중하라. 언어의자세한면은자바공식문서를참고한다. http://docs.oracle.com/javase/tutorial/index.html 의미있는단위의계산을하나의메소드로묶고알맞은메소드이름을정해준다. 하나의메소드는하나의논리적인계산을수행해야한다. 메소드의길이는짧게유지한다. Sungjoo Ha 49 / 50

Advice 오버로딩은개념적으로같은일을다른타입에대해수행하는메소드에사용한다. 상수에는이름을붙여서사용한다. 자주사용하는지역이름은짧게, 가끔사용하는전역이름은길게짓는다. 비슷한이름은피한다. 초기화하지않은선언은피한다. 하나의스코프는가능하면작게유지한다. 코드에서명확한내용을주석으로남기지않는다. 주석에는의도를표현한다. 인덴트등을일관성있게유지한다. 너무복잡한표현식 (expression) 은피한다. Sungjoo Ha 50 / 50