자바 객체 지향 프로그래밍 Ps lab 김윤경
1.객체지향이란? 객체=data+method 객체지향프로그래밍의 조건 1.encapsulation-객체내의 데이터는 객체외부에서는 메소드를 통해서만 조작가능. 2.inheritance- 이미 있는 객체의 속성을 물려받을 수 있음. 3.polymorphism-중복 정의된 메소드 호출시 시스너처 를 이용하여 적절한 메소드정의를 바인 딩함.
2.클래스와 객체 클래스-객체를 생성할 수 있는 모형,패턴 (기억장소를 할당하지 않음) 객체-어떤 클래스의 실체(instance)->data 를 위한 실제 기억공간을 할당 받음 Ex) 설계도☞클래스, 집☞객체 Instatiation(실체화)-클래스로부터 객체를 생성하는 것 Ex)Chess_piece bishop = new Chess_piece(); Constructor-생성된 객체를 초기화.
3. 별명(alias) 별명-여러 개의 객체참조변수가 하나의 객체를 참조 하고 있을 때, 이러한 참조변수들은 서로 별명이 된다. Ex) 일반변수와 참조변수의 차이점. int num1=5; int num2=10; num2=num1; Chess_piece bishop1=new Chess_piece(); Chess_piece bishop2=new Chess_piece(); bishop2=bishop1; bishop1 bishop2 bishop1 num1 num2 num1 num2 5 10 5 5 배정전 배정후 배정전 bishop2 배정후
4.가시성수식자(visilibility modifier) 용도-클래스 멤버들의 접근 특성을 지정 메소드형 현재클래스 자식클래스 현재패키지 다른패키지 Public o Private x Protected 공백(friendly)
5.Static 수식자 Static variable(클래스변수) 클래스의 모든 객체들이 공유. 한 클래스의 모든 객체에 대하여 오직 하나의 기억장소만 할당. 한 객체에서 정적 변수값을 변화시키면 다른 모든 객체에 영향을 미침. final로 선언된 상수는 보통 static으로 선언됨.
Static method(클래스메소드) 객체가 아닌 클래스자체를 통해서 호출됨. Static variable만 사용가능 – 클래스내의 다른 변수는 객체가 생성되기 전까지 존재하지 않음. static main() – 인터프리터가 main메소드를 포함하는 클래스의 객체를 생성하지 않고 실행하기 위해서 static으로 선언됨.따라서 main메소드는 정적변수와 지역변수만 사용가능.
6.상속 상속 기존의 클래스로부터 새로운 클래스를 유도하는 것. 자식클래스는 부모클래스의 메소드와 data를 포함하며, 수정, 추가 할 수도 있다. Is –a 관계: 자식클래스는 부모클래스보다 특성화된 기능을 수행함. 목적 : 소프트웨어 재사용 Book Parent class, super class, base class Child class, sub class, Dictionary Textbook Sibling(형제)
한 클래스는 한 부모 클래스와 여러 자식 클래스를 가질 수 있음. 구성자는 상속되지 않음- Super참조를 사용하여 자식클래스의 구성자내에서 부모클래스의 구성자를 호출. super참조가 없을 경우 자동적으로 super()가 호출됨. Ex) class Dictionary extends Book( public Dictionary(int pages){ super(pages); } } 한 클래스는 한 부모 클래스와 여러 자식 클래스를 가질 수 있음. 한 클래스의 객체참조변수는 자식클래스의 객체를 참조할 수 있음.
7.추상클래스와 메소드 추상메소드 본체문장이 없음. ex) abstract class food{ abstract public String slogan(); } //food클래스 class pepperoni extends food{ public String slogan() { return “Great for pizza”; } } //pepperoni클래스
추상메소드는 자식클래스에서 재정의됨.->추상메소드를 재정의 하지 않은 자식클래스는 반드시 추상클래스이어야함. 추상메소드를 포함하는 클래스는 반드시 추상클래스로 정의되어야 하지만, 추상클래스는 반드시 추상메소드를 포함하지 않아도 됨. 추상메소드는 final, static으로 정의될 수 없음.
10. 인터페이스 인터페이스-상수+추상메소드 다른 인터페이스의 확장이 가능. 하나의 클래스가 두개 이상의 인터페이스를 구현할 수 있음->다중 상속 인터페이스 내의 메소드는 암시적으로 public, abstract로 선언됨. 인터페이스내의 메소드는 이를 구현한 클래스에서 재정의됨. Ex) Interface image_file extends file { String print(); } class image implements image_file, binary_file{ public String print(){ return ”Image_file”; } }
11.Thread 쓰레드-한 개의 프로그램 내에서 동시에 이루어질 수 있는 작은 프로그램 단위. New thread Runnable Not Runnable Dead new Thread() yield() start() stop(),run()exit stop() suspend(),wait(),sleep(),I/O Resume(),notiry() <쓰레드의 상태>
쓰레드 프로그램 예제. class test extends Thread{ private String name; private int delay; public test(String id, int time){ name=id; delay=time; } public void run(){ try{ sleep(delay); } catch(InterruptedException e){} System.out.println(name); class thread_test { public static void main(String args[]){ test simple_test1=new test("kim",(int)( Math.random()*1000)); test simple_test2=new test("lee",(int)( Math.random()*1000)); simple_test1.start(); simple_test2.start(); }}