Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Tags more
Archives
Today
Total
관리 메뉴

ultra_dev

이것이 자바다 CH6-1(클래스) 본문

이것이 자바다

이것이 자바다 CH6-1(클래스)

ultra_dev 2023. 1. 13. 00:31

☑️ 객체 지향 프로그래밍

  • 객체들을 만들고 조합해서 프로그래밍을 설계, 완성하는 기법
  • 객체간 상호작용으로 동작

☑️ 객체 : 물리적으로 존재하거나 개념적인 것 중에서 다른 것과 식별 가능한 것

  • 속성과 동작으로 구성
  • 필드와 메소드로 구성
  • 객체간의 관계
    • 집합 관계 : 자동차와 부품같은 관계. 작은 객체들을 모아 큰 객체를 만듦
    • 사용 관계 : 다른 객체의 필드를 읽고, 변경하거나 메소드를 호출하는 관계 ex)사람과 계산기
    • 상속 관계 : 부모 자식 관계 ex) 자동차와 기계
  • 매개값(parameter) : 메소드가 실행할 때 필요한 값
  • 리턴값 : 메소드의 실행의 결과, 호출한 곳으로 돌려주는 값

☑️ 객체 지향 프로그램의 특징(캡슐화, 상속, 다형성)

  • 캡슐화 : 외부객체에서 사용하는 객체의 동작을 알지 못하는 상태
    • 객체의 필드, 메소드를 묶고 실제 구현 내용을 외부에 감춤
    • 외부의 잘못된 사용으로 객체가 손상되지 않게 하기 위함
    • 노출 시킬 건지, 숨길 것인지는 접근제한자 사용.
  • 상속 : 부모 객체가 가지고 있는 필드와 메소드를 자식 객체에게 물려주어 자식 객체가 사용할 수 있게함
    • 코드의 재사용성을 높여줌 → 자식이 부모 객체의 필드 ,메소드를 사용할 수 있어 중복 코딩 방지
    • 유지 보수 시간 최소화 → 부모 클래스에서 상속 받은 걸 수정하면 빠르게 수정된 필드 , 메소드 사용 가능
  • 다형성 : 사용 방법은 동일하지만 실행 결과가 다양하게 나오는 성질
    • OCP(Open-Close Principle)을 준수하는 상태

☑️ 객체와 클래스

  • 객체를 생성하려면 설계도에 해당하는 Class가 필요
  • 인스턴스(Instance) : 클래스로부터 생성된 객체

☑️ 필드는 객체의 데이터이므로 객체가 존재해야 사용 가능

☑️ 클래스 명명 규칙

  • 첫 문자 대문자
  • 캐멀 스타일
  • 첫 글자 숫자 불가능 이후 글자부터 가능
  • 특수문자 $, _ 포함 가능
  • 객체 생성 연산자인 new를 통해 클래스로부터 객체 생성
클래스 변수 = new 클래스();

☑️ this

  • 매개변수명이 필드명과 동일하기 때문에 필드임을 구분하기 위해 사용
  • this는 현재 객체를 의미
  • this.필드명 => 현재 객체의 필드

☑️  생성자 오버로딩

  • 매개값으로 객체의 필드를 다양하게 초기화하기 위해 사용
  • 매개변수를 달리하는 생성자를 여러 개 선언하는 것
  • 생성자를 호출할 때 제공되는 매개값의 타입과 수에 따라 실행될 생성자가 결정

☑️ 다른 생성자 호출 -> this()

  • 생성자 오버로딩이 많아질 경우 생성자 간의 중복 코드가 발생
  • 공통 코드를 한 생성자에만 집중적으로 작성, 나머지 생성자는 this를 사용해 공통 코드를 가지고 있는 생성자 호출
Car(String model) {
	this(model, "은색", 250);
}

Car(String model, String color) {
    this(model, color, 250);
};

Car(String model, String color, int maxSpeed) {
    this.model = model;
    this.color = color;
    this.maxSpeed = maxSpeed;
}

☑️ 메소드

  • 객체간의 상호작용하는 방법을 정의하는 것
  • 메소드 선언 : 객체의 동작을 실행 블록으로 정의하는 것
  • 메소드 호출 : 실행 블록을 실제로 실행하는 것
  • 메소드 선언
리턴 타입 메소드명 (매개변수, ...) {
    // 실행할 코드 작성하는 곳
}
  • 리턴 타입
    • 메소드가 실행한 후 호출한 곳으로 전달하는 결과값 타입
    • void : 리턴값이 없는 메소드
    • 리턴 타입이 있는 메소드는 실행 블록 안에서 return문으로 리턴값 반드시 지정
  • 메소드명
    • 소문자로 시작, 캐멀 스타일 작성
  • 매개변수(parameter)
    • 메소드를 호출할 때 전달한 매개값을 받기 위해 사용
    • 매개값이 없다면 매개변수 생략
  • 실행블록
    • 메소드 호출 시 실행되는 부분

☑️ 메소드 오버로딩

  • 메소드 이름은 같되 매개변수의 타입, 개수, 순서가 다른 메소드를 여러 개 선언하는 것
  • 매개변수의 개수 또는 타입이 달라야함
  • 반환타입과는 관계 없음 => 매개변수는 같은데 반환 타입만 다른 경우 오버로딩 성립 X

☑️ 복수 개의 클래스 선언이 포함된 소스 파일을 컴파일하면 바이트 코드 파일(.class)은 클래스 선언 수 만큼 생긴다.

  • 소스 파일 명과 동일한 클래스만 public class)로 선언 가능
  • 만약 다른 클래스도 public으로 선언하고 싶으면 .java 소스 파일을 별도로 생성해야 한다.

✏️ 따라서 소스 파일 하나당 클래스 하나를 선언하는 것이 좋다

☑️ 클래스 용도별 분류

  • 라이브러리 클래스 : 실행할 수 없으며 다른 클래스에서 이용하는 클래스
  • 실행 클래스 : main() 메소드를 가지고 있는 실행 가능한 클래스

☑️ 기본 생성자

클래스에 생성자 선언이 없으면 컴파일러는 기본 생성자를 바이트 코드 파일에 자동으로 추가 시킨다.

→그러나 개발자가 명시적으로 선언한 생성자가 있으면 컴파일러는 기본 생성자를 추가하지 않음

☑️ 가변 길이 매개변수(…)

메소드 매개변수에 가변 길이 매개변수를 넣으면 매개변수의 개수와 상관없이 매개 값을 줄 수 있음

가변 인자 외에도 매개변수가 더 있다면, 가변 인자를 매개변수 중에서 제일 마지막에 선언해야 함.

그렇지 않으면, 컴파일 에러가 발생한다. 가변 인자인지 아닌 지를 구별할 방법이 없기 때문

java: varargs parameter must be the last parameter

+가변인자는 내부적으로 배열을 생성해서 사용한다! → 난발 X
Comments