728x90
추상화
- 중요한 것은 남기고, 불필요한 것은 제거하는 것
캡슐화(encapsulation)
- 관련된 것을 잘 모아서 가지고 있는 것
→ 응집도(Cohesion)가 높다고 표현함
* 좋은 객체는 응집도는 높고 결합도(Coupling)는 낮다.
- 응집도 : 응집도는 모듈의 독립성을 나타내는 개념으로, 모듈 내부 구성요소 간 연관 정도
- 결합도 : 소프트웨어 구조에서 모듈 간의 관련성을 측정하는 척도
객체의 역할, 책임 그리고 협력
- 좋은 객체란 역할과 책임에 충실하면서 다른 객체와 잘 협력하여 동작하는 객체
- 나쁜 객체란 여러가지 역할을 한 가지 객체에 부여하거나, 이름과 맞지 않는 속성과 기능을 가지도록 하거나 제대로 동작하지 않는 객체
- 다른 객체와도 동작이 매끄럽지 않는 객체
다형성
- 프로그램 언어의 각 요소들(상수, 변수, 식, 오브젝트, 함수, 메소드 등)이 다양한 자료형(type)에 속하는 것이 허가되는 성질
메소드 오버로딩(Overloading)
- 메서드의 이름은 같고 매개변수의 갯수나 타입이 다른 함수를 정의하는 것을 의미한다.
- 리턴값만 다르게 갖는 오버로딩은 작성할 수 없다.
패키지
- 클래스는 패키지를 이용하여 관련된 클래스를 관리한다.
- 폴더와 거의 같은 기능을 제공한다고 생각하면 된다.
- 이름 규칙
- 보통 도메인 이름을 거꾸로 적은 후에 프로젝트 이름 등을 붙여서 만든다.
패키지 선언 방법
- package 패키지명 : 주석문이나 빈줄을 제외하고 가장 윗 줄에 선언한다.
- 사용할 때는 import 패키지명.클래스명;
- cmd를 이용해서 컴파일시
- javac -d 경로명 *.java
- -d 옵션을 사용
- 실행시
- java 패키지명.클래스명
상속
- ‘OO는 OO다. OO는 OO의 종류 중 하나다.’ 라고 표현할 수 있다면 상속관계이다.
- is-a 관계 혹은 kind of 관계라고 말하기도 한다.
- 상속 = 일반화 + 확장
상속 선언 방법
[접근제한자] [abstract | final] class 클래스명 extends 부모클래스명 {
...
}
- 아무것도 상속받지 않으면 자동으로 java.lang.Object 를 상속받음
- 최상위 부모 클래스는 아무것도 상속받지 않으므로 결국 모든 클래스는 Object 를 상속받으므로 Object 의 자손이다.
다형성 - 메소드 오버라이딩(Overriding)
- 상위 클래스의 메서드를 하위 클래스가 재정의 하는 것
- 메서드의 이름은 물론 파라미터의 갯수나 타입도 동일해야 하며, 주로 상위 클래스의 동작을 상속받은 하위 클래스에서 변경하기 위해 사용
- 부모 타입으로 자손 타입을 참조할 수 있다.
- 이때, 메소드가 오버라이딩된 경우 무조건 자식의 메소드가 실행된다.
- 메소드와 별개로, 필드는 Type을 따라감
// 두 클래스 모두 run() 메소드를 가지고 있을 경우
Car car = new Bus();
car.run();
// Bus의 run 메소드가 실행됨
중요한 필드는 은닉하고, 필드는 메소드를 통해서만 접근해서 사용해야 한다.
Object가 오버라이딩하도록 제공하는 메소드
- toString() / equals() / hashCode()
- Intellij의 원하는 클래스에서 <마우스 우클릭> 후 생성하면 기본 형식으로 오버라이딩된다.
- 형식은 원하는대로 바꿔도 된다.
- Object 메소드 오버라이딩 예시
생성자
- 인스턴스를 생성할 때 사용한다.
- 어떤 값을 가진채로 인스턴스가 만들어지게 하고 싶을 때 사용
- 클래스 작성시 생성자를 따로 만들지 않았다면 자동으로 기본 생성자가 생성됨
- 기본생성자 : 매개변수를 하나도 받지 않는 생성자
생성자 오버로딩
- 생성자는 매개변수의 개수가 다르거나, 타입이 다르다면 여러개를 가질 수 있다.
- ex)
public class Car {
String name;
int speed;
// 기본생성자
public Car() {
System.out.println("car() 생성자 호출");
}
// 매개변수가 있는 생성자 (오버로딩)
public Car(String name) {
this.name = name;
}
public Car(int speed, String name) {
this.name = name;
this.speed = speed;
}
}
this()
- this() 생성자
- 자기 자신의 생성자를 말한다.
- 생성자 안에서만 사용가능하다.
- 인스턴스 자기 자신을 참조할 때 사용하는 키워드이다.
- 생성자 안에서 super() 생성자를 호출하는 코드 다음 or 첫번째 줄에 위치해야 한다.
super()
- super() 생성자
- 부모 생성자를 의미한다.
- 부모의 생성자를 호출할 때 사용한다.
- 생성자 안에서만 사용가능하다.
- 생성자 안에서 첫번째 줄에만 올 수 있다.
- 사용자가 생성자를 호출하는 코드를 작성하지 않았다면 자동으로 부모의 기본 생성자가 호출된다.
- 부모 클래스가 기본 생성자를 가지고 있지 않다면, 사용자는 반드시 직접 super() 생성자를 호출하는 코드를 작성
728x90
'Spring' 카테고리의 다른 글
[스프링 핵심 원리 - 기본편] #2 인프런 강의 정리(예제만들기 - 프로젝트 생성, 비즈니스 요구사항과 설계) (0) | 2024.06.10 |
---|---|
[스프링 핵심 원리 - 기본편] #1 인프런 강의 정리(객체 지향 설계의 5가지 원칙 SOLID, 객체지향 설계와 스프링) (1) | 2024.06.10 |
서블릿(Servlet)이란? (JSP(Java Server Page)) (0) | 2023.03.02 |
Spring MVC 4 - MVC 프레임워크 만들기 (0) | 2023.02.27 |
Spring MVC 3 - MVC 활용 (1) | 2023.02.27 |