JAVA/JAVA

이것이 자바다 정리 6장 (클래스)

JUMP개발자 2022. 6. 21. 17:38

객체지향 프로그래밍

부품 객체를 먼저 만들고 이것들을 하나씩 조립해 완성된 프로그램을 만드는 기법

객체지향 프로그래밍의 특징

캡슐화, 상속, 다형성

 

캡슐화

객체의 내부 구조를 알지 못하게하고, 객체가 제공하는 필드와 메소드만 이용할 수 있게 한다.

상속

부모 객체가 필드와 메소드를 자식 객체에게 물려주는 것을 말한다. 

- 자식 객체에서는 반복된 코드가 줄어듬.- 부모 클래스 코드 변경시 자식에도 같이 적용됨.

다형성

같은 타입이지만 실행 결과가 다양한 객체를 이용할 수 있는 성질을 말한다.

예를 들어 타이어타입에 한국 타이어/금호 타이어 객체를 대입하는 것을 말한다.

 

객체/클래스/ 인스턴스

클래스는 설계도, 클래스에는 객체를 생성하기 위한 필드와 메서드로 정의되어 있음.

클래스로부터 만들어진 객체를 해당 클래스의 인스턴스라고 함.

 

클래스 선언

필드, 생성자, 메소드

 

 

필드 : 객체의 고유한 데이터, 정보를 저장하는 곳이다. 변수와 다른 점은 필드는 생성자와 메소드 전체에서 사용되며 객체가 소멸되지 않는 한 객체와 함께 존재한다는 점이다.

생성자 : 객체 생성 시 초기화를 담당한다.

 

생성자 오버로딩 : 생성자의 다양화를 위해 매개 변수를 달리하는 생성자를 여러 개 선언하는 것

예시 : 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 : 외부 클래스 접근 불가능