CheerUp_Cheers
클래스 본문
생성자
프로그래밍의 실수를 줄여줌
-> 실수를 줄여주게 강제하기 때문.
-> 개체 생성한방에 생성해놔라(구조체는 하나씩 대입)
- 특징
개체 생성시 자동으로 호출되는 특수 함수
반환값 : 반환 값이 없어요.(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) 어떻게 추상화를 해야하는지 뚜렷한 객관적 기준이 없음
-> 실체없는 개념을 이해하기 힘듬
-> 이해하더라도 각자 달리 이해
'인프런 > 개체지향 프로그래밍 및 설계 (Java)' 카테고리의 다른 글
Static, 싱글턴, 내포 클래스 - 디자인 패턴 (0) | 2020.12.01 |
---|---|
Static, 싱글턴, 내포 클래스 (0) | 2020.11.26 |
개체 모델링1 (0) | 2020.11.26 |
개체지향 프로그래밍의 필요성 (0) | 2020.11.25 |
자바 언어의 기본 문법 (0) | 2020.11.25 |