객체지향프로그래밍 IT CookBook, 자바로배우는쉬운자료구조
q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2
q 객체지향프로그래밍의이해 v 프로그래밍기법의발달 A 군의사업발전 1 단계 구조적프로그래밍방식 3
q 객체지향프로그래밍의이해 A 군의사업발전 2 단계 객체지향프로그래밍방식 4
q 객체지향프로그래밍의이해 v 객체란무엇인가 객체 (Object) 객체지향프로그래밍을구성하는단위 확장과재사용이가능한독립적인프로그램부품 정해진인터페이스를통해서만외부와연결 5
q 객체지향프로그래밍의이해 v 객체의특징 캡슐화 (encapsulation) 객체내부의메소드와데이터를외부에서사용할수없도록감싸서객체를독립적인프로그램부품으로만드는것 지정한인터페이스를통해서만외부와연결 정보공개 데이터은닉 (data hiding) 캡슐화 6
q 객체지향프로그래밍의이해 코드의재사용 개발비용을줄이고신뢰성과생산성을높이는특징 객체재사용 Ø 기존객체의인터페이스를맞추어새로운프로그램에서재사용 상속 (inheritance) Ø 새로필요한객체가기존객체와유사한경우, 기존객체의코드를상속받고추가되는부분만작성하여객체를생성하는방법» 기존객체 : 부모객체 (parent object), 상위객체 (super object)» 상속받는새로운객체 : 자식객체 (child object), 하위객체 (sub object) 7
q 객체지향프로그래밍의이해 다형성 (polymorphism) 같은이름의여러메소드가필요할때선택적으로수행되는특징 사람언어에서의다형성예 1) 배가아프다. 2) 가을에는배가맛있다. 3) 배를타고제주도에갔다. 8
v 자바의캡슐화구현 캡슐화된클래스를조합하여프로그램구성 class 키워드를사용하여클래스생성 Ø 클래스는객체를생성하는틀 클래스내부의멤버들을캡슐화하기위해접근제어자사용 Ø Ø Ø Ø public 모든클래스에서접근가능 protected 같은패키지의클래스와자식클래스에서접근가능 default 같은패키지의클래스에서만접근가능 private 외부클래스에서의접근불가 9
접근제어자에따른접근허용범위 10
접근제어자에따른접근허용범위 11
접근제어자를사용하지않는클래스 01 class AccessControl_1{ 02 int num1, num2, sum; 03 double ave; 04 AccessControl_1(int a, int b){ 05 this.num1 = a; 06 this.num2 = b; 07 } 08 int getsum(){ 09 sum = num1 + num2; 10 return sum; 11 } 12 double getave(){ 13 ave = sum/2.0; 14 return ave; 15 } 16 } 17 [ 예제 4-1] 12
18 class Ex_AccessControl_1{ 19 public static void main(string args[]){ 20 AccessControl_1 test1 = new AccessControl_1(10, 20); 21 System.out.println("sum = " + test1.getsum()); 22 System.out.println("average = " + test1.getave()); 23 } 24 } [ 예제 4-1] 실행결과 13
AccessControl_1 클래스의멤버에대한데이터은닉표현 14
private 과 public 접근제어자를사용하여캡슐화한클래스 01 class AccessControl_2{ 02 private int num1, num2, sum; 03 private double ave; 04 AccessControl_2(int a, int b){ 05 this.num1 = a; 06 this.num2 = b; 07 } 08 public int getsum(){ 09 sum = num1 + num2; 10 return sum; 11 } 12 public double getave(){ 13 ave = sum/2.0; 14 return ave; 15 } 16 } 17 [ 예제 4-2] 15
18 class Ex_AccessControl_2{ 19 public static void main(string args[]){ 20 AccessControl_2 test2 = new AccessControl_2(10, 20); 21 System.out.println("sum = " + test2.getsum()); 22 System.out.println("average = " + test2.getave()); 23 } 24 } [ 예제 4-2] 실행결과 16
AccessControl_3 클래스의멤버에대한데이터은닉표현 17
private 접근제어자를사용하여캡슐화한클래스 01 class AccessControl_3{ 02 private int num1, num2, sum; 03 private double ave; 04 AccessControl_3(int a, int b){ 05 this.num1 = a; 06 this.num2 = b; 07 } 08 private int getsum(){ 09 sum = num1 + num2; 10 return sum; 11 } 12 private double getave(){ 13 ave = sum/2; 14 return ave; 15 } 16 } 17 [ 예제 4-3] 18
18 class Ex_AccessControl_3{ 19 public static void main(string args[]){ 20 AccessControl_3 test3 = new AccessControl_3(10, 20); 21 System.out.println("sum = " + test3.getsum()); 22 System.out.println("average = " + test3.getave()); 23 } 24 } [ 예제 4-3] 실행결과 19
AccessControl_3 클래스의멤버에대한데이터은닉표현 20
v 자바의상속구현 부모클래스의중복된멤버를상속받아자식클래스생성 Ø 중복된멤버를가지고있는두클래스예 Ø 상속관계로재구성 21
StudentInfo 클래스 : 부모클래스 Ø 자식클래스에서의접근을허용하기위해서 protected 접근제어자사용 01 class StudentInfo{ 02 protected String dept, stdno, name; // ❶ 03 StudentInfo(String dept, String stdno, String name){ 04 this.dept = dept; 05 this.stdno = stdno; 06 this.name = name; 07 } 08 public void getstdinfo(){ 09 System.out.println("** 학생정보출력 **"); 10 System.out.println(" 학과 : " + dept); 11 System.out.println(" 학번 : " + stdno); 12 System.out.println(" 이름 : " + name); 13 } 14 } [ 예제 4-4] 22
StudentScore 클래스 : 자식클래스 Ø 상속받을부모클래스가무엇인지명시 class 자식클래스이름 extends 부모클래스이름 01 class StudentScore extends StudentInfo{ // ❶ 02 private int kor, eng, math, sum; 03 private double ave; 04 StudentScore(String dept, String stdno, String name, 05 int kor, int eng, int math){ 06 super(dept, stdno, name); // ❷ 07 this.kor = kor; 08 this.eng = eng; 09 this.math = math; 10 this.sum = 0; 11 this.ave = 0.0; 12 } 13 public int getsum(){ 14 sum = kor + eng + math; 15 return sum; 16 } [ 예제 4-5] 23
17 public double getave(){ 18 ave = sum/3.0; 19 return ave; 20 } 21 public void getstdinfo(){ 22 super.getstdinfo(); // ❸ 23 } 24 public void getstdscore(){ 25 System.out.println("** 학생점수출력 **"); 26 System.out.println(" 국어 : " + kor); 27 System.out.println(" 영어 : " + eng); 28 System.out.println(" 수학 : " + math); 29 System.out.println(" 총점 : " + getsum()); 30 System.out.println(" 평균 : " + getave()); 31 } 32 } [ 예제 4-5] 24
StudentInfo 클래스와 StudentScore 클래스를호출하여사용하는클래스 01 class Ex_Student{ 02 public static void main(string args[]){ 03 StudentInfo s_i = new StudentInfo(" 컴퓨터과학 ","20072135", " 홍길동 "); 04 StudentScore s_s = new StudentScore(" 컴퓨터과학과 ", "20072140", " 홍길순 ", 91, 80, 95); 05 06 07 s_i.getstdinfo(); System.out.println(); 08 s_s.getstdinfo(); 09 s_s.getstdscore(); 10 } 11 } [ 예제 4-6] 25
결과화면 : [ 예제 4-4]~[ 예제 4-6] 의컴파일및실행화면 26
IT CookBook 자바로배우는쉬운자료구조 4 장끝