객체지향
[OOP] 무분별한 Getter/Setter를 지양하라
[OOP] 무분별한 Getter/Setter를 지양하라
2023.03.16무분별한 Getter/Setter를 지양하라? 우리는 보통 개발을 할 때 getter와 setter 메서드를 생성하여 자주 사용하곤한다. 그리고 매우 편리하다. 하지만 이렇게 모든 멤버변수에 대해 getter/setter를 생성하여 사용하는 것이 좋을까? 객체지향 설계 시에 이를 지양하는 것이 좋다고 한다. 왜 그럴까? Setter를 지양하라? 개발은 혼자가 아니다 setter를 무분별하게 사용하면 다른 개발자가 해당 코드를 봤을 때 값을 변경한 의도를 파악하기 힘들어진다. public static void main(String[] args) { Lotto lotto = new Lotto(List.of(1, 4, 12, 32, 40, 41)); lotto.setNumbers(List.of(13, 14, ..
[OOP] 원시 타입을 포장하라
[OOP] 원시 타입을 포장하라
2023.03.15원시 타입 원시 타입(Primitive Type)은 알다시피 실제 데이터 값을 저장하는 타입으로 평소 많이 사용하는 형태이다. 원시 타입에는 보통 boolean, char, int, double 등 여러가지가 있다. 원시 타입을 포장하라? 원시 타입의 값을 객체로 포장하면 객체지향적으로 얻을 수 있는 이점들이 많다. 그럼 한 번 무엇이 있는지 살펴보자. 자신의 상태를 객체 스스로 관리할 수 있다 Wallet이라는 클래스에서, 사용자의 돈(cash)을 가지고 있다고 가정해보자. public class Wallet { private int cash; public Wallet(int money) { this.cash = cash; } } 위 형태처럼 원시 타입인 int로 돈을 가지고 있으면 어떨까? 일단 다음..
[OOP] 상속보다는 조합을 사용하자
[OOP] 상속보다는 조합을 사용하자
2023.03.15상속을 왜 사용하는가? 먼저 제목 내용을 살펴보기 전에 상속을 왜 사용하는지에 대해 생각해 볼 필요가 있다. 우리는 상속을 왜 사용하는가? 먼저 대부분의 이유는 다음과 크게 다르지 않다고 생각한다. 코드를 재사용하여 중복을 줄인다 변화에 대해 유연해지고 확장성이 증가한다. 개발 시간이 줄어든다. 하지만 위 내용은 상속을 적절히 사용했을 경우에만 해당한다. 상속을 잘못 사용하게되면 변화에 유연하지 않고 에러를 내기 쉽다. 상속의 단점 상속은 상위 클래스의 구현이 하위 클래스에 노출되기 때문에 캡슐화를 깨트린다. 캡슐화가 깨짐으로써 하위 클래스가 상위 클래스에 강하게 결합, 의존하게되고 강한 결합과 의존은 변화에 유연하게 대처하기 어려워진다. 예제를 통해서 살펴보자. 다음 예제는 로또 번호와 당첨 번호를 가..
[OOP] instanceof의 사용을 지양하라
[OOP] instanceof의 사용을 지양하라
2023.03.14instanceof? instanceof는 인스턴스의 타입을 확인하는데 사용하는 연산자이다. 즉, 다음과 같은 형식으로 사용할 수 있다. 다음은 car이 Avante에 해당하는지 체크하는 조건문이다. if (car instanceof Avante) { System.out.println("is Avante"); } instanceof의 사용을 지양하라? 유용해보이는데 왜 지양하라고 하는 것일까? 객체지향적이지 못하기 때문이다. instanceof 보다는 다형성을 활용하여 작성하는 것이 권장되는데, 그 이유가 무엇일까? 다형성 vs instanceof 다형성 interface Car { void operate(); } class Avante extends Car { public void operate() {..