분류 전체보기

    SOLID

    SOLID

    SOLID는 올바른 객체 지향 설계를 위해 지켜야 할 5가지 원칙이다. SRP (Single Responsibility Principle) 하나의 객체는 하나의 책임만을 가져야 한다. OCP (Open-Closed Principle) 객체는 확장에 대해서는 열려있어야 하고 변경에 대해서는 닫혀있어야 한다. LSP (Liskov Substitution Principle) 상위 타입 객체를 하위 타입 객체로 완전히 대체할 수 있어야 한다. 즉, 클라이언트가 상위 클래스의 선언만 보고도 하위 클래스의 객체를 무리 없이 사용할 수 있어야 한다. 다음과 같이 자동차 인터페이스가 선언되어 있다고 해보자. interface Car { void moveForward(); void stop(); } 클라이언트는 Car ..

    접근 제어자와 캡슐화

    접근 제어자와 캡슐화

    접근 제어자 (access modifier) private 같은 클래스에서만 접근 가능 (default) 같은 패키지에서만 접근 가능 protected 같은 패키지 또는 하위 클래스에서만 접근 가능 public 모든 클래스에서 접근 가능 Note 클래스에는 public 또는 (default) 만 붙힐 수 있다. 멤버에는 모든 접근 제어자를 붙힐 수 있다. 캡슐화 클래스의 특정 변수와 메소드를 외부로부터 감추고 직접 접근할 수 없도록 하는 것을 의미한다. 접근 제어자를 사용해 캡슐화를 구현할 수 있다. class Time { public int hour; public int minute; public int second; } public class Main { public static void main(S..

    다형성 (Polymorphism)

    Polymorphism은 “many forms”를 의미한다. 넓은 의미에서 다형성은 하나의 entity를 여러 형태로 사용할 수 있는 것을 의미한다. 하나의 함수를 여러 형태로 사용하는 오버로딩과 오버라이딩 하나의 클래스를 여러 형태로 사용하는 generic 하나의 변수를 여러 형태로 사용하는 subtyping 모두가 다형성이 된다. 하지만, 일반적으로 다형성은 하나의 상위 타입 변수에 여러 하위 타입 객체를 갈아 끼울 수 있는 것을 의미한다. 다형성을 이용하면 여러 타입의 객체를 동일한 방식으로 사용할 수 있게 된다. 즉, 동일한 인터페이스를 갖고 사용할 수 있게 된다. 말하자면 여러 타입을 표준화하게 되는 것이다. interface Car { void ride(); } class Sonata impl..

    call by value vs call by reference

    call by value vs call by reference

    call by value 매개변수에 인자의 값을 그대로 복사하는 함수 호출 방식. public class Main { public static void main(String[] args) { int x = 0; change(x); System.out.println(x); // 0 } static void change(int x) { x += 1; } } Java는 포인터 개념이 없기 때문에 항상 call by value 방식으로 함수를 호출한다. 인자로 참조형 변수를 넘기는 경우에도 call by value 방식인 것은 동일하다. class Data { int x = 0; } public class Main { public static void main(String[] args) { Data data =..