티스토리 뷰
오늘은 객체지향의 시작점이 될 수 있는 클래스에 대해서 알아봅니다.
class
1. field : 맴버 변수
ㄴ : 이 객체가 지속적으로 사용해야 하는 목적으로 사용하는 데이터 변수
ㄴ : 외부에서 접근하지 못해야 하므로 주로 사용하는 접근 지정자는 private임.
ㄴ : instance field와 static field 두 종류가 있다.
ㄴ : a. instance field
> 객체를 생성한 후에 사용할 수 있는 필드
객체를 반드시 생성해야함.
ㄴ : b. static field
> 객체와 무관하게 사용할 수 있는 필드
반드시 객체를 생성해야할 필요는 없음.
2. construtor : 생성자 함수
ㄴ : 객체 생성시 자동호출되는 함수
ㄴ : 반환타입이 없다.(생략된 것이 아니라 없는거임.)
ㄴ : 함수명이 클래스명과 동일함.
ㄴ : 역할1. 기본역할 > 객체등록
ㄴ : 역할2. 사용자역할 > 필드 초기화 (즉, 쓰레기값 방지)
ㄴ : 외부에서도 객체를 생성할 수 있어야하기에 주로 사용하는 접근 지정자는 public임.
ㄴ : 디폴트생성자를 제공
ㄴ : 명시적으로 생성자를 하나라도 만들 경우 디폴트생성자는 존재하지 않음.
ㄴ : overloading이 가능함.
3. method : 맴버 함수
ㄴ : 외부에서 내부의 필드에 접근하고 사용할 수 있게 해주는 기능
ㄴ : 외부에서 접근할 수 있도록 주로 사용하는 접근 지정자는 public임.
ㄴ : setter(입력기능), getter(출력기능)
ㄴ : instance method와 static method 두 종류가 있다.
ㄴ : a. instance method
> 객체를 생성한 후에 사용할 수 있는 메소드.
객체당 접근.
반드시 객체를 생성해야함. 예시로 getter와 setter가 있음
instance field(변수에 static이 붙어있지 않음.)만 사용가능함.
ㄴ : b. static method
> 객체와 무관하게 사용할 수 있는 메소드.
클래스당 접근.
반드시 객체를 생성할 필요가 없음. 예시로 main이 있음.
static field(변수에 static이 붙어있기에 생성과 동시에 초기화해야함.)만 사용가능함
<-- -->
access modifier : 접근지정자
아래와 같이 4가지 접근지정자가 있는데 접근 범위는 1일차에 표로 작성해둔 것을 참조.
1. private
2. default
3. protected
4. public
<-- -->
this, this()
this : 디스
1. 자기자신을 참조하는 객체레퍼런스변수
2. 인스턴스 메소드의 첫번째 매개변수로 항상 존재하고 있음.
3. this는 생성하지 못하고 사용만 가능하다.
4. 필드와 매개변수를 구분하기 위해서 사용함
5. 자기 자신을 리턴할 경우에도 사용함.
6. 사용할 때는 지역변수와 매개변수를 동시에 사용할때 매개변수의 우선순위가 높기 때문에 지역변수를 사용하기 위해 사용함.
this() : 디스호출
1. 생성자에서 또 다른 생성자를 호출할때 사용
<-- -->
overloading
1. 다형성을 표현하기 위해 사용
2. 동일한 함수명으로 여러 개의 함수를 제공함.
3. 매개변수를 통해서 구별을 하는데 '매개변수의 타입'과 '매개변수의 갯수' 2가지로 구분이 가능하다.
4. 동일한 기능을 하는 것끼리 사용해야한다.
<-- -->
class 관계
1. has ~a : ~가 ~를 갖고 있다. > 독립된 개체인데 필요에 의해서 쓰는 관계
2. is ~a : ~는 ~이다. > 큰 개념에서 작은 개념으로 구체화시킬때 사용
<-- -->
final
1. field 앞에 final이 붙으면 상수화되며, 변수의 이름을 전부 대문자로 작성한다.
2. method 앞에 final이 붙으면 overriding이 금지됨
3. class 앞에 final이 붙으면 상속이 금지됨.
<-- -->
상속 : inheritance
위에서 언급한 class 관계에서 is ~a 관계의 일부로 상위클래스(super class)의 메소드나 필드를 하위클래스(sub class)에서 가져다 쓰거나 변형하여 쓰는 것을 의미함.
자바는 기본적으로 단일 상속을 원칙으로 한다.
아래와 같이 표기하며, 이때 A 클래스는 상위클래스(=부모클래스), B 클래스는 하위클래스(=자식클래스)라고 부름.
class A {} class B extends A {} |
상속을 사용하는 이유는 확장성을 꼽을 수 있다.
자바에서는 모든 클래스가 Object 클래스를 상속하고 있기에 'class A extends Object {}'와 같이 표기를 해도 됨.
<-- -->
super, super()
super()
1. 부모클래스의 생성자를 호출함.
2. 항상 자식클래스의 생성자 첫번째 라인에 존재하고 있음.
class A { public A() { System.out.println("A!"); } } |
class B extends A { public B() { System.out.println("B~"); } } |
위의 상속관계에서 B의 생성자에 생략된 것이 'B~' 라는 문구를 출력하는 명령어 이전에 super() 명령어가 생략되어있다.
super
1. Overriding시에 부모의 멤버를 명시적으로 사용할 때, 사용함.
<-- -->
Overriding(= 재정의)
1. 상속시 부모의 멤버와 자식의 멤버가 똑같은 형태로 제공
2. 부모클래스에서 받는 것을 확장 및 수정을 하고 싶을때 사용
3. 동적바인딩시 유효한 기능.
<-- -->
abstract class(추상클래스)
1. 추상메소드를 하나 이상 가지고 있는 클래스
2. 오직 상속을 목적으로 하며 객체의 생성이 불가능함.
3. 추상클래스를 상속받는 자식클래스는 추상메소드를 오버라이딩 하지 않을 경우 자식클래스도 추상클래스화 됨.
4. 추상메소드를 오버라이딩(구체화) 해야만 자식클래스에서 객체를 만들어서 사용할 수 있다. 이로 인해서 강제성이 부여됨.
5. abstract라는 키워드를 통해서 확인할 수 있음.
abstract method(추상메소드)
1. 메소드의 선언만 되어있고 기능 부여가 되어있지 않은 메소드
2. abstract라는 키워드를 통해서 확인할 수 있음.
abstract class A {} |
<-- -->
Dynamic Binding(동적바인딩)
1. 부모의 레퍼런스로 자식객체를 접근하는 방식
2. 다형성의 대표적인 예시로 하나의 객체를 이용해 여러가지를 사용가능함.
3. 자식클래스에서 새로 추가한 내용은 접근할 수 없다. 즉 부모클래스에 있는 메소드를 오버라이딩한 내용에 대해서만 접근이 가능하다.
// 부모 클래스 package Override; public abstract class Area { public abstract void draw(); } |
package Override; public class Circle extends Area { public void draw() { System.out.println("삼각형이다"); } } |
package Override; public class Rectangle extends Area { public void draw() { System.out.println("사각형이다"); } } |
package Override; public class Triangle extends Area { public void draw() { System.out.println("삼각형이다"); } } |
package Override; public class Draw { public static void main(String[] args) { Circle c = new Circle(); Rectangle r = new Rectangle(); Triangle t = new Triangle(); c.draw(); r.draw(); t.draw(); } } |
package Override; public class DynamicBind { public static void main(String[] args) { Area area; Circle c = new Circle(); Rectangle r = new Rectangle(); Triangle t = new Triangle(); c.draw(); // Static Binding r.draw(); // Static Binding t.draw(); // Static Binding area = r; // Dynamic Binding area.draw(); area = c; // Dynamic Binding area.draw(); area = t; // Dynamic Binding area.draw(); } } |
'it분야의 끄적끄적 > Java 계열의 프로젝트 및 글' 카테고리의 다른 글
Java 강의 6일차 (0) | 2020.01.20 |
---|---|
Java 강의 3일차 (0) | 2020.01.15 |
JAVA 강의 2일차 (0) | 2020.01.14 |
JAVA 강의 1일차 (0) | 2020.01.13 |
- Total
- Today
- Yesterday
- 서포트벡터머신
- 차원축소
- 이상치처리
- 머신러닝
- CA
- PCA
- dimension reduce
- java
- EDA
- Clustering Analysis
- SVM
- Partitioning Around Medoids
- K-means clustering
- ML
- PAM
- 데이터전처리
- 주성분분석
- 군집분석
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |