2주 실습강의 Java의 기본문법(1) 인공지능연구실
Class and Package Package 소스파일의 구성 서로 관련있는 class와 interface의 집합 package 패키지 명; // 만든 class를 어느 package로 묶겠는가를 지정 import 패키지 명.클래스 명; // 기존에 있던 package안에 있는 class를 사용하겠다는 // 의미 class 클래스 명{ ……. } Java => import C/C++ => #include 자동으로 default Package(java.lang.*)를 사용 Javac –d.HellowWorld.java : 컴파일시 d옵션을 주면 패키지 선언에 따라 자동으로 디렉터리가 생성된다. 그리고 컴파일된 클래스 파일은 해당 디렉터리에 들어 간다.
Identifier Class 이름, method이름, variable이름 등, 프로그래머가 붙여주는 모든 이름을 Identifier라 함 Identifier를 만드는 규칙 대소문자는 구분하고, 길이의 제한은 없다 문자나 underscore(_), dollar sign($)으로 시작할 수 있다 (첫 문자는 숫자로 시작할 수 없다) 키워드는 쓸 수 없다 잘 만든 Identifier class 또는 interface 이름인 경우 : Member, SpecialMember variable 또는 method 이름인 경우 : name, memberName, clear, clearData Constants(상수) : HEAD_COUNT, MAX_PAGE
예약어(Keywords) Java 프로그램에서 문법적인 기능을 수행하는 핵심 단어들로, 기능이 미리 예약되어 있다 자바에서는 모든 primitive data type의 크기가 고정되어 있고, 프로그래머가 직접 데이터의 크기를 계산해서 메모리를 할당받는 경우가 없기 때문에 sizeof 키워드가 없다 자바키워드에는 대문자로 된 것이 하나도 없다
Data Type Primitive Type Non-Primitive type (object type) 구분 데이터형 바이트 수 유효 데이터 Logical boolean ㅡ true or false Textual char 2바이트 일반적인 문자. 한글처리 가능. Integral byte 1바이트 -27 ~ 27-1 short -215 ~ 215-1 Int 4바이트 -231 ~ 231-1 Long 8바이트 -263 ~ 263-1 Floating float 소수점이 있는 숫자로 끝에 F또는 f가 붙은 숫자(ex : 3.14F) ±3.40282347 double 소수점이 있는 숫자로 끝에 D또는 d가 붙은 숫자(ex : 3.14D) => 부동소수계열의 default 데이터형
OOP(Object Oriented Programming) 특정 데이터와 관련된 함수들을 가지는 프로그램 모듈 실세계 영역에 있는 정보, 물건, 사물, 개체, 개념 등을 표현함 객체(Object) = 속성(Attributes) + 행위(Behaviors) = 변수(Variable) + 메소드(Methods) 객체지향 프로그래밍에서 모든 객체는 추상화 된다. 추상화(Abstraction) : 객체가 자신의 정보를 안에 감추고 있으면서 외부에 구 체적인 것이 아닌 추상적인 내용만 알려주는 것을 의미한다. 실세계의 object를 프로그램에 반영하려면, 실제 object를 프로그램에 적용할 수 있는 형태로 변형시켜야 한다. 이런 작업을 추상화(abstract)라고 한다
Object와 Class(1) Account.java Public class Account { private String accountNum = "422-01-0903895"; private String password = "12345678"; private long restMoney = 34123415; private float interest = 3.34F; public void saveMoney(long amount) { restMoney = restMoney + amount; } public void withdrawMoney(long amount) { restMoney = restMoney - amount; } public long getRestMoney() { return restMoney; public void setInterest(float newInterest) { interest = newInterest; }
Object와 Class(2) Account Class의 Object 생성 Account x; // reference variable 만듦 X = new Account(); // 실제 Object를 만든 후 reference variable에 대입함
Object와 Class(3) OOP 에서 Ojbect의 3가지 속성 encapsulation (은닉) : 부모 class 형태로 데이터와 코드를 묶어놓고, 내부의 데이터를 외부에서 접근할 수 없는 형태로 구현 class 내부가 어떻게 구현되어 있는지 숨길 수 있다 중요한 data를 공개된 method(accessor)를 통해 access하도록 만든다 class를 좀 더 유지보수하기 쉽게 만든다 public class Encapsulation { private String creaditCardNo; // private member public void setCreaditCardNo(String str) { creaditCardNo = str; } public String getCreaditCardNo() { return creaditCardNo; }
Object와 Class(4) inheritance (상속) – is a relation 서브 클래스가 자신의 수퍼 클래스에서 정의된 모든 변수와 메소드를 물려 받는 성질 extends keyword 이용 class Employee { String name; Date hireDate; Date dateOfBirth; } class Manager extends Employee{ String department; Employee subordinamtes [];
Object와 Class(5) polymorphism (다형성) 같은 이름을 가진 메소드를 재정의 같은 메시지라도 서로 다르게 동작
Object와 Class(6) overriding 상속관계에서 부모로부터 받은 메서드를 사용하지 않고 같은 이름의 메서드를 재정의 해서 사용하는 것 메소드의 이름은 물론, return type, argument list까지 모두 부모의 것과 동일해야 함 class Shape { String name; public void print(String name) ……. } class Rectangle extends Shape public void print(String name) // 수퍼 클래스의 print 메소드를 재정의
public class MyCompany { public static void main(String[] args) overriding public class MyCompany { public static void main(String[] args) MyEmployee emp1 = new MyDriver(); MyEmployee emp2 = new MySecretary(); System.out.println(emp1.bonus()); System.out.println(emp2.bonus()); } 7, 8 line을 Compile time에는 MyEmployee의 bonus()라 생각한다. Run time에 실제 생성된 객체의 bonus() 호출된다. => “dynamic binding” 혹은 “virtual method invocation”이라 한다.
Object와 Class(7) overloading constructor(생성자) 메소드 이름은 반드시 같아야 하고, return type은 같아도 되고 달라도 됨 argument list는 반드시 달라야 함 int func(int x) { ... } int func(int x, int y) { ... } char func(char x, String y) { ... } constructor(생성자) object가 생성될 때, 반드시 수행되는 코드 상속되지 않는다 class Manager extends Employee{ Manager() { // default constructor this(“I’m Manager class"); } Manager(String name) { this.name = name; }
Object와 Class(8) this super 자기 자신의 object를 가리킴 자신의 constructor를 호출할 때도 사용 super 부모의 object를 의미 혹은 부모의 constructor를 호출할 때도 사용
Java의 기본 문법(1) Variable scope Local variable (지역변수) : method내에 선언된 변수 method가 수행될 때 생성되며, method수행이 끝나면 memory에서 없어진다 사용 전에 초기화 되어있지 않으면 compile error가 발생한다 Member variable (멤버변수) : class내에 선언된 변수 member 변수는 같은 class 안에 있는 모든 member method에서 사용할 수 있다 member변수는 자동으로 초기화된다 Global(or static) variable (전역변수) class(or static) 변수는 모든 instance(or object)에서 사용 가능한 변수 Class가 instance화, 즉 object로 만들어지지 않고도 사용할 수 있다. static이 붙은 멤버 변수 또는 method는 class 로딩시점에서 자동으로 메모리에 생성
Java의 기본 문법(2) Branch and Loop if (conditional statements) if, switch ∼ case while, do-while, for if (conditional statements) int count = getCount(); if (count < 0) { System.out.println("error: count is negative"); } else System.out.println(count + " people for dinner"); }
Java의 기본 문법(3) switch (Multiple selections) for (determinate loops) int colorNum = 0; switch (colorNum) { case 0: System.out.println("color is Red"); break; case 1: System.out.println("color is Blue"); break; default: System.out.println("color is White"); break; } for (determinate loops) for (int i = 0; i < 10; i++) { System.out.println(i);
Java의 기본 문법(4) Indeterminate Loops while int i = 0; while (i < 10){ System.out.println(i); i++; } do-while int i = 0; do { i++; } while (i < 10);
Java의 Array(1) Arrays 같은 data type을 가지는 변수들의 집합 Java에서는 array를 object형태로 저장 => object는 반드시 reference 변수가 필요 new 연산자를 통해 메모리를 할당 int arr [5]; // error!
Java의 Array(2) Multidimensional Arrays Array를 모아놓은 array