이것이 자바다 정리 6장 (클래스)
객체지향 프로그래밍
부품 객체를 먼저 만들고 이것들을 하나씩 조립해 완성된 프로그램을 만드는 기법
객체지향 프로그래밍의 특징
캡슐화, 상속, 다형성
캡슐화
객체의 내부 구조를 알지 못하게하고, 객체가 제공하는 필드와 메소드만 이용할 수 있게 한다.
상속
부모 객체가 필드와 메소드를 자식 객체에게 물려주는 것을 말한다.
- 자식 객체에서는 반복된 코드가 줄어듬.- 부모 클래스 코드 변경시 자식에도 같이 적용됨.
다형성
같은 타입이지만 실행 결과가 다양한 객체를 이용할 수 있는 성질을 말한다.
예를 들어 타이어타입에 한국 타이어/금호 타이어 객체를 대입하는 것을 말한다.
객체/클래스/ 인스턴스
클래스는 설계도, 클래스에는 객체를 생성하기 위한 필드와 메서드로 정의되어 있음.
클래스로부터 만들어진 객체를 해당 클래스의 인스턴스라고 함.
클래스 선언
필드, 생성자, 메소드
필드 : 객체의 고유한 데이터, 정보를 저장하는 곳이다. 변수와 다른 점은 필드는 생성자와 메소드 전체에서 사용되며 객체가 소멸되지 않는 한 객체와 함께 존재한다는 점이다.
생성자 : 객체 생성 시 초기화를 담당한다.
생성자 오버로딩 : 생성자의 다양화를 위해 매개 변수를 달리하는 생성자를 여러 개 선언하는 것
예시 : String method1(String one); String method1(String one, int two);
this()는 자신의 다른 생성자를 호출하는 코드로 반드시 생성자의 첫줄에서만 허용된다.
public class Car {
String model;
String color;
Car(String model) {
this(model,"빨간색");
}
Car(String model, String color) {
this.model = model;
this.color = color;
}
void printCar() {
System.out.println(model + " " + color);
}
}
public class CarP {
public static void main(String[] args) {
// TODO Auto-generated method stub
Car car = new Car("제네시스");
car.printCar();
// 제네시스 빨간색
}
}
정적 멤버와 Static
정적 멤버는 클래스에 고정된 멤버로써 객체 생성없이 사용할 수 있는 필드와 메소드를 말함.
public class Calculator {
static double pi = 3.14159;
static int plus(int x, int y) {
return x + y;
};
static int minus(int x, int y) {
return x - y;
};
public static void main(String[] args) {
double i = Calculator.pi;
}
}
public class CalculatorP {
public static void main(String[] args) {
double i = Calculator.pi;
double plus = Calculator.plus(10, 20);
double minus = Calculator.minus(20, 10);
System.out.println(i); // 3.14159
System.out.println(plus); // 30.0
System.out.println(minus); // 10.0
}
}
싱글톤(Singleton)
- 전체 프로그램에서 단 하나의 객체만 만들도록 보장하는 경우가 있는데, 이 객체를 싱글톤이라고 한다.
public class Singleton {
private static Singleton singleton = new Singleton();
private Singleton() {};
static Singleton getInstance() {
return singleton;
}
}
public class SingletonExample {
public static void main(String[] args) {
Singleton obj1 = Singleton.getInstance();
Singleton obj2 = Singleton.getInstance();
if(obj1 == obj2) {
System.out.println("같은 Singleton 객체입니다.");
// 이걸 탐
} else {
System.out.println("다른 Singleton 객체입니다.");
}
}
}
final 필드와 상수
final 필드
- final필드란 초기값이 저장되면 이것이 최종적인 값이 되어서 프로그램 실행 도중에 수정할 수 없다는 것이다.
- 객체 마다 가지는 불변의 인스턴트 필드라고 할 수 있다.
상수(static final)
- 상수는 불변의 값을 뜻한다.
- final 필드와 다른 것은,객체 마다 저장할 필요가 없는 공용성을 띠며, 여러 값으로 초기화될 수 없다는 것이다.
- static final 필드는 객체마다 저장되지 않고, 클래스에만 포함된다. 또한 초기값이 저장되면 변경할 수 없다.
접근제한자
클래스 및 클래스의 구성 멤버에 대한 접근을 제한하는 역할
public : 모든 클래스 접근
protected : 같은 패키지와 자식 클래스만 접근 가능
default : 같은 패키지만 접근 가능
private : 외부 클래스 접근 불가능