추상화
추상화란 중요한 것은 남기고, 불필요한 것은 제거하는 것이다. 즉, 먼 미래까지 대비해서 클래스를 만들 필요는 없다. 예를들어, 고객 클래스를 만든다면, 이름, 성별, 나이가 필요하다면 그것만 가지도록 하고, 기능도 필요한 것만 가지도록 한다.
캡슐화
관련된 것을 잘 모아서 가지고 있는 것을 캡슐화라고 한다. 관련된 것을 잘 모아서 가지고 있을수록 응집도가 높다고 표현한다. 예를들어, Math라는 이름만 기억하면 수학과 관련된 기능이 필요할때 Math를 사용하면 되겠구나하는 점이 캡슐화가 잘된 것이다.
좋은 객체? 나쁜 객체?
자바는 객체 지향 프로그래밍 언어이고, 클래스가 설계도라면 이 클래스가 인스턴스가 되어 메모리에 올라갔을때 이 것을 객체라고 한다. 이때, 좋은 객체는 응집도는 높고, 결합도는 낮아야 한다. 그렇다면 좋은 객체는 무엇일까? 각 객체는 책임을 가진다. 즉, 객체가 본연의 책임을 잘 하는 것이 좋은 객체이다. 예를들어, 건조기가 건조기의 기능들을 잘 가지고있다면, 응집도가 높다고 말할 수 있다.
그렇다면 결합도가 낮다는 것은 무슨 의미일까? 에를들어, 컴퓨터를 샀는데 부가적인 장비가 있어야만 컴퓨터가 동작한다면 컴퓨터의 사용성은 떨어질 것이다. 따라서 물건을 사용할 때, 결합도가 낮을수록 사용이 편리한 것이다.
결론적으로 좋은 객체를 만들때, 관련된 기능을 잘 모아서 가지고있어야 하고, 객체와 객체 간에는 결합도를 낮춰야 하는 것이다.
System.out.println(..)
println()은 "인자를 출력하고, 줄바꿈을 하는 기능"이다. 여기에서 인자는 int, float, double, String 등이 될 수 있는데, 중요한 것은 메서드 이름이 같다는 것이다.
다형성 - Method Overloading
같은 이름의 메서드가 여러 개가 있는데, 매개 변수의 타입이 다르거나 매개 변수의 개수가 다른 경우를 Overloading했다고 말한다. 이 때, 어떤 메서드가 실행될지는 JVM이 실행하면서 동적으로 결정하게 된다.
즉, 정수를 출력하는 메서드 이름을 printInt(), 문자열을 출력하는 매서드 이름을 printString() 처럼 어떤 타입을 출력하느냐에 따라 메서드 이름이 달라진다면 사용자는 외워야할 메서드 수가 늘어나서 힘들어지게 된다. 여기서 Method Overloading을 적용해 객체를 사용할 때 편리하게 사용할 수 있도록 하여 사용성을 높이는 것이 중요하다. 그래서 다형성이 중요한 것이다.
즉, 서비스 정신을 가져야 한다. 나는 클래스를 어렵게 만들더라도, 내가 만든 클래스를 사용하는 사람은 쉽게 사용하도록 만들어야 한다.
인용
https://youtu.be/9XYYaXCs-nQ?si=1C_hWdAhF7jRmR9A
'Language > Java' 카테고리의 다른 글
상속 (0) | 2023.09.14 |
---|---|
Package (0) | 2023.09.13 |
자바 버전별 메모리 영역과 인스턴스 생성 (0) | 2023.09.13 |
클래스 메서드에서 인스턴스를 필드를 사용하지 못하는 이유 (0) | 2023.09.13 |
클래스 필드(static field)에 대한 고찰 (0) | 2023.09.13 |