오늘은 어제 배운 내용을 다시 복습하면서 객체지향 프로그래밍의 여러 핵심 개념들을 학습했다.
이론 위주이긴 했지만, 개념들이 점점 서로 연결되는 느낌이 들어서 의미 있는 시간이었다.
메서드 오버로딩이란 같은 이름의 메서드를 여러 개 정의하는 것이다.
단, 다음 조건을 만족해야 한다.
public class MethodOverloading {
public void printf(int value) {
System.out.println("정수 : " + value);
}
public void printf(double value) {
System.out.println("실수 : " + value);
}
public void printf(String value) {
System.out.println("문자열 : " + value);
}
public void printf(String... values) {
System.out.println("여러 문자열:");
for (String value : values) {
System.out.print(value + " ");
}
System.out.println();
}
}
이처럼 같은 이름의 메서드를 상황에 맞게 사용할 수 있다.
메서드 체이닝이란 메서드를 연속해서 호출하는 방식이다.
보통 메서드에서 this를 반환할 때 사용한다.
class Car {
String name;
int speed;
Car setName(String name) {
this.name = name;
return this;
}
Car setSpeed(int speed) {
this.speed = speed;
return this;
}
void drive() {
System.out.println(name + "이(가) " + speed + "km로 달립니다!");
}
}
public class Main {
public static void main(String[] args) {
new Car()
.setName("BMW")
.setSpeed(100)
.drive();
}
}
아직은 익숙하지 않지만, 많이 사용해보면서 익혀야 할 것 같다.
모든 클래스는 생성자를 가지고 있다.
생성자를 정의하지 않으면 컴파일러가 기본 생성자(Default Constructor)를 자동으로 만들어준다.
public class Book {
String title;
String author;
int price;
public Book() {
title = "Java";
author = "구창현";
price = 30000;
}
}
Car c1 = new Car();
c1.name = "현대";
c1.number = 1234;
class Car {
String name;
int number;
Car(String n, int num) {
name = n;
number = num;
}
}
Car c1 = new Car("현대", 1234);
생성자를 사용하면 초기화 과정의 번거로움과 실수를 줄일 수 있다.
this : 현재 객체(인스턴스)를 가리키는 참조 변수this() : 같은 클래스의 다른 생성자 호출this.name = name;
상속은 부모 클래스의 기능을 물려받아 사용하는 것이다.
final 키워드가 붙은 클래스는 상속할 수 없다.
이 개념은 다음 수업에서 더 깊이 다룰 예정이다.
패키지는 관련된 클래스들을 그룹화하는 구조이다.
클래스 이름 충돌을 방지하고 관리가 용이해진다.
윈도우의 폴더 구조와 유사하다.
com.company.projectpackage com.mycompany.model;
import는 다른 패키지에 있는 클래스를 가져오는 것이다.
import java.util.Scanner;
import java.util.Random;
import static java.lang.Math.PI;
import static java.lang.Math.sqrt;
double area = PI * 5 * 5;
double root = sqrt(16);
Math.를 생략할 수 있어 편리하지만,
과도하게 사용하면 가독성이 떨어질 수 있다.
new를 사용할 때마다 인스턴스 생성클래스명.메서드()로 호출오늘은 어제 잠깐 배운 내용들을 다시 복습하면서
메서드 오버로딩, 메서드 체이닝 등 여러 개념을 배웠다.
역시 백엔드 쪽은 공부해야 할 개념이 정말 많다는 생각이 들었다.
그래도 로또, 주사위, 책 같은 예제를 객체로 추상화해보는 과정이 재미있었다.
주말 동안 강사님이 내주신 과제를 풀면서
복습도 하고, 잠깐 쉬는 시간을 가져야겠다.