4장 연습문제

1. 객체지향 프로그래밍의 의미와 특징을 설명하시오.

객체지향 프로그래밍>> 수행할 작업과 필요한 데이터들을 묶어서 독립적인 객체를 만들고, 이런 객체들을 인터페이스로 연결하여 전체 프로그램을 구성하는 방식의 프로그래밍 기법

객체지향 프로그래밍의 특징>>

캡슐화

- 캡슐화는 객체 내부의 메소드와 데이터를 외부에서 사용할 수 없도록 감싸서 객체를 독립적인 프로그램 부품으로 만드는 것. 데이터 은닉(data hiding)

코드의 재사용 : 상속

- 새로 작성할 객체가 이미 작성해 놓은 객체와 유사한 특성을 갖고 있다면, 그 객체의 코드를 그대로 물려받고 추가되는 부분의 코드만 작성하여 새로운 객체 생성.

다형성

- 객체의 다형성이란 같은 이름의 메소드가 상황에 따라 다른 연산을 수행하는 것.

2. 자바 프로그램에서의 캡슐화 방법을 설명하시오.

>> 자바 클래스 내부의 멤버들을 캡슐화하기 위해 접근 제어자 사용.

3. [예제 4-5]의 StudentScore 클래스를 자식 클래스가 아닌 일반 클래스로 다시 작성하시오.

>>

class StudentScore {

private String  dept, stdNo, name;

private int kor, eng, math, sum;

private double ave;

StudentScore(String dept, String stdNo, String name,

int kor, int eng, int math){

this.dept = dept;

this.stdNo = stdNo;

this.name = name;

this.kor = kor;

this.eng = eng;

this.math = math;

this.sum = 0;

this.ave = 0.0;

}

public int getSum(){

sum = kor + eng + math;

return sum;

}

public double getAve(){

ave = sum/3.0;

return ave;

}

public void getStdInfo(){

System.out.println("** 학생 정보 출력 **");

System.out.println("학과 : " + dept);

System.out.println("학번 : " + stdNo);

System.out.println("이름 : " + name);

}

public void getStdScore(){

System.out.println("** 학생 점수 출력 **");

System.out.println("국어 : " + kor);

System.out.println("영어 : " + eng);

System.out.println("수학 : " + math);

System.out.println("총점 : " + getSum());

System.out.println("평균 : " + getAve());

}

}

class Ex_Student{

public static void main(String args[]){

StudentScore s_s = new StudentScore("컴퓨터과학과","20072140","홍길순",

91, 80, 95);

s_s.getStdInfo();

s_s.getStdScore();

}

}

4. 상속 관계의 클래스를 예를 들어 작성하고, 코드 재사용의 의미를 설명하시오.

>>

class  StudentInfo{

protected String  dept, stdNo, name;

StudentInfo(String dept, String stdNo, String name){

this.dept = dept;

this.stdNo = stdNo;

this.name = name;

}

public void getStdInfo(){

System.out.println("** 학생 정보 출력 **");

System.out.println("학과 : " + dept);

System.out.println("학번 : " + stdNo);

System.out.println("이름 : " + name);

}

}

class StudentScore extends StudentInfo{

private int kor, eng, math, sum;

private double ave;

StudentScore(String dept, String stdNo, String name,

int kor, int eng, int math){

super(dept, stdNo, name);

this.kor = kor;

this.eng = eng;

this.math = math;

this.sum = 0;

this.ave = 0.0;

}

public int getSum(){

sum = kor + eng + math;

return sum;

}

public double getAve(){

ave = sum/3.0;

return ave;

}

public void getStdInfo(){

super.getStdInfo();

}

public void getStdScore(){

System.out.println("** 학생 점수 출력 **");

System.out.println("국어 : " + kor);

System.out.println("영어 : " + eng);

System.out.println("수학 : " + math);

System.out.println("총점 : " + getSum());

System.out.println("평균 : " + getAve());

}

}

상속을 이용한 코드 재사용>> 새로 작성할 클래스가 이미 작성해 놓은 클래스와 중복된 특성을 갖고 있는 경우, 기존 클래스의 중복된 코드를 그대로 상속받아 재사용하고 추가되는 부분의 코드만 작성하여 새로운 클래스를 생성.

5. 소프트웨어의 위기 현상과 거리가 먼 것은?

가. 유지보수의 어려움

나. 성능 및 신뢰성의 부족

다. 개발 인력의 급증

라. 개발기간의 지연 및 개발 비용의 증가