JAVA

    좋은 객체지향 설계의 5가지 원칙(SOLID)

    SOLID SRP 단일 책임 원칙(Single responsibility principle) 하나의 클래스는 하나의 책임만 가져야 한다. 하나의 책임이라는 것은 모호하다. 클 수 있고, 작을 수 있다. 문맥과 상황에 따라 다르다. 중요한 기준은 변경이다. 변경이 있을 때 파급 효과가 적으면 단일 책임 원칙을 잘 따르는 것 OCP 개방-폐쇄 원칙(Open/closed principle) 소프트웨어 요소는 확장에는 허용하나 변경에는 불허해야 한다. 다형성 활용 인터페이스를 구현한 새로운 클래스를 하나 만들어서 새로운 기능을 구현 OCP 문제점 구현 객체를 변경하려면 클라이언트 코드를 변경해야한다. - 다형성을 사용했지만 OCP 원칙이 깨진다 → 객체를 생성하고, 연관관계를 맺어주는 별도의 조립, 설정자가 필..

    [JAVA] 다형성(polymorphism)

    다형성 여러 가지 형태를 가질 수 있는 능력, 조상클래스 타입의 참조변수로 자손클래스의 인스턴스를 참조할 수 있도록 한다. CaptionTv c = new CaptionTv(); Tv t = new CatptionTv(); 참조변수 t로는 CaptionTv인스턴스의 모든 멤버를 사용할 수 없다. Tv타입의 참조변수로는 CaptionTv인스턴스 중에서 Tv클래스의 멤버들만 사용할 수 있다. 조상타입의 참조변수로 자손타입의 인스턴스를 참조할 수 있다. 반대로 자손타입의 참조변수로 조상타입의 인스턴스를 참조할 수는 없다. 참조변수의 형변환 기본형 변수와 같이 참조변수도 형변환이 가능하다. 단, 서로 상속관계에 있는 클래스 사이에서만 가능하기 때문에 자손타입의 참조변수를 조상타입의 참조변수로, 조상타입의 참조변..

    [JAVA] 제어자(modifier)

    제어자 제어자는 클래스, 변수 또는 메서드의 선언부에 함께 사용되어 부가적인 의미를 부여한다. 접근 제어자 public, protected, default, private 그 외 static, final, native, transient, synchronized, volatile, strictfp static - 클래스의, 공통적인 인스턴스변수는 하나의 클래스로부터 생성되었더라도 각기 다른 값을 유지하지만, 클래스변수(static멤버변수)는 인스턴스에 관계없이 같은 값을 갖는다. 하나의 변수를 모든 인스턴스가 공유하기 때문이다. static이 사용될 수 있는 곳 - 멤버변수, 메서드, 초기화 블럭 static 멤버변수 모든 인스턴스에 공통적으로 사용되는 클래스변수가 된다. 클래스변수는 인스턴스를 생성하지..

    [JAVA] package와 import

    패키지(package) 패키지란, 클래스의 묶음이다. 클래스가 물리적으로 하나의 클래스파일(.class)인 것과 같이 패키지는 물리적으로 하나의 디렉토리이다. 하나의 소스파일에는 첫번째 문장으로 단 한 번의 패키지 선언만을 허용한다. 모든 클래스는 반드시 하나의 패키지에 속해야한다. 패키지는 점(.)을 구분자로 하여 계층구조로 구성할 수 있다. 패키지는 물리적으로 클래스 파일(.class)을 포함하는 하나의 디렉토리이다. 패키지의 선언 package 패키지명; 소스파일의 맨 위에 적어준다. 패키지명은 대소문자를 모두 허용하지만, 클래스명과 쉽게 구분하기 위해 소문자로 하는 것을 원칙으로 한다. 모든 클래스는 반드시 하나의 패키지에 포함되어야한다. package object_oriented_programm..

    [JAVA] 오버라이딩(overriding)

    오버라이딩 조상 클래스로부터 상속받은 메서드의 내용을 변경하는 것 오버라이딩 조건 자손 클래스에서 오버라이딩하는 메서드는 조상 클래스의 메서드와 이름이 같아야 한다. 매개변수가 같아야 한다. 반환타입이 같아야 한다. → 선언부가 서로 일치해야 한다. 접근 제어자는 조상 클래스의 메서드보다 좁은 범위로 변경 할 수 없다.접근 제어자의 넓은 것에서 좁은 것으로 나열 : public → protected → (default) → private 조상 클래스의 메서드보다 많은 수의 예외를 선언할 수 없다. 인스턴스메서드를 static메서드로 또는 그 반대로 변경할 수 없다. 오버로딩과 오버라이딩 오버로딩 : 기존에 없는 새로운 메서드를 추가 오버라이딩 : 조상으로부터 상속받은 메서드의 내용을 변경하는 것이다. s..