JAVA

    [JAVA-basic] default 메소드와 static 메소드

    [JAVA-basic] default 메소드와 static 메소드

    인터페이스에는 원래 추상메소드만 선언할 수 있었다. JDK1.8 부터 디폴트 메소드와 static메소드도 추가할 수 있게 되었다. static메소드는 인스턴스와 관계가 없는 독립적인 메소드이기 때문에 예전부터 인터페이스에 추가하지 못할 이유가 없었다. 그러나 규칙을 단순히 할 필요가 있어서 인터페이스의 모든 메소드는 추상 메소드이어야 한다는 규칙에 예외를 두지 않았다. 그래서 인터페이스와 관련된 static메소드는 별도의 클래스에 따로 두어야 했다. 디폴트 메소드 조상 클래스에 새로운 메소드를 추가하는 것은 별 일 아니지만, 인터페이스의 경우에는 매우 큰일이다. 인터페이스에 메소드를 추가한다는 것은 추상메소드를 추가한다는 것이고, 이 인터페이스를 구현한 기존의 모든 클래스들이 새로 추가된 메소드를 구현해..

    [JAVA-basic] 인터페이스(2)

    [JAVA-basic] 인터페이스(2)

    인터페이스의 장점 인터페이스를 사용하는 이유와 그 장점을 정리해보자. 1. 개발시간을 단축시킬 수 있다. 일단 인터페이스가 작성되면, 이를 사용해서 프로그램을 작성하는 것이 가능하다. 메소드를 호출하는 쪽에서는 메소드의 내용에 관계없이 선언부만 알면 되기 때문이다. 2. 표준화가 가능하다. 프로젝트에 사용되는 기본 틀을 인터페이스로 작성한 다음, 개발자들에게 인터페이스를 구현하여 프로그램을 작성하도록 함으로써 보다 일관되고 정형화된 프로그램의 개발이 가능하다. 3. 서로 관계없는 클래스들에게 관계를 맺어 줄 수 있다. 서로 상속관계에 있지도 않고, 같은 조상클래스를 가지고 있지 않은 서로 아무런 관계도 없는 클래스들에게 하나의 인터페이스를 공통적으로 구현하도록 함으로써 관계를 맺어 줄 수 있다. 4. 독..

    [JAVA-basic] 인터페이스

    [JAVA-basic] 인터페이스

    인터페이스란? 인터페이스는 일종의 추상클래스이다. 인터페이스는 추상클래스 처럼 추상메소드를 갖지만 추상클래스보다 추상화 정도가 높아서 추상클래스와 달리 몸통을 갖춘 일반 메소드 또는 멤버변수를 구성원으로 가질 수 없다. 인터페이스도 추상클래스처럼 완성되지 않은 불완전한 것이기 때문에 그 자체만으로 사용되기 보다는 다른 클래스를 작성하는데 도움 줄 목적으로 작성된다. 인터페이스의 작성 인터페이스를 작성하는 것은 클래스를 작성하는 것과 같다. 다만 키워드로 class 대신 interface를 사용한다는 것만 다르다. 하지만 일반적인 클래스의 멤버들과 달리 인터페이스의 멤버들은 다음과 같은 제약사항이 있다. - 모든 멤버변수는 public static final 이어야 하며, 이를 생략할 수 있다. - 모든 ..

    [JAVA-basic] 추상클래스

    추상클래스란? 클래스를 설계도에 비유한다면, 추상클래스는 미완성 설계도에 비유할 수 있다. 클래스가 미완성이라는 것은 멤버의 개수에 관계된 것이 아니라, 단지 미완성메소드(추상메소드)를 포함하고 있다는 의미이다. 미완성 설계도로 완성된 제품을 만들 수 없듯이 추상클래스로 인스턴스는 생성할 수 없다. 추상클래스는 상속을 통해서 자손클래스에 의해서만 완성될 수 있다. 추상클래스는 키워드 'abstract'를 붙이기만 하면 된다. 이렇게 함으로써 이 클래스를 사용할 때, 클래스 선언부의 abstract를 보고 이 클래스에는 추상메소드가 있으니 상속을 통해서 구현해주어야 한다는 것을 쉽게 알 수 있을 것이다. 추상메소드란? 선언부만 작성하고 구현부는 작성하지 않은 채로 남겨 둔 것이 추상메소드이다. 즉, 설계만..

    [JAVA-basic] 다형성(2)

    [JAVA-basic] 다형성(2)

    참조변수와 인스턴스의 연결 조상 클래스에 선언된 멤버변수와 같은 이름의 인스턴스변수를 자손 클래스에 중복으로 정의했을 때, 조상타입의 참조변수로 자손 인스턴스를 참조하는 경우와 자손타입의 참조변수로 자손 인스턴스를 참조하는 경우는 서로 다른 결과를 얻는다. 메소드의 경우 조상 클래스의 메소드를 자손의 클래스에서 오버라이딩한 경우에도 참조 변수의 타입에 관계없이 항상 실제 인스턴스의 메소드(오버라이딩된 메소드)가 호출되지만, 멤버변수의 경우 참조변수의 타입에 따라 달라진다. 결론부터 말하자면, 멤버변수가 조상과 자손클래스에 중복으로 정의된 경우, 다음과 같이 조상타입의 참조변수를 사용했을 때는 조상 클래스에 선언된 멤버변수가 사용되고, 자손타입의 참조변수를 사용했을 때는 자손 클래스에 선언된 멤버변수가 사..