생성자

  • 인스턴스가 생성될 때 호출되는 '인스턴스 초기화 메서드'
  • 하나의 클래스에 여려개의 생성자가 존재할 수가 있다.

생성자의 조건

- 생성자의 이름은 클래스의 이름과 같아야 한다.
- 생성자는 리턴 값이 없다.(생성자도 메서드이기 때문에 리턴값이 없다는 의미의 void를 붙여야
하지만, 모든 생성자가 리턴값이 없으므로 void를 생략할 수 있게 한 것이다.)
class Person {
	Person() {
    }
    Person(int age){
    }
}

this

  • this는 인스턴스 자신을 참조하는 예약어
  • this 키워드를 사용하면 클래스 내에서 현재 인스턴스를 가리킬 수 있습니다
  • 같은 클래스의 멤버들 간에 서로 호출할 수 있는 것처럼 생성자 간에도 서로 호출이 가능하게 해준다.
public class Person {
    private int 나이;

    public Person(int 나이) {
        this.나이 = 나이;
    }
}

오버로딩 (Overloading)

  • 기존에 없는 새로운 메서드를 정의하는 것
  • 같은 이름의 메서드를 여러 개 정의하는 것
  • 개변수의 개수나 타입이 다른 메서드를 정의할 수 있습니다.
  • 메서드 호출 시 전달되는 인자에 따라 적절한 메서드가 호출됩니다.
  • 반환 타입은 오버로딩을 구현하는데 아무런 영향을 주지 못한다.
  • 오버라이드(Override)와 다르므로 주의!
class Animal {
    public void move() {
        System.out.println("Animal is moving");
    }
}

class Dog extends Animal {
    // 오버라이드: 상위 클래스의 move 메서드를 재정의함
    public void move() {
        System.out.println("Dog is walking");
    }

    // 오버로딩: 같은 이름의 메서드를 추가함
    public void move(int speed) {
        System.out.println("Dog is running at speed " + speed);
    }
}

public class Main {
    public static void main(String[] args) {
        Animal animal = new Animal();
        Dog dog = new Dog();

        animal.move(); // "Animal is moving" 출력
        dog.move(); // "Dog is walking" 출력
        dog.move(10); // "Dog is running at speed 10" 출력
    }
}

오버로딩의 조건

- 매서드 이름이 같아야한다.
- 매개변수의 개수 또는 타입이 달라야 한다.
// 매개변수의 이름만 다를 뿐 매개변수의 타입이 같기 때문에 오버로딩이 성립하지 않는다.
int add(int a, int b) {
	return a+b;
}
int add(int x, int y) {
	return x+y;
}

super

  • 자손 클래스에서 조상 클래스로부터 상속받은 멤버를 참조하는데 사용되는 참조 변수
  • 조상의 멤버와 자신의 멤버를 구별하는데 사용된다는 점을 제외하고는 super와 this 근본적으로 같다.

접근 제어자 (access modifier)

  • 외부에는 불핑요한, 내부적으로만 사용되는, 부분을 감추기 위해 사용한다.

  • 멤버 또는 클래스에 사용되어, 해당하는 멤버 또는 클래스를 외부에서 접근하지 못하도록 제한하는 역할을 한다.

  • 생성자가 따로 지정이 되어 있지 않다면, 접근 제어자가 defalt다.(생략가능)

    	default : 같은 패키지 내에서만 접근이 가능하다.
    	private : 같은 클래스 내에서만 접근이 가능하다.
    	protected : 같은 패키지 내에서, 그리고 다른 패키지의 자손클래스에서 접근이 가능하다.
    	public : 접근 제한이 전혀 없다.

추상클래스(abstract class)

abstract class Car{
}
  • 클래스가 설계도라면, 추상클래스는 미완성 설계도라 비유할 수 있다(미완성 메서드를 포함하고 있다는 의미).
  • 추상클래스로 인스턴스를 생성할 수 없고, 상속을 통해서 자손클래스에 의해서만 완성될 수 있다.

추상메서드(abstract method)

abstract class Car{
	abstract void run();
}
class Kia extends Car{
	void run(){
    	추상메서드 구현
    }
}
  • 선언부와 구현부로 구성되어 있다.
  • 선언부만 작성하고 구현부는 작성하지 않은 채로 남겨 둔다.

인터페이스(interface)

  • 추상클래스를 부분적으로만 완성된 "미완성 설계도"라고 한다면, 인터페이스는 구현된것은 아무 것도 없고 밑그림만 그려져 있는 "기본 설계도"라 할 수 있다.
  • 추상메서드와 상수만을 멤버로 가질 수 있다.
  • 인터페이스로부터 상속받을 수 있으며, 클래스와 달리 다중상속이 가능하다.

인터페이스의 장점

  • 개발시간을 단축시킬 수 있다.
  • 표준화가 가능하다.
  • 서로 관계없는 클래스들에게 관계를 맺어 줄 수 있다.
  • 독립적인 프로그래밍이 가능하다.
interface 인터페이스이름 extends 클래스명, 클래스명 ... {
	public static final 상수 이름 =;
    public abstract 메서드이름 (매개변수);
}
// interface의 구현
class 클래스명 implements 인터페이스명{
}

class 클래스명 extends 클래스명 implements 인터페이스명

예외처리(exception handling)

  • 프로그램 실행 시 발생할 수 있는 예외에 대비한 코드를 작성하는 것
  • 발생시점에 따라 '컴파일 에러'와 '런타임 에러'로 나눌 수 있다.
컴파일 에러 : 컴파일 시에 발생하는 에러
런타임 에러 : 실행 시에 발생하는 에러
논리적 에러 : 실행은 되지만, 의도와 다르게 작동하는 것

에러(error)와 예외(exception)

  • 에러 : 프로그램 코드에 의해서 수습될 수 없는 심각한 오류, 메모리 부족이나, 스택오버플로우와 같이 발생하면 복구할 수 없는 심각한 오류
  • 예외 : 프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류

try-catch

try{
	예외가 발생할 수 있는 코드
} catch (예외종류 e1) {
	예외 e1발생했을 경우, 이를 처리하기 위한 문장
} catch (예외종류 e2) {
	예외 e2발생했을 경우, 이를 처리하기 위한 문장
}

0개의 댓글