-
[Head First Java] Chapter 2 - 객체 마을로의 여행Dev 2021. 1. 20. 17:20
* 해당 포스트는 "Head First Java" 책을 읽고 난 이후의 정리 내용입니다.
자세한 내용은 "Head First Java" 책을 통해 확인해주세요.
객체(Object)에 대해 다루는 챕터
절차적으로 실행했을 때 조건으로 행동을 분기해서 사용하는 방식에서 벗어나
더보기절차적 관점에서의 행동 매핑
public static void rotate(String shapeType){ switch(shapeType){ case "AMOEBA": System.out.println("아메바 회전!"); // HIF 소리 출력 break; case "CIRCLE": System.out.println("원형 회전!"); // AIF 소리 출력 break; case "SQUARE": System.out.println("사각형 회전!"); // AIF 소리 출력 break; case "TRIANGLE": System.out.println("삼각형 회전!"); // AIF 소리 출력 break; default: System.err.println("도형이 뭔가 이상한데용?"); } }
Object를 활용해 행동을 자동으로 매핑하도록 사용하는 방법이라고 생각하면 될 것 같다.
더보기클래스 구조를 상위-하위의 상속 구조를 사용해 구성한 후 오브젝트를 생성해 사용
class Shape { public void rotate(){ logging(); } public void playSound(){ logging(); } private void logging(){ Date dt = new Date(); System.out.print(dt + ": "); } } class Circle extends Shape{ @Override public void rotate() { System.out.println("원형 회전!"); } @Override public void playSound() { System.out.println("원형 AIF 실행"); } } public class Main{ public static void main(String[] args){ Shape a = new Square(); a.playSound(); } }
위의 코드의 예처럼 하나의 화면에서 여러 종류의 도형이 존재하고, 각 도형을 클릭할 때의 이벤트를 발생시키려면 절차적 관점에서는 하나의 이벤트가 발생할 때 마다 그 이벤트에 대해 조건에 맞춰 특정 행동을 지정해줘야 한다.
결국 이는 유지보수에서의 장벽이 된다(하나만 고쳤을 뿐인데 사이드 이펙트를 여러 군데에서 고려해야 함)
오브젝트적 관점에서는 종류를 통해 분류를 하고(도형-사각형),
상위 클래스(혹은 인터페이스)에 추상화된 인스턴스 변수, 메소드를 정의해놓고
하위 클래스에서는 이를 extends(class), implements(interface)해 사용한다.
이를 통해 추상화된 대분류와, 구체화된 소분류로 나타내는 것이다.
Class vs Object
간단하게 얘기하면
Class: 청사진 OR 틀(실제 행동하는 친구가 아님),
Object: 실제 행동하는 친구(인스턴스라고도 불림)
라고 생각하면 될 것 같다.
Main에서 벗어나는 방법
main()은 Java 애플리케이션이 시작될 때 가장 먼저 접근하게 되는 진입점이다.
main()에 모든 로직을 담게 되면 하나의 method에 작성된 코드의 양이 방대해진다.
하나의 method에 코드의 양이 많아질 수록 구조는 점점 비효율적으로 바뀐다.
그럼 이제 바꿔보자.
더보기class Player { int number = 0; public void guess(){ number = (int) (Math.random() * 10); System.out.println("I'm guessing " + number); } } class GuessGame { Player p1; Player p2; Player p3; public void startGame(){ // 실제 게임이 구동되는 로직 } } public class GameLauncher { public static void main (String[] args) { GuessGame game = new GuessGame(); game.startGame(); } }
⏩추가
더보기기본적으로 Java나 다른 OOP 관점에서의 언어들은 SRP라 하는 단일 책임 원칙을 가지고 있어야 한다.
다음 링크는 SOLID에 대해 정리해주신 포스트이다.
velog.io/@kyle/%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5-SOLID-%EC%9B%90%EC%B9%99-%EC%9D%B4%EB%9E%80
⏩추가2
자바 프로그램? 애플리케이션? - 여러 클래스들이 하나의 main 진입점을 가지고 작성된 하나의 프로그램
묶을 때에는 jar 등을 통해 묶어 사용할 수 있다.
'Dev' 카테고리의 다른 글
[Head First Java] Chapter 4 - 객체의 행동 (0) 2021.01.24 Zulu Java 8 설치 (0) 2020.06.05