컴퓨터과학과 김희천교수
학습개요 Java 언어문법의기본사항, 자료형, 변수와상수선언및사용법, 각종연산자사용법, if/switch 등과같은제어문사용법등에대해설명한다. 또한 C++ 언어와선언 / 사용방법이다른 Java의배열선언및사용법에대해서설명한다. Java 언어의효과적인활용을위해서는기본문법을이해하는것이중요하다. 객체지향의기본개념에대해알아보고 Java에서어떻게객체지향적요소를적용하고있는지살펴본다. Java의객체지향적특징은 Java 프로그램을작성하고이해하는데필수적인요소이기때문에확실한이해가필요하다.
학습목표 Java 자료형, 변수및상수의선언및사용법을이해 배열의사용법을이해 Java 클래스의선언및사용법을이해 Java 인터페이스의선언및사용법을이해 다형성, 오버로딩, 오버라이딩을응용한프로그래밍기법을이해
자료형 기본형 기본형의변수는값을저장 byte, short, int, long float, double char, boolean int i; i = 3;
자료형 참조형 참조형의변수는기억공간의주소를저장 먼저값을저장할기억공간을생성해야함 int anarray[ ]; anarray = new int[10]; anarray[0] = 3; Car mycar; mycar = new Car( ); mycar.year = 2010; mycar 객체
변수 변수의종류 데이터필드, 지역변수, 메소드의매개변수 class Grade { int math, eng; void setmath( int m) { math = m; int gettotal( ) { int total; total = math + eng; return total;
변수 상수 final 키워드를사용하여선언된변수 final String FILE_PATH = c:\ ;
배열 Java 의배열 같은자료형의데이터를연속적으로모아놓은것 선언할때크기를지정할수없음 선언과동시에초기화가능 배열의크기는배열이름.length int a[ ]; a = new int[3]; int[ ] b = {1, 2, 3;
문자열 String 클래스이나기본형처럼다룰수있음 문자열끼리 + 연산은문자열을연결하는것 System.out.print( ) 는인자를문자열로변환하여출력 String s = Java ; System.out.print(s + 2); System.out.print( $ + 1000); System.out.print( $ + 1000);
클래스 Java 의클래스선언 공통적특징을갖는객체들을추상화한개념 객체가가지는데이터와메소드를정의 < 접근제어자 > class < 클래스이름 > { < 필드선언 > < 메소드선언 >
클래스 클래스접근제어자의의미 생략 같은패키지에서사용가능 public 어디서나사용가능 final 자식클래스를위해상속될수없음 abstract 객체를생성할수없음 private, protected
생성자 생성자의의미 객체가생성될때실행되는메소드 데이터필드를초기화하거나객체의사용을위해필요한초기화작업을수행 생성자의선언방법 생성자의이름은클래스와같은이름으로함 반환형이없음
생성자 class Circle { int r; public Circle( ) { r = 0 ; public Circle(int a) { r = a; public double getarea( ) { return r * r * 3.14; // 기본생성자 public class CircleArea2 { public static void main(string args[ ]) { Circle c = new Circle(5); System.out.println(c.getArea( ));
필드와메소드의접근제어자 접근제어자의종류 private 소속된클래스에서만사용가능 생략 같은패키지에서사용가능 protected 같은패키지와서브클래스에서사용가능 public 어디서나사용가능
필드와메소드의접근제어자 기타 static 객체생성없이클래스이름으로접근가능 static 필드는객체들이공유하는변수 static 메소드는 static 필드와 static 메소드만을사용함 final final 필드는상수 final 메소드는서브클래스에서오버라이딩불가 abstract abstract 메소드는몸체가없는메소드로서브클래스에서구현됨
클래스의상속 상속 부모클래스와자식클래스간의관계 부모클래스의일반적특성을물려받고고유의특성을추가하여자식클래스를정의함 기존자료형 ( 부모클래스 ) 을이용하여새로운자료형 ( 자식클래스 ) 을정의
클래스의상속 class Employee{ int nsalary; String szdept = null; public void dojob( ) { class Saleman extends Employee{ public Salesman( ) {szdept = "Sales Dept"; public void dojob( ) { class Developer extends Employee{ public Developer( ) {szdept = "Dev. Dept"; public void dojob( ) {
클래스의상속 class CSuper { static int nstatic; public int nnormalsuper; class CSub extends CSuper{ public int nnormalsub; public class StaticTest{ public static void main(string args[ ]) { CSuper sup = new CSuper( ); CSub sub1 = new CSub( ); CSub sub2 = new CSub( ); sub1.nstatic = 10; System.out.println("sup 의 nstatic: " + sup.nstatic); System.out.println("sub1 의 nstatic: " + sub1.nstatic); System.out.println("sub2 의 nstatic: " + sub2.nstatic);
인터페이스 인터페이스의의미 감춰진객체내부의데이터를외부에서사용할수있도록인터페이스를제공함 Java 의인터페이스 외부와의소통수단으로제공되는메소드들로구성 유사한클래스들의공통행위양식 abstract 메소드와상수로구성되는추상클래스와유사
인터페이스 Java 의인터페이스 인터페이스를정의할때 interface 키워드를사용 인터페이스를다중상속받는것이가능함 인터페이스의접근제어자는묵시적으로 public 메소드는자동으로 public abstract 필드는자동으로 public static final 인터페이스를상속받는클래스를정의할때 implements 키워드를사용
인터페이스 interface Movable { void add(double dx, double dy); void sub(double dx, double dy); interface Scalable { void mul(double s); void div(double s); class MovablePoint implements Movable, Scalable { double x, y; public void add(double dx, double dy) {x += dx; y += dy; public void sub(double dx, double dy) {x -= dx; y -= dy; public void mul(double s) {x *= s; y *= s; public void div(double s) {x /= s; y /= s;
다형성 다형성의의미 같지만다른것, 다르지만같은것 예 같은부모클래스를상속하는서로다른클래스들의개별기능은거시적으로는같지만미시적으로는서로다름 이질적객체리스트 메소드오버라이딩, 메소드오버로딩
다형성 다형성의활용 소스코드의재사용과확장성 상위클래스의메소드중필요한것만재정의하고나머지는재사용 기존코드의수정불필요 코드가독성 부모클래스관점에서이해가능
다형성 도형 draw 도형 p; p = new 사각형 ( ); p.draw( ); 타원 사각형 삼각형 draw draw draw
메소드오버라이딩 메소드재정의 자식클래스가부모클래스로부터상속받은메소드를다시구현하는것 접근제어자, 반환형, 인자를일치시켜야함 접근제어자의가시성이넓어져도됨 인터페이스를구현하는클래스들은메소드를다르게구현함 예 Object 클래스의 tostring( ) 과 equals( ) String 클래스의 tostring( ) 과 equals( )
다형성과오버라이딩 class Computer { int nmemorycapacity; int nhddcapacity; boolean qpowered = false; int poweron( ) {qpowered = true; int poweroff( ) {qpowered = false; interface Calculator { public void calculate(string order); class PersonalComputer extends Computer implements Calculator{ public void calculate(string order) { System.out.println("PersonalComputer: " + order); class Workstation implements Calculator{ public void calculate(string order) { System.out.println("Workstation: " + order);
메소드오버로딩 메소드중복정의 한클래스에서같은이름의메소드를여럿정의하는것 시그너처로메소드를구분할수있음 예 시그너처란메소드의이름과인자목록 한클래스에서정의되어있는여러생성자들
메소드오버로딩 System.out.println( ); System.out.println("Test string"); System.out.println(241); System.out.println(34.5); // 줄바꾸기출력
메소드오버로딩