NOW OR NEVER

[JAVA] 객체 지향 프로그래밍의 은닉성(Encapsulation) 본문

Back-End/JAVA

[JAVA] 객체 지향 프로그래밍의 은닉성(Encapsulation)

LAURA 2022. 4. 4. 16:53
반응형

객체 지향 프로그래밍 Object Oriented Programming(OPP)

  • ex)java, c++
  • 현실 세계의 모든 것으 객체화 할 수 있다(눈에 보이는 것일 수도 있고 개념적인 것일 수 있다.
  • 객체 : 세상을 구성하고 있는 모든 것을 객체라고 말 할 수 있다. 이 세상에서 유일하고 단 하나 밖에 없는 것이다.
  • 자바로 객체 지향 프로그래밍을 할 때에는 표현해야하는 대상에 대하여 속성과 동작을 분석하여 클래스를 먼저 만들어야 한다.

특징

  • 은닉성(encapsulation)
    • 클래스를 구성하고 있는 속성(data)들을 외부의 다른 클래스로부터 보호하는 것을 말한다.
    • 클래스를 만들 때 setter와 getter, constructor을 일일이 만들기 번거로움을 줄이고 자 이클립스 기능 사용
    • 모든 구성 요소들을 보호하게 되면 아예 그 클래스 자체를 사용할 수 없어 "접근 명시자" 만듦
      • 일반적으로 클래스 만들 때 멤버 변수(속성)들은 private 영역에 두고 멤버 메소드(동작)들은 public 영역에 둔다. 필요하다면 멤버 변수이지만 때에 따라 public에 있을 수도 있고 또 멤버 메소드이지만 private에 둘 수도 있다.
      • 보통은 private에 있는 멤버 변수에 접근하기 위해서는 멤버 변수에 직접 접근하는 것이 아니고 public에 있는 메소드를 통해 접근하도록 클래스를 만든다.
        • private : 외부의 어떠한 클래스도 접근할 수 없다. 멤버에 접근하여 값을 변경하는 것 뿐만 아니라 멤버에 접근하여 값을 읽어오는 것도 불가능하다.
        • public : 외부의 어떤 클래스라도 접근할 수 있다.
      • protected : 외부의 클래스로부터는 보호하되 상속한 자식 클래스에게는 접근 허용
      • 생략(default) : 외부의 클래스로부터는 보호하되 동일한 패키지에 있는 클래스들에게는 허용
  • 상속성
  • 다형성
    • 객체에게 시킨 일은 동일하다(객체에게 동일한 메세지를 주었다.) 하지만 객체마다 서로 동작하는 방식이 다르다.

클래스

  • 사용자 정의 자료형으로 볼 수 있다.
  • 기본 자료형(boolean, char, byte, short, int, long,float,double) 만으로는 프로그램 하기가 번거로워서 사용자(개발자)가 새로운 자료형(하나의 세트)을 만들 수 있다. 이때 이 자료형을 클래스라한다.
  • 클래스의 자료형을 사용하려면 객체를 생성해야 사용할 수 있다.
  • 변수 선언과 동시에 클래스에 따른 객체 생성하는 법 : 클래스이름 객체이름 = new 클래스이름;
  • 객체 참조 변수 : 자료형인것은 동일하지만 메모리에서 기본 자료형 그 변수 자신이 stack 영역에 할당되고 클래스로 만든 객체 변수들은 힙에 할당되어있는 객체를 가리킨다. 가리키고 있는 객체를 member라 부른다.
  • 객체.속성 = member멤버 접근 연산자(.)
  • 멤버 변수 : 클래스에 속한 속성
  • 멤버 메소드(함수) : 클래스에 속한 동작
    • 메소드 작성법 : 접근명시자 반환값자료형 메소드이름(입력값){}
      • 반환 값 즉 return 값이 없을 경우 반환값자료형은 void로 작성
    • 일반 메소드들은 호출문에 의하여 동작하고 메소드의 내용이 끝나면 메소드 호출한 쪽으로 return하게 되어 있다. 그래서 모든 메소드들은 return 하는 값의 자료형을 메소드이름 왼쪽에 써준다. 만약 리턴하는 값이 없을 시 void라 작성한다.
    • 설정자 setter : 멤버에접근하여 갑을 변경시키는 메소드들
    • 접근자 getter : 멤버 변수에 접근하여 값을 읽어오는 기능들(메소드들)

생성자 Constructor

  • 클래스 이름과 동일한 이름의 메소드를 말하며 객체 생성시에 자동 수행되어 멤버변수들의 값을 초기화 할 목적으로 사용하는 특수한 ㅁ소드
  • 생성자는 호출문에 의해 동작하는 것이 아니라 객체 생성시에 자동 수행하기 때문의 리턴의 개념이 없다.
    • 생성자는 일반 메소드처럼 호출 문에 의해서 동작하는 것이 아니고 _객체 생성시에 자동 수행_되기 때문에 return의 개념이 없다. 그래서 생성자함수 이름 왼쪽에 void를 작성하면 안된다(메소드 취급해버려서). 아무 것도 쓰지 않아야 한다.
  • 생성자는 꼭 대 문자를 첫 글자로 사용해야한다. 대소문자를 확실히 구별해줘야 한다. 소문자로 쓸 경우 메소드로 취급하기 때문이다.
  • 클래스 이름과 같은 이름을 가지는 메소드를 말하며, 객체 생성시에 자동으로 수행되어 멤버변수(들)의 값을 초기화할 목적으로 사용하는 특수한 메소드이다.
  • 생성자는 매개변수를 가질 수 있다.
  • 생성자의 중복(method overloading)
    • 생성자를 여러 개 만들어 사용할 수있다,
    • 생성자를 중복하여 정의하기 위해서는 생성자 함수의 매개변수의 개수나 자료 형이 달라야 한다.
  • 기본 생성자
    • 매개변수를 갖지 않는 생성자를 말하며 자바는 사용자가 생성자를 하나라도 만들지 않으면 기본 생성자를 제공한다.
    • 사용자가 생성자를 만들지 않으면 기본 생성자 즉 매개변수를 갖지 않는 생성자를 자동으로 제공한다. 그래서 Person p = new Person()와 같이 객체 생성 가능
    • 사용자가 생성자를 한 개라도 만들기 시작하면 자바는 더 이상 기본 생성자를 제공하지 않는다.
    • 내가 만든 생성자대로만 객체를 생성하거나 필요하다면 사용자가 기본생성자를 만들어야 한다.
    • 초기화
      • 문자열 : null
      • 정수 : 0
      • 실수 : 0.0
      • boolean : false

키워드 this

  • 메소드나 생성자의 매개변수이름을 의미있는 이름으로 정해주다 보면 멤버변수이름과 동일하게 됨. 이때 멤버 자신을 구별하기 위한 목적으로 this 사용
  • 멤버 메소드의 매개변수 작성시 버 멤버변수와 같은 이름으로 한다면 멤버변수가 그값으로 초기화 되지 않는다. 그래서 이를 방지하기 위해서 this를 사용한다면 둘이 똑같은 이름으로 작성해도 구별이 되어 초기화될 수 있다.
  • 매개변수 쓰지 않아도 this 사용 가능
  • this()
    • 생성자가 중복 정의되어 있을 때 생성자 안에서 또 다른 생성자를 요구할 때 사용하는 명령
    • 주의사항 : this() 키워드는 반드시 생성자 안에서 첫 번째 문장에 와야 한다. 다른 명령어가 이 키워드보다 먼저 올 수 없다.
    • 생성자 안에서 매개변수를 필요로 하는 다른 생성자를 요구할 때 사용

Tips

  • 파일 명 앞에 *이 붙어있으면 아직 저장이 되지 않은 것 이다.
  • eclipse wizard
    • 클래스를 만들 때 setter와 getter, constructor을 자주 작성하는 데 일일이 만들기 번거로움을 줄이고 자 이클립스 기능 사용
    • getter, setter : 마우스 오른 쪽 - source - Generate Getters and Setters
      • getter이름이 get변수이름인 다른 자료형과 달리 boolean의 경우 getter이름 is변수이름으로 생성됨
    • 매개 변수 없는 constructor : 마우스 오른 쪽 - source - Generate Constructors from Superclass
    • 매개 변수 없는 constructor : 마우스 오른 쪽 - source - Generate Constructors Using fields
Comments