#0315_자바_프로그래밍_교육_3일차
배열(Array)의 각 인자에는 Primitive Type(원시타입)과 Class Type(클래스 타입) 두 가지 타입이 올 수 있다.
자바 개발 시 서비스단을 구현하게 되는데 서비스 메서드명에는 몇가지 규칙이 있다. 꼭 정해진 규격은 아니나 지켜진 경우 훨씬 가독성이 좋다.
(평소 서비스 메서드 작성할 때 그냥 DAO 이름을 따라가거나 대충 짓는 경우가 많았는데 앞으로 위 규칙을 따라 깔끔하게 작성해야겠다.)
메서드 오버로딩(Method Overloading)
하는 일은 같지만 처리해야하는 데이터나 그에 따른 로직이 다를 때 쓰는 기법이다. 예를 들어, 검색이란 기능은 동일하나 조건이나 범위등이 달라질 때 구현 시 사용된다.
상속(Inheritance)
부모 클래스의 멤버(필드와 메서드)를 물려받음과 동시에 자식은 자식만의 멤버를 갖을 때를 의미한다.
모든 클래스의 근원은 Object 클래스이며 모든 클래스는 Object 클래스를 상속받는다.(https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html)
Object (Java Platform SE 7 )
Called by the garbage collector on an object when garbage collection determines that there are no more references to the object. A subclass overrides the finalize method to dispose of system resources or to perform other cleanup. The general contract of fi
docs.oracle.com
Object 클래스가 물려주는 중요한 메서드에는 두 가지가 있다
추상화(Abstraction)
관련성 없는 모듈 사이에서 공통적으로 포함된 성질들을 찾아 그 성질들을 일반적인 필드로 갖는 모듈 하나로 상정하는 것이다.
이때 추상화 객체는 부모 클래스(Parent Class, Super Class)이고 이를 상속받은 객체들은 자식 클래스(Child Class, Sub Class)라고 한다.
아래 세 직업군의 필드 중 name, birthday, salary 필드는 공통으로 들어가는 필드들이다. 이런 공통점들을 모아 Employee라는 객체를 만들었다. 이 과정을 추상화라고하며 Employee 객체를 가지고 Manager, Engineer, Teacher 라는 객체를 구현하는 것을 구체화 또는 실체화라고 한다.
public class ChildClass extends ParentClass {}
extends 키워드는 대표적인 상속 키워드로 부모 클래스의 메서드를 그대로 이용하거나 오버라이딩(재정의)할 수 있다. 말 그대로 부모 클래스를 확장하는 것이다.
오버라이딩(Overriding) 부모 메서드와 메서드 이름과 인자(타입, 수, 순서)는 같으나 구현부가 달라진다.
** 그 외에도 implements와 abstract 키워드, interface 등이 있는데 추후 추가할 예정!
this 키워드는 객체 자식을 의미한다. 객체 자신의 정보를 담고 있다.
주로 생성자 작성 시 동일한 이름의 로컬 변수와 필드명을 구분하고자 사용한다. 또한 생성자 안에서 또 다른 생성자를 호출하기 위해서도 사용한다.
아래 name, birthday, salary 세 필드를 갖는 객체 Employee가 있다.
public class Employee{
private String name;
private Date birthday;
private double salary;
public Employee() {} //명시적 생성자있을 경우 기본 생성자 필수
public Employee(String name, Date birthday, double salary){
this.name = name;
this.birthday = birthday;
this.salary = salary;
}
}
만약 salary에 값이 입력되지 않은 경우 기본값으로 세팅 후 객체를 생성하고 싶다면 모든 인자를 받는 생성자를 이용하면 된다.
public class Employee{
private String name;
private Date birthday;
private double salary;
private static final double BASIC_SALARY = 0.0;
public Employee() {} //명시적 생성자있을 경우 기본 생성자 필수
public Employee(String name, Date birthday, double salary){
this.name = name;
this.birthday = birthday;
this.salary = salary;
}
public Employee(String name, Date birthday){
this(name, birthday, BASIC_SALARY); //salary = 0.0
}
}
비어있는 salary 대신 0.0으로 초기화된 상수 BASIC_SALARY를 인자로 전달하여 객체를 생성한다.
* 변수 선언 시 변수명은 상수값(기본값)은 대문자와 _를 이용하여 작성한다.
The field ~~ is not visible.
만약 자식 클래스에서 부모 클래스의 멤버 필드 접근 시 오류가 나며 접근이 불가능하다. 따라서 자식 클래스 생성자 작성 시 부모 클래스의 멤버변수는 직접 초기화하지 못한다. 이때 사용하는 것이 super 키워드이다.
this가 객체 자신을 가리키는 것처럼 super는 부모 클래스를 의미한다.
public XXClass(String f1, int f2..) extends ~~Class{
super();
this.f1 = f1;
this.f2 = f2;
}
클래스 작성 시 자동생성으로 생성자를 작성하면 super(); 구문이 자동으로 작성되는데 이것이 바로 부모 클래스 생성자 호출이다.
만약 자식 클래스에서 부모 클래스의 멤버 필드까지 초기화하여 생성자를 작성하고 싶다면 아래와 같이 활용할 수 있다.
// 부모 클래스
class Parent {
private String parentF1;
private int parentF2;
public Parent(){};
public Parent(String parentF1, int parentF2){
this.parentF1 = parentF1;
this.parentF2 = parentF2;
}
}
// 자식 클래스
class Child extends Parent{
private double childF1;
public Child(){};
public Child(String parentF1, int parentF2, double childF1){
super(parentF1, parentF2); // Parent(parentF1, parentF2);와 동일
this.childF1 = childF1;
}
}
이와 비슷하게 toString()을 객체 주소가 아닌 객체 필드 정보를 리턴하도록 재정의한 경우, 부모 클래스의 필드도 함께 출력할 수 있다.
public String toString(){
return super.toString() + ...; // 부모 클래스 toString() 호출
}
부모 클래스를 extends한 자식 클래스 생성 시 메모리 구조는 새로 할당이 아닌 말 그대로 확장 이다.
** 자식 객체 생성 시(생성자 호출 시) 부모 클래스의 생성자가 먼저 반드시 호출된다 **
[JAVA] 자바 프로그래밍 교육 5일차(과 후기) (0) | 2023.03.27 |
---|---|
[JAVA] 자바 프로그래밍 교육 4일차 (0) | 2023.03.27 |
[JAVA] 자바 프로그래밍 교육 2일차 (0) | 2023.03.27 |
[JAVA] 자바 프로그래밍 교육 1일차 (0) | 2023.03.13 |
[JAVA] 컬렉션 프레임워크(3) 맵 Map | HashMap, TreeMap, LinkedHashMap (0) | 2022.03.08 |
댓글 영역