객체를 A, B라고 칭하겠다.
public class Car {
}
public 접근 제한자?
→ 파일 이름과 동일한 이름의 클래스 선언에만 붙일 수 있다.
소스 파일당 하나의 클래스를 선언하는 것이 일반적!
한 파일에 두개 이상의 클래스를 선언 못하는 것은 아니다.
소스 파일은 그냥 클래스 선언을 담고 있는 저장 단위일뿐..
new 클래스();
new → 객체 생성 연산자. (2주차에서 이를 사용한 과제를 진행했었다!) new 연산자로 생성된 객체 → 메모리 힙 영역에 생성Car 변수 = new Car();
Scanner scanner = new Scanner(System.in);
✅ new 연산자로 객체를 생성하고 객체의 주소를 변수에 저장해야 변수가 객체를 잘 참조할 수 있다!! 객체 생성만 띡하고 끝내면 안된다.Car myCar = new Car();
// Car 클래스의 필드에 int speed; 가 있다고 가정
myCar.speed = 60;
명시적으로 생성자를 선언하는 이유?
→ 객체를 다양한 값으로 초기화하기 위해!
public class Car {
...
Car(String model, int speed, String color) {}
}
public class CarExample {
Car myCar = new Car("벤츠", 180, "검정");
}
클래스에 생성자가 명시적으로 선언되어있을 경우에는 반드시 선언된 생성자를 호출해서 객체를 생성해야한다.
public class Korean {
String nation = "대한민국";
String name;
int age;
// 생성자
public Korean(String name, int age) {
this.name = name;
this.age = age;
}
}
Korean say = new Korean("세이", 20);
Korean ho = new Korean("호", 20);
🤔
this 가 뭐야?
- 필드와 매개변수 이름이 동일하면 생성자 내부에서 해당 필드에 접근할 수 없다.
- 동일한 이름의 매개변수의 우선순위가 더 높아서!
- 그래서 자기 자신의 참조를 나타내는 ‘this’를 사용!🤔 생성자 오버로딩이 왜 필요할까?
객체가 생성될 떼 외부에서 제공되는 데이터가 없다면 기본 생성자로 객체를 생성해야한다.
또한 데이터가 따로따로 각각 제공될때도 객체를 생성할 수 있어야한다.
근데 생성자가 하나뿐이라면 그 형식에 맞춰서만 데이터를 보낼 수 있기에 위와 같은 요구조건을 수용할 수 없다.
따라서 다양한 방법으로 객체를 생성할 수 있도록 생성자 오버로딩이 필요하다!
public class Car {
String model;
String color;
int speed;
Car() {}
Car(String model) { this.model = model; }
Car(String model, int speed) {
this.model = model;
this.speed = speed;
}
}
public class Computer {
int sum1(int[] values) {
int sum = 0;
for(int i = 0; i < values.length; i++) {
sum += values[i];
}
return sum;
}
int sum2(int ... values) {
int sum = 0;
for(int i = 0; i < values.length; i++) {
sum += values[i];
}
return sum;
}
}
✅ int sum2(int ... values)
-> 메소드 호출 시 넘겨준 값의 수에 따라 자동으로 배열이 생성되고 매개값으로 사용된다.‘static’ 키워드를 추가적으로 붙인다.
public class Calculator {
String color;
static double pi = 3.14159;
}
final
상수
이번 주차에는 용어가 쏟아질 듯이 많이 나와서 이렇게 정리를 했다.
뜻과 예시 위주로 정리를 해보는 주차였다-!
자바와 '객체'는 서로 떼어내려고 해도 항상 같이 붙어다니는 수식어 같은 느낌이다.
우리는 왜 객체지향 프로그래밍을 하는 것일까?
구조적 설계를 통한 안정적인 구조를 구축하기 위해서라고 할 수 있다.
구조적 설계의 핵심은 작은 단위로 나누는 것!
근데 잘못 나누면 오히려 수정하기 어려울 수도 있기 때문에
무조건적으로 객체지향이 좋은 것만은 아닌..
적재적소에 맞게 나눠 사용해야한다.
객체가 어떤 역할을 하는지, 어떤 책임을 가지고 있는지를 기반으로 설계를 하면 나중에 재사용과 변경에 유연하게 작용할 수 있다.
자율성을 가진 객체들을 서로 잘 협력하며 사용할 수 있도록
분할하는 설계가 객체 지향 프로그래밍이라고 볼 수 있다.
객체끼리의 역할, 책임을 적절하게 나누는 것이 중요하다.
객체 혼자 너무 많은 비지니스 로직을 포함하지 않게 설계하는 것이 중요!