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

+ Recent posts