Object Orient Programming
예제코드에서 다운로드는 첫 페이지참조
각각의 실습코드는 SUB에 해당하는 폴더를 참조하세요.
기초문법a_BasicType
클래스 생성A, B
선언위치는 어디도 될 수 있습니다.B
class Class1 { // 클래스의 선언 int field_1; // 소속변수 void method_1() { ... } // 소속함수 } Class1 c1; // 클래스의 생성 c1 = new Class1(); c1.field_1 = 1; // 클래스의 사용(소속변수) c1.mathod_1(); // 클래스의 사용(소속함수)
생성자C
class Class1 { Class1(int val) { ... } // 생성자 : 클래스 이름과 같은 이름의 함수(메소드) >> 생성과 함께 수행 } Class1 c1 = new Class1(1); // 생성시 호출
메모리 공유D : Static
class Class1 { static int val = 1; // 메모리 공유 }
thisE
class Class1 { int val; this.val = ... // 자기 자신을 가리킴 }
클래스 배열F
Class1[] arr1 = new Class1[5];
InterfaceG
'객체지향'코딩은 코딩 속 대상을 인간의 인지와 최대한 흡사하게 구성하여 생산성을 향상시킵니다. 문제는 자바가 다중상속을 지원하지 안되기 때문에 발생합니다.
예를들어, "먹는다."는 동작은 인간 뿐이 아니라 대부분의 생물군에서 나타날 수 있는 특징입니다. 이를 일일히 구현 할 것인지, 아니면 대표행동을 만들어 놓고 상황봐가며 갈아끼울 것인지
고민해봐야
합니다. 여기서 인간의 인지와 비슷하게 코딩하려면 동작에 대한 정의도 필요하다는 것을 알 수 있습니다. 이를 염두하면 어떤 것을 class로 선언 할 지, 어떤 것을 interface로 선언 할 지
명확해집니다.
- static : 메모리 상주형(인스턴스 없이 사용이 가능)
- default : 가장 일반적인 형태
- abstract: 껍데기만 있음(재정의 필요)
interface Inter1 { // 클래스의 선언int field_1; // 일반적으로 사용하지 않음void method_1() { ... } // 소속함수 } Inter1 c1; // 클래스의 생성 c1 = new Inter1(); c1.field_1 = 1; // 클래스의 사용(소속변수) c1.mathod_1(); // 클래스의 사용(소속함수)
상속b_Extends
기본 문법A
class Parent { ... }
class Child extends Parent { ... }
오버라이딩B
- 오버로딩(load:싣다) : 함수명이 같은 함수를 여럿 생성하는 것
- 오버라이딩(ride:태우다) : 상속관계에서 기존의 기능을 덮어 씌우는 것
class Parent { String str = "Parent"; } class Child extends Parent { String str = "Child"; }
생성B2
- 자식은 언제나 부모보다 기능이 같거나 더 많다.
- '기능이 더 적은자'가 '기능이 더 많은 자'를 대체할 수 없다.
Parent pa = new Parent();
Child ch = new Child();
Parent pc = new Child();
Child cp = new Parent(); // 에러 : 단골 다형성 문제
superC
- 자식은 언제나 부모보다 기능이 같거나 더 많다.
- '기능이 더 적은자'가 '기능이 더 많은 자'를 대체할 수 없다.
super.value = 1;// 부모의 필드 접근
super.function();// 부모의 메소드 호출
super(); // 부모의 생성자 호출
접근제어자D
접근제어자 | 기호 | 설명 |
private | - | 본인만 접근할 수 있음 |
protected | # | + 상속받은 클래스도 접근가능 |
~ | package protected: 패키지 안에서 자유 | |
public | + | 아무나 접근 |
추상클래스E
static abstract class myClass { abstract void foo(); }
인터페이스 상속F
interface Inter1 { ... } interface Inter2 { ... } class Class1 implements Inter1 { ... } class Class2 implements Inter1, Inter2 { ... }
포함관계 확인G
static class A { ... } static class B extends A { ... } A a = new A(); B b = new B(); if(b instanceof A) { ... } // true if(a instanceof B) { ... } // false