본문 바로가기

KOSTA

KOSTA 교육(객체지향, 생성자, 접근제어자, 예외)

배운 내용

 

  1. 접근제어자
  2. 예외(Exception)
  3. 학생관리프로그램 예제

어제는 ‘전화번호부'를 만들며 객체지향과 생성자를 이해하였다. 오늘은 추가적으로 ‘성적관리' 예제를 통하여 접근제어자까지 추가하여 학습하였다. 먼저 접근제어자에 대한 사항을 먼저 공부하고 예제로 넘어가도록 하자.

 

1. 접근제어자

접근제어자는?

말 그대로 접근을 제어하는 것을 말한다.

 

  • Class, 메소드, 변수에 접근제어자를 붙여 사용하지만 대부분은 변수에 사용된다.
  • 종류는 총 3가지이다.
  • private : 클래스 내에서만 접근이 가능하며 가장 접근이 엄격하다.
  • default : 같은 패키지 안에서 접근이 가능하다.
  • protected : 같은 패키지 안에서 상속관계에 있다.
  • public : 누구나 접근이 가능하다.

2. 예외(Exception)

익셉션은?

java에서 에러를 지칭하는 용어로 사용된다.

 

  • try문은 익셉션 처리에 사용되는 명령문으로 적극적으로 오류를 처리하고 가장 자주 사용하는 방법이다.
  • throw문은 동일한 명령문이며 소극적으로 오류를 처리한다.
    특징은 임의적으로 예외를 발생시키고 throws를 통해 오류를 회피한다.
  • 익셉션은 중괄호 안에 모든걸 선언한다.

예제를 보며 학습해보자.

 

  • 먼저 try문 내에 1, 2를 catch는 3 finally는 4, 5를 출력하려고 한다.
  • try문에선 1은 특이사항이 없으니 바로 출력이 될 것이고 다음줄 a는 10/0이 선언되어있다.
  • 이 선언은 나누기가 불가하다. 때문에 밑의 2는 출력이 되지 않고 예외가 발생하여 catch문으로 바로 이동하여 3을 출력하고 e.printStackTrace();를 선언하여준다. 이 때 catch문엔 Exception e 를 함께 선언해주어야한다.
  • 다음 finally문에선 예외를 해결하였으니 무리없이 4, 5가 실행이 된다.
  • 만약 여기서 10/1처럼 예외가 없다면 catch문은 출력되지 않고 1, 2, 4, 5가 출력된다.

 

  • a와 b를 add메소드의 파라미터 값으로 선언하고 a-b를 선언, if문을 이용해 0보다 sum이 작다면 음수는 싫다고 출력이 된다.
  • 이 때 throws Exception을 통하여 에러를 회피하여준다.
  • main메소드에 try문을 사용하여 a=10, b=20으로 음수가 나올 때 catch문으로 이동하여 음수는 싫다고 출력이 된다.

성적관리 프로그램을 예제로 들어 학습해보자

 

  • student클래스를 생성하여 학생 이름, 과목을 변수로 선언
  • default 생성자를 생성
  • 생성자로 name을 생성하고 과목에 해당되는 객체를 생성
  • 접근제어자의 setter, getter 생성

 

  • 키보드로 입력받기 위해 Scanner 사용
  • Manager클래스를 m1객체로 생성
  • 반복을 위해 while(true)와 switch문을 사용하여 선택 시 실행될 수 있도록 생성

 

  • studentNum 변수를 통해 변하는 학생에 대응할 수 있도록 생성
  • 학생의 이름, 점수를 배열로 관리하기 위해 students로 10개의 배열을 생성
  • 접근제어자로 인한 setter, getter 생성
  • add메소드는 배열을 사용하여 학생이 추가될 때마다 studentNum을 이용하여 배열에 추가
  • search메소드는 index를 -1로 설정하여 이름이 같다면 i = index가 되어 출력이 되고 그렇지 않다면 출력되지 않는다.
  • allPrint메소드는 배열 내의 모든 학생을 출력하는데 10까지의 배열이 있을 때 이하의 학생이 있다면 nullPointerException이 출력되기 때문에 새로운 배열을 생성하여 현재 학생 수 만큼 studentNum으로 생성하여 출력한다.
  • rank메소드는 내림차순으로 정렬한다면 동일하게 학생 수와 배열이 맞아야하므로 배열을 새로 생성하고 주소값 배열 0부터 학생 수 까지 비교해야 하기 때문에 2중 for문을 사용한다. 0,1 0,2 0,3 1,2 1,3….. 이런식으로 밀어내서 큰 값이 앞자리와 교대하여 정렬할 수 있도록 하였다.