[Java 입문] 디폴트 메서드 & Static 메서드, 내부 클래스
·
Server/자바의정석
디폴트 메서드와 Static 메서드 인터페이스가 변경되지 않으면 제일 좋겠지만, 아무리 설계를 잘해도 언젠가 변경은 발생하기 마련이다. JDK 설계자들은 고심 끝에 디폴트 메서드(default method)라는 것을 고안해내었다. 디폴트 메서드는 추상 메서드의 기본적인 구현을 제공하는 메서드로, 추상 메서드가 아니기 때문에 디폴트 메서드가 새로 추가되어도 해당 인터페이스를 구현한 클래스를 변경하지 않아도 된다. 위의 왼쪽과 같이 newMethod()라는 추상 메서드를 추가하는 대신, 오른쪽과 같이 디폴트 메서드를 추가하면, 기존의 MyInterface를 구현한 클래스를 변경하지 않아도 된다. 1. 여러 인터페이스의 디폴트 메서드 간의 충돌 - 인터페이스를 구현한 클래스에서 디폴트 메서드를 오버라이딩해야 ..
[Java 입문] 추상(abstract) & 인터페이스(Interface)
·
Server/자바의정석
추상 메서드(abstract method) 선언부만 작성하고 구현부는 작성하지 않은 채로 남겨 둔 것이 추상 메서드이다. 메서드를 이와 같이 미완성 상태로 남겨 놓는 이유는 메서드의 내용이 상속받는 클래스에 따라 달라질 수 있기 때문에 조상 클래스에서는 선언부만을 작성하고, 주석을 덧붙여 어떤 기능을 수행할 목적으로 작성되었는지 알려 주고, 실제 내용은 상속받는 클래스에서 구현하도록 비워 두는 것이다. /* 주석을 통해 어떤 기능을 수행할 목적으로 작성하였는지 설명한다 */ abstract 리턴타입 메서드이름(); 추상 클래스로부터 상속받는 자손 클래스는 오버 라이딩을 통해 조상인 추상 클래스의 추상 메서드를 모두 구현해주어야 한다. 만일 조상으로부터 상속받은 추상 메서드 중 하나라도 구현하지 않는다면,..
[Java 입문] 다형성(polymorphism)
·
Server/자바의정석
다형성이란? 상위 클래스가 동일한 메시지로 하위 클래스들을 서로 다르게 동작시키는 객체 지향 원리 자바에서는 한 타입의 참조 변수로 여러 타입의 객체를 참조할 수 있도록 함으로써 다형성을 프로그램적으로 구현. class TV { protected int size; public TV(int size) { this.size = size; } protected int getSize() { return size; } } class ColorTV extends TV { protected int resolution; public ColorTV(int size, int resolution) { super(size); this.resolution = resolution; } public void printPropert..
[Java 입문] 제어자(modifier), 캡슐화
·
Server/자바의정석
제이자 제어자(modifier)는 클래스, 변수 또는 메서드의 선언부에 함께 사용되어 부가적인 의미를 부여한다. 접근 제어자 public, protected, (default), private 그 외 static, final, abstract, native, transient, synchronized, volatile, strictfp 제어자는 클래스나 멤버 변수와 메서드에 주로 사용되며, 하나의 대상에 대해서 여러 제어자를 조합하여 사용하는 것이 가능하다. 단, 접근 제어자는 한 번에 네 가지 중 하나만 선택해서 사용할 수 있다. Static 클래스 변수(static멤버변수)는 인스턴스에 관계없이 같은 값을 갖는다. 그 이유는 하나의 변수를 모든 인스턴스가 공유하기 때문이다. static이 붙은 멤버변..
[Java 입문] Super
·
Server/자바의정석
참조 변수 Super super는 자손 클래스에서 조상 클래스로부터 상속받은 멤버를 참조하는 데 사용되는 참조 변수이다. 상속받은 멤버와 자신의 멤버와 이름이 같을 때는 super를 붙여서 구별할 수 있다. Super() 조상의 생성자 쓰기 this()는 같은 클래스의 다른 생성자를 호출하는 데 사용되지만, super()는 조상의 생성자를 호출하는데 사용된다. class Point { int x, y; Point(int x, int y){ this.x = x; this.y = y; } } class Point3D extends Point{ int z; Point3D(int x, int y, int z) { this.x = x; // 조상의 멤버를 초기화 this.y = y; // 조상의 멤버를 초기화 t..
[Java 입문] 오버라이딩(Overriding) & 오버로딩(Overloading)
·
Server/Java
오버라이딩(Overriding) 조상 클래스로부터 상속받은 메서드의 내용을 변경하는 것을 오버 라이딩이라고 한다. class Point{ int x; int y; String getLocation() { return "x :" + x + ", y : " + y; } } class Point3D extends Point { int z; @Overriding String getLocatuin() { // 오버라이딩 return "x :" + x + ", y :" + y + ", z :" +z; } } 이 두 클래스는 서로 상속관계에 있으므로 Point 3D클래스는 Point클래스로부터 getLocation()을 상속 받지만, Point3D클래스는 3차원 좌표계의 한 점을 표현하기 위한 것이므로 조상인 Poi..
[Java 입문] 상속
·
Server/자바의정석
상속 상속이란, 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것이다. 상속을 통해서 클래스를 작성하면 보다 적은 양의 코드로 새로운 클래스를 작성할 수 있고 코드를 공통적으로 관리할 수 있기 때문에 코드의 추가 및 변경이 매우 용이하다. class Parent{} class Child extends Parent { //... } 이 두 클래스는 서로 상속 관계에 있다고 하며, 상속해주는 클래스를 ‘조상 클래스’라 하고 상속받는 클래스를 ‘자손 클래스’라 한다. 자손 클래스는 조상 클래스의 모든 멤버를 상속받기 떄문에, Child클래스는 Parent클래스의 멤버들을 포함한다고 할 수 있다. 만일 Parent 클래스에 age라는 정수형 변수를 멤버변수로 추가하면, 자손 클래스는 조상의 멤버를 모두 상..
[Java 입문] 생성자(constructor)
·
Server/자바의정석
생성자 생성자는 인스턴스가 생성될 때 호출되는 ‘인스턴스 초기화 메서드’이다. 따라서 인스턴스 변수의 초기화 작업에 주로 사용되며, 인스턴스 생성 시에 실행되어야 하는 작업을 위해서도 사용된다. 생성자의 조건 생성자의 이름은 클래스의 이름과 같아야 한다. 생성자는 리턴 값이 없다. 클래스이름(타입 변수명, 타입 변수명, ...) { // 인스턴스 생성 시 수행될 코드, // 주로 인스턴스 변수의 초기화 코드를 적는다. } class Point{ Point() { // 매개변수가 없는 생성자. ... } Point(int x, int y) { // 매개 변수가 있는 생성자 ... } ... } 연산자 new가 인스턴스를 생성하는 것이지 생성자가 인스턴스를 생성하는 것이 아니다. 기본 생성자(Default ..
코드플리
'Server' 카테고리의 글 목록 (19 Page)