CheerUp_Cheers

클래스 본문

인프런/개체지향 프로그래밍 및 설계 (Java)

클래스

meorimori 2020. 11. 25. 17:43

생성자

프로그래밍의 실수를 줄여줌

 -> 실수를 줄여주게 강제하기 때문.

 -> 개체 생성한방에 생성해놔라(구조체는 하나씩 대입)

 

- 특징

 개체 생성시 자동으로 호출되는 특수 함수

 반환값 : 반환 값이 없어요.(void가 아니에요~)

 함수명 : 클래스명과 같아요.

 매개 변수를 받지않는 생성자는 꼭 필요해~

 

- default 생성자

 프로그래머가 생성자를 제공하고 나면, 기본 생성자는 생기지 않음.

 하나라도 생성자를 만들면, 기본생성자는 만들어주자.

 

#왜 개체 생성후 값을 대입하면 안좋을까?

1) 개념상의 문제

 공장에서 찍어나온 물건이 속이 비어있네??

 

2) 후조건의 문제

 생성자도 함수이기 때문에

 생성자의 후조건 : '개체의 상태는 개체 생성과 동시에 유효하다'

 

3) 사용자를 고려 안한 문제

 - 사용자란?

  내가 만든 클래스를 사용하는 코드 혹은 프로그래머

  나 자신이 될 수 있고, 남이 될수도 있음.

 

 - 문제 : 사용자의 실수를 유발

  클래의 맴버변수가 많은데, 어떤것을 초기화 해야하는지 알수 있어?

  어떤값으로 초기화 해야해? ( 클래스가 저장되 있는 파일을 열어서 보게됨 )

   -> 직접 대입하면 중복된 코드에요..

   -> 나중에 이거 지웁시다.. 다른 코드도 다 지워야하네

  나중에 멤버 변수 추가할때 기존 초기화 코드를 업뎃 안한다면..? 

   -> 컴파일은 되는데 실행할떄 오류가 나오니까, 생성자를 만들어서 규제.

 

 


 

getter, setter

 

#getter, setter를 만들 바에는 public 하는게 좋지않아요?

  - 개념적으로는

  -> 클래스가 스스로 책임지게 하는게 oop

  -> getter, setter할 때 중간의 어떠한 과정을 해줄수도있음(클래스를 작성한 프로그래머가 잘아니까)

 

 - 함수를 통한 데이터 접근의 객관적인 장점

 1) 멤버 변수에서 저장하지 않고 필요할 때마다 getter에서 계산 가능 ( 모르겠다 )

 2) setter에서 추가적인 로직을 실행할 수 있음

  -> ex) 음수의 나이가 인자로 올경우 무시

 3) 상속을 통한 다형성 구현 가능

 

#setter가 절대 없는게 좋다고 말하는 사람 많은데??

개체의 상태는 개체 스스로 판단해서 바꿔야하지,
호출자가 자기 맘대로 바꾸는건 아니지 않냐.

 

- 다음은 베스트 프락티스

1) 멤버 변수는 무조건 private

2) 새 개체는 유효하도록

 생성자를 통해서 만드는 통한 유효하게 하자.

 그래야 실수를 줄일 수 있다.

3) getter는 자유롭게 추가

 어떤 정보든 보여줘도 큰문제없으니 자유롭게

 하지만, 개체는 좀 그렇다.

  -> 레퍼런스를 반환하기 때문에, 그 객체를 바꿀수 있기 때문에..

  -> 위의 'setter가 없는게 좋지 않겠는가?'가 이런 이유 떄문.

4) setter는 고민 후 추가.

중요 : 개체가 불확실한 상태로 되는 경우를 최대한 막기 위함.

필요할떄 만들어라..(언젠가 미래를 위해 만든다는건 x)

 ->setter는 개체의 캡슐화를 망칠수도있으니까..

 


캡슐화, 추상화

 

#캡슐화

개체의 데이터와 동작을 하나로 묶음
내부의 데이터를 외부로부터 보호
캡슐화는 데이터 추상화를 이루는 방법중 하나

사용자가 클래스 속을 알 필요가 없음

함수를 분리할떄 적용했던 원칙을 클래스에도 적용할 것.

 -> 중복된 코드는 private로 메서드

 

#추상화

OOP에서 추상화란 어떤 구체적으로 직접 손대지 않겠따

 

- 추상 자료형(ADT)쪽 관점

 사용자는 클래스를 자료형으로 사용 가능

 클래스 안의 멤버변수가 정확히 뭔지 몰라도 됨.

 클래스로부터 개체 생성 가능

 

- 절차적 데이터 추상화쪽 관점

 데이터를 직접 조작하는 대신 메소드 호출.

 

- 추상화 단점

 1) 동작없이 데이터만 있는 클래스는 쓸데없는 코드만 늘어남

  ex) DTO

 2) 어떻게 추상화를 해야하는지 뚜렷한 객관적 기준이 없음

  -> 실체없는 개념을 이해하기 힘듬

  -> 이해하더라도 각자 달리 이해