객체지향

java/객체지향

[객체지향] 인터페이스

● 인터페이스 인터페이스는 일종의 추상클래스이다. 인터페이스는 추상클래스처럼 추상메서드를 갖지만, 추상글래스와 달리 몸통을 갖춘 일반 메서드 또는 멤버변수를 구성원으로 가질 수 없다. 즉, 추상메서드와 상수만을 멤버로 가질 수 있으며 그외 다른 요소는 허용하지 않는다. 인터페이스는 그 자체적으로 사용되기 보다는 다른 클래스를 작성하는데 도움 줄 목적으로 작성된다. 인터페이스는 키워드로 class 대신 interface를 사용한다. 그리고 접근제어자로 public 또는 default만 사용할 수 있다. interface 인터페이스이름 { public static final 타입 상수이름= 값; public abstract 메서드이름(매개변수목록); } 인터페이스는 일반적인 클래스와 달리 다음과 같은 제약사..

java/객체지향

[객체지향]여러 종류의 객체를 배열로 다루기

다형성의 개념을 통해 조상타입의 참조변수로 자손타입의 객체를 참조하는 게 가능하단 걸 배웠다. Product p1 = new Tv(); Product p2 = new Computer(); Product p3 = new Audio(); Product클래스가 Tv, Computer, Audio클래스의 조상클래스 즉, 서로가 상속관계일 때 위와같은 코드 작성이 가능하다. 위의 코드를 그림으로 나타내면 다음과 같다. 그림을 보면 코드를 이해하기 쉽다. 위의 코드를 Product타입의 참조변수 배열로 처리하면 다음과 같다. Product p[] = new Product[3]; p[0] = new Tv(); p[1] = new Computer(); p[2] = new Audio(); 코드만 봐서는 와닿지가 않는다...

java/객체지향

[객체지향] 다형성(polymorphism)

●다형성 다형성이란 '여러 가지 형태를 가질 수 있는 능력'이다. 자바에서는 한 타입의 참조변수로 여러 타입의 객체를 참조할 수 있도록 한다. 이를 다형성이라고 한다. 구체적으로 말하자면 조상클래스 타입의 참조변수로 자손클래스의 인스턴스를 참조할 수 있도록 하는 것이다. class Tv { boolean power; int channel; void power() { power = !power } void channelUp() { ++channel; } void channelDown() { --channel; } } class SmartTv extends Tv { String text; void caption() { /* 내용생략 */ } } 지금까지 우리는 생성된 인스턴스를 다루기 위해서, 인스턴스의 타..

java/객체지향

[객체지향] super와 super()

●참조변수 super super는 자손 클래스에서 조상 클래스로부터 상속받을 때, 상속받은 멤버와 자손클래스의 멤버가 같은 경우 구별하기 위해 사용한다. 구별하기위해 사용한다는 점에서 멤버변수와 지역변수를 구별 할 때 사용했던 'this'와 쓰임이 비슷하지만, 참조변수 super는 자손 클래스와 조상 클래스의 멤버를 구별 했다는 점에서 this와 차이가 있다. class Ex7_2 { public static void main(String args[]) { Child c = new Child(); c.method(); } } class Parent { int x = 10; /* super.x */ } class Child extends Parent { int x = 20; // this.x void me..

java/객체지향

[객체지향]오버라이딩(overriding)

●오버라이딩 오버라이드(override)의 사전적 의미는 '~위에 덮어쓰다'다. 오버라이드의 사전의미를 참조하여 조상클래스로부터 상속받은 메서드의 내용을 변경하는 것을 '오버라이딩'이라 한다. class Point { int x; int y; String getLocation() { return "x :" + x + ", y :"+ y; } } class Point3D extends Point { int z; String getLocation() { // 오버라이딩 return "x :" + x + ", y :"+ z :" + z; } } 위의 코드는 2차원 좌표계의 한 점을 표현하기 위한 Point클래스가 있을 때, 이를 조상으로 하는 Point3D클래스, 3차원 좌표계의 한 점을 표현한 클래스다. P..

java/객체지향

[객체지향] 상속

●상속 상속이란, 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것이다. 상속은 코드의 재사용성을 높이고 코드의 중복을 제거하여 프로그램의 생산성과 유지보수에 크게 기여한다. 상속은 새로 작성하고자 하는 클래스의 이름 뒤에 상속받고자 하는 클래스의 이름을 키워드 'extends'와 함께 써주기만 하면 된다. class Parent { } class Child extends Parent { // ... } 위의 두 클래스는 상속관계에 있다고 하며 상속하는 클래스(Parent)는 '조상 클래스'라 하고 상속받는 클래스(Child)는 '자손 클래스'라 한다. 만일 Parent클래스에 age라는 정수형 변수를 멤버변수로 추가하면, 자손클래스는 조상의 멤버를 모두 상소받기 때문에, Child클래스는 자동적으..

java/객체지향

[객체지향] 변수, 멤버변수의 초기화

●변수의 초기화 변수를 선언하고 처음으로 값을 저장하는 것을 '변수의 초기화'라고 한다. 변수의 초기화는 경우에 따라서 필수적이기도 하고 선택적이기도 하지만, 가능하면 선언과 동시에 적절한 값으로 초기화 하는 것이 바람직하다. 멤버변수는 초기화를 하지 않아도 자동적으로 변수의 자료형에 맞는 기본값으로 초기화가 이루어지므로 초기화하지 않고 사용해도 되지만, 지역변수는 사용하기 전에 반드시 초기화해야 한다. class Initest { int x; //인스턴스 변수 int y = x; //인스턴스 변수 void method() { int i; int j = i; // 에러. 지역변수를 초기화하지 않고 사용 위의 코드에서 x, y는 인스턴스 변수이고, i, j는 지역변수이다. 그 중 x와 i는 선언만하고 초기..

java/객체지향

[객체지향] this()와 this

●생성자에서 다른 생성자 호출하기 - this() 같은 클래스의 멤버들 간에 서로 호출할 수 있는 것처럼 생성자 간에도 서로 호출이 가능하다. 단 아래와 같이 두가지 조건을 만족해야 한다. 생성자의 이름으로 클래스이름 대신 this를 사용한다. 한 생성자에서 다른 생성자를 호출할 때는 반드시 첫 줄에서만 호출이 가능하다. Car(String color) { door = 5; Car(color, "auto", 4); //error } 위의 코드는 두 가지의 조건을 모두 지키지 않았기 때문에 오류가 발생했다. Car(String color)생성자 안에 Car(color, "auto", 4) 생성자를 첫 번째 줄이 아닌 두 번째 줄에 사용했으며, 생성자의 이름을 this가 아닌 Car로 생성했다. 생성자를 첫..

각시탈코더
'객체지향' 태그의 글 목록