JAVA 19일차

이희복·2023년 1월 19일
0

JAVA

목록 보기
26/41

정보은닉에 대하여 설명하시오.

Java는 객체지향 언어! (반대는 절차지향 언어(c언어))**

객체지향 언어의 특징

1) 정보은닉 information hiding 2) 상속 inheritance

3) 다형성 polymorphism (중요! 70%) 4) 캡슐화 encapsulation

(+ 추상화 abstraction)

정보 은닉을 하지 않고 프로그램을 만들어 사용자에게 제공했을 때, 사용자가 클래스의 데이터에 직접적으로 접근했으나(예를 들어 논리적 오류를 가진 값을 대입하는 등으로) 에러가 발생하지 않고(컴파일 오류가 발생하지 않고)프로그램이 실행되어 원래의 프로그램의 의도와 전혀 다른 결과가 도출되는 문제가 생길 수 있다. (⇒이것은 프로그램을 잘못 만든 것이긴 함.)

이런 문제들을 방지하기 위해서 접근 제한자를 이용해 외부에서의 직접적인 접근 권한을 제한하고 기능(메소드)을 통해 간접적으로 접근하도록 유도하는 것이다. (그래야 논리적 오류를 가진 값 등을 가지고 접근할 때 컴파일 오류로 이어지도록 만들 수 있다.)

정보은닉의 기본 원칙에 따라 인스턴스 변수는 public으로, 인스턴스 변수에 접근하기 위한 메소드 들은 public으로 선언하는 것이 관례이다.

접근제한자 4가지 종류에 대하여 설명하시오.

public > protected > default > private

각각의 접근 제한자는 변수, 메소드, 클래스의 접근 권한을 제한하기 위해서 사용되며, 변수, 메소드, 클래스 **이름의 맨 앞에 해당 키워드를 붙여 사용한다. (default는 아무것도 안붙임)

public

  • 모든 파일에서 접근 가능, 어디서든 인스턴스 생성이 가능하다.

  • private으로 선언된 데이터를 외부에서 활용하기 위해 getter, setter 같은 함수를 public으로 선언해서 사용한다.

  • public 클래스는 **외부에 노출시키기 위한 클래스이다.

  • 사용 예시: public static void main(String[] args){}

default

  • 동일 패키지로 묶인 클래스 내에서만**(같은 패키지 내에서만) 접근이 가능하고, 인스턴스 생성을 허용한다.

  • 이름 앞에 접근제한자를 붙이지 않으면** defalut이다.

= 아무 선언도 하지 않은것, default는 키워드가 아니다.

  • 사용 예시: class Circle { ... } /

protected

  • 다른 패키지에 있더라도 상속받은 클래스에서는** 접근 가능하다. (아직 안배움)

private

  • 같은 클래스 내에서만 접근 가능하다.

  • 데이터를 private으로 선언하고 끝냈을 때 의미가 있는 경우도 있지만, 외부에서 접근해서 쓸 수 있어야 하기 때문에 값을 가져가기 위한 getter, 값을 저장 수정하기 위한 setter함수를 public으로 선언해서 사용한다.

아래의 프로그램을 작성 하시오.

다음 멤버를 가지고 직사각형을 표현하는 Rectangle 클래스를 작성하라.

  • int 타입의 x, y, width, height 필드: 사각형을 구성하는 점과 크기 정보
  • x, y, width, height 값을 매개변수로 받아 필드를 초기화하는 생성자
  • int square() : 사각형 넓이 리턴
  • void show() : 사각형의 좌표와 넓이를 화면에 출력
  • boolean contatins(Rectangle r) : 매개변수로 받은 r이 현 사각형 안에 있으면 true 리턴
  • main() 메소드의 코드와 실행 결과는 다음과 같다
    public static void main(String[] args) {
    Rectangle r = new Rectangle(2, 2, 8, 7);
    Rectangle s = new Rectangle(5, 5, 6, 6);
    Rectangle t = new Rectangle(1, 1, 10, 10);

r.show();
System.out.println("s의 면적은 "+s.square());
if(t.contains(r)) System.out.println("t는 r을 포함합니다.");
if(t.contains(s)) System.out.println("t는 s를 포함합니다.");
}

출력:

(2,2)에서 크기가 8x7인 사각형
s의 면적은 36
t는 r을 포함합니다.



0개의 댓글