A Tour of Java

Similar documents
A Tour of Java

PowerPoint Presentation

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

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

PowerPoint Presentation

Java ...

쉽게

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

PowerPoint 프레젠테이션

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

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

JAVA PROGRAMMING 실습 02. 표준 입출력

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

PowerPoint Presentation

Design Issues

슬라이드 1

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

PowerPoint Presentation

슬라이드 1

JAVA PROGRAMMING 실습 08.다형성

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

PowerPoint Presentation

PowerPoint Presentation

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

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

Microsoft PowerPoint - Java7.pptx

JAVA PROGRAMMING 실습 09. 예외처리

PowerPoint 프레젠테이션

쉽게 풀어쓴 C 프로그래밍

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

Microsoft PowerPoint - chap06-2pointer.ppt

PowerPoint Presentation

TEST BANK & SOLUTION

Microsoft PowerPoint - ch07 - 포인터 pm0415

PowerPoint 프레젠테이션

03-JAVA Syntax(2).PDF

02 C h a p t e r Java

JUNIT 실습및발표

Microsoft PowerPoint - Chapter 6.ppt

1


JAVA PROGRAMMING 실습 02. 표준 입출력

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

슬라이드 1

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

PowerPoint 프레젠테이션

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

17장 클래스와 메소드

JVM 메모리구조

OCW_C언어 기초

쉽게 풀어쓴 C 프로그래밍

PowerPoint 프레젠테이션

PowerPoint Presentation

A Tour of Java V

PowerPoint Presentation

C++ Programming

PowerPoint 프레젠테이션

C# Programming Guide - Types

4장.문장

Microsoft PowerPoint - 04-UDP Programming.ppt

슬라이드 1

Microsoft PowerPoint - 2강

예제 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 - Chap12-OOP.ppt

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

Tcl의 문법

Network Programming

05-class.key

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

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

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

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

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

PowerPoint Presentation

PowerPoint Presentation

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

제11장 프로세스와 쓰레드

PowerPoint Presentation

Cluster management software

Java

Microsoft PowerPoint - java1-lab5-ImageProcessorTestOOP.pptx

Microsoft PowerPoint - chap06-1Array.ppt

Microsoft PowerPoint - CSharp-10-예외처리

JAVA PROGRAMMING 실습 05. 객체의 활용

Microsoft PowerPoint - chap05-제어문.pptx

PowerPoint 프레젠테이션

Microsoft PowerPoint - Lect04.pptx

PowerPoint Template

OCW_C언어 기초

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

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µå

설계란 무엇인가?

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

Microsoft PowerPoint - C++ 5 .pptx

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

PowerPoint Presentation

CHAPTER 02 데이터형과수식 JAVA Programing

11장 포인터

Transcription:

A Tour of Java Sungjoo Ha Sangyeop Lee March 12th, 2018 1/49

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

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

Java 최신버전은 9(2017. 9. 업데이트 ) 소프트웨어실습실과채점서버에는자바 8 이설치되어있다. http://www.oracle.com/technetwork/java/javase/ downloads/jdk8-downloads-2133151.html JRE 가아니라 JDK 를받아야한다. 4/49

윈도우는 [ 내컴퓨터 - 속성 ] 에서 x86 인지 x64 인지확인가능하다. Linux 에서는 terminal 에서 uname -m 커맨드로확인가능하다. x86 64 이면 64 비트 i?86 이면 32 비트 5/49

Path 자바실행을위해 PATH 설정을해줘야한다. 윈도우 : 제어판 - 시스템 - 고급설정 - 환경변수 6/49

7/49

8/49

9/49

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

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

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

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

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

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

Hello, World! import java.lang.system; public class HelloWorld { System.out.print("Hello, World!\n"); 보통프로그램은결과물을내놓게마련이다. 위의프로그램은 Hello, World! 를출력하는프로그램이다. 16/49

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

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

Hello, World! public class HelloWorld { System.out.println("Hello, World!"); 새줄로넘어가는기능은무척많이사용하므로따로메소드가있다. 19/49

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)); print_square(1.234); 사실상실행되는모든코드는어딘가의메소드로존재하며, main 메소드에서직간접적으로호출되게된다. square 메소드의앞쪽 double 은리턴타입이 double 형임을알려준다. 20/49

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

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

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); print(3.23); print(" 한글 "); 두메소드가같은이름을갖지만다른종류의인자를가지면컴파일러가적당한메소드를선택해서호출해준다. 23/49

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); //print(0, 0); // compile error 만약두메소드가동등하게적합하다면컴파일오류가난다. 24/49

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

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

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

Arithmetic Operator public class Arithmetic { 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); 산술연산자를적합한타입의조합과함께사용할수있다. 28/49

Comparison Operator public class Comparison { 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); 비교연산자도사용할수있다. 29/49

Bitwise Logical Operator public class Logical { 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) 도있다. 각인자의비트단위로연산을적용한다. 30/49

Logical Operator public class Logical { boolean a = true; boolean b = false; System.out.println(a && b); System.out.println(a b); 논리연산은참 (true) 혹은거짓 (false) 를리턴한다. 31/49

Assignments public class Arithmetic2 { 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); 기본적인산술연산및논리연산외에변수를변경하는연산자도제공한다. 32/49

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

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

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

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

Array public class Array2 { 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 는루프문을의미한다. 37/49

Array public class Array3 { int[] v1 = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10; for (int i: v1) { System.out.println(i); for each 문도있다. 38/49

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; int x = 1; int y = 2; swap(x, y); System.out.println(x); System.out.println(y); 39/49

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

Pass By Value public class Ref { static void setzero(int[] v) { v[0] = 10; return; 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); 41/49

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

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); int[] v1 = {4, 3, 2, 1, 0; newarray(v1); for (int i: v1) { System.out.println(i); 43/49

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

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; boolean answer = accept(); System.out.println(answer); 45/49

Conditional SWTICH import java.util.scanner; public class Input2 { static boolean accept() { System.out.println(" 진행할까요? (y/n)"); Scanner reader = new Scanner(System.in); 46/49 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; boolean answer = accept(); System.out.println(answer);

Loop and Conditional import java.util.scanner; public class Action { 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; 47/49

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

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