정보처리기사_실기16_Java02

박하영·2022년 4월 6일
0
post-thumbnail

Java Programming 02 (객체지향) Class & Object

  • 다음 프로그램이 오류가 나는 이유는?

->

  • 이유: 클래스 BungeoBBangTl에서 객체를 찍어낼 때 "final"을 써서 고정값으로 x에 10을 주었기 때문에, 객체 생성후에 객체명.x 를 통해 접근해서 x값을 바꾸려한다면 오류가 나는 것 이다.

 

Static vs Non-Static

Static과 Non-Static(Public 예시)

  • static 메소드인 myStaticMethod()는 그냥 호출해도 아무 문제 없이 그안에 실행 내용이나 출력내용이 실행되지만, Non-Static(Public) 메소드인 myPublicMethod()는 객체를 만들어주지 않고 똑같이 그냥 호출하면 에러가 발생한다. 따라서, 예제에서처럼 Bungeo라는 객체를 만들고 이를 통해서 Bungeo.myPublicMethod()로 호출해주어야 한다.

 

생성자(Constructor)

클래스와 같은 이름을 가지고 있는 것이 생성자이다. 예제에서는 public 이후에 나오는 위의 class와 같은 이름을 가지고 있는 메소드 이다.

  • 생성자는 객체를 생성할 때 내가 따로 호출하지 않아도, 자동 실행되는 것이 바로 생성자이다.
    -> 생성자는 필요할까?
    --> 생성자는 초기값을 주기 위해 존재한다.
    ---> 따라서, 객체를 만들 때에 내가 지정하지 않아도, 초기값을 줄 수 있게 하는것생성자이다.

 

접근 제어자(Access Modifier): 속성, 메서드, 생성자

위의 부분에서 시험문제에 나올만한 부분은 protected와 private정도인데, protected가 그나마 관대한편이고 private이 가장 야박하다.

protected

  • protected는 다른 클래스에서는 접근이 불가하지만, 상속 받으면 그 클래스 한정해서만 접근이 가능하다.

private

  • private는 상속 받은 클래스라 하더라도 접근이 불가능하다. 따라서 위의 그림에서 schoolYear 부분을 받아오지 못 했기 때문에, x친 부분에서 에러가 난다.

  • private으로 선언된 속성값들에 대해서 온전히 본인 클래스안에서만 값에 접근이 가능하고, 때문에 클래스 내에서만 이를 호출하거나 접근했을 때 에러없이 수행이 가능하다.

 

abstract

-> abstract는 상속 관계에서 상위 클래스에서 abstract로 선언된 속성이나 메서드 등 값에 대하여 자식 클래스에서 반드시 해당내용을 기술하라는 의미이다.

-> 이전의 예제에서 son 클래스에서 whatrudoing()부분에 대한 기술내용을 삭제했기 때문에 위 코드는 에러가 발생한다.

은닉(Encupsulation)

다음 프로그램이 오류가 나는 이유는?

-> 에러는 myObj.name으로 Person 클래스에서 private으로 선언된 name 속성에 접근하려할 때 발생한다. 그렇다면 어떻게 해야할까? 그리고 은닉이 이거랑 무슨 상관일까?

똑같은 코드 내용인데, myObj.name이 아니라 myObj.setName()으로 setName이라는 Person클래스 내에 있는 메소드를 통해서 준혁이라는 값을 넘겼다. 이렇게 하면 원하는 결과도 실행되고 에러도 발생하지 않을 수 있다. 이게 바로 은닉인데, private을 직접 액세스하지 못해도, getter setter를 통해서 액세스를 할 수 있고, 원하는 결과값을 얻을수가 있다는 것이다.

profile
RM_young

0개의 댓글