[Study] Java | 06 클래스

DAVEMINS·2023년 10월 17일
0

Java

목록 보기
6/15
post-thumbnail

06-1 객체 지향 프로그래밍

  • 객체의 상호작용

객체 : 자신의 속성을 가지고 있으면서 식별 가능한 것

(속성=필드, 동작=메소드)

서로 상호 작용하는 수단 = 메소드, 메소드 호출

int result = Calculator.add(10, 20);
  • 객체 간의 관계

집합 - 부품, 자동차

사용 - 사람, 자동차

상속 - 기계, 자동차

  • 객체와 클래스

설계도 = 클래스 (필드와 메소드가 정의되어 있다)

인스턴스 = 클래스로부터 만들어진 객체

  • 클래스 선언

자바의 식별자 작성 규칙에 따라 만들어야 한다

public class Car {
}
  • 객체 생성과 클래스 변수

객체는 클래스로부터 객체를 생성시키는 연산자이다

Car benz = new Car();
//클래스 변수 = new (클래스); 객체를 생성시키는 연산자

라이브러리 클래스 : 다른 클래스에서 이용할 목적으로 설계

실행 클래스 : 프로그램의 실행 진입경로 main() 메소드 제공

  • 클래스의 구성 맴버

필드 : 객체의 데이터가 저장되는 곳

생성자 : 객체 생성 시 초기화 역할 담당

메소드 : 객체의 동작에 해당하는 실행 블록

06-2 필드

  • 필드 선언

필드 : 객체의 고유 데이터(모델, 색깔, 최고속도), 부품 객체(현재속도, 엔진 회전수), 상태 정보(기체, 엔진, 타이어)를 저장하는 곳 (클래스 멤버 변수)

  • 필드 사용

필드의 값을 읽고 변경하고 작업

우선적으로 클래스로부터 객체를 생성한 뒤 필드를 사용해야 한다.

필드나 메소드를 사용하고자 할 때 → 객체 접근 연산자(.) 사용

06-3 생성자

  • 기본 생성자

객체 생성시 초기화를 담당, 몯느 클래스에 반드시 하나 이상 존재

생성자 : new 연산자로 클래스로부터 객체를 생성할 때 호출되어 객체의 초기화를 담당

기본적으로 선언하지 않아도 생성되지만 객체를 다양한 값으로 초기화하기 위해 명시적으로 선언함

  • 생성자 선언
Car(String color, int cc) {
}
  • 필드 초기화

this는 객체 자신을 참고

  • 생성자 오버로딩

생성자 오버로딩 : 다양한 방법으로 객체를 생성할 수 있도록 매개변수를 달리하는 생성자를 여러 개 선언하는 것

  • 다른 생성자 호출 : this()

필드 초기화 내용이 비슷한 경우 필드 초기화 내용은 한 생성자에만 집중적으로 작성하고 나머지 생성자는 초기화 내용을 가지고 있는 생성자를 호출하는 방법으로 개선 → 반드시 상속자의 첫 줄에서만 허용

06-4 메소드

  • 메소드 선언

선언부(메소드 시그니처) : 리턴 타입 / 메소드 이름 / 매개변수 선언 작성

실행 블록 : 실행할 코드 작성

리턴 타입 : 리턴값이 있느냐 없느냐(void)에 따라, 리턴값이 무엇이냐에 따라 기술한다

  • 메소드 이름

자바 식별자 규칙에 맞게 작성 (소문자 등), 길어도 괜찮음

  • 매개변수 선언

매개값은 반드시 매개변수의 타입에 부합되는 값이어야 한다

매개변수의 개수를 알 수 없을 때는 매개변수를 배열 타입으로 선언

  • 리턴문

메소드 선언에 리턴 타입이 있는 메소드는 반드시 리턴문을 사용하여 리턴값을 지정해야 한다

리턴문 이후의 실행문은 결코 실행되지 않는다

리턴값이 없는 메소드 → return;으로 메소드 실행 강제 종료

  • 메소드 호출

클래스 외부에서 호출할 경우 → 우선 클래스로부터 객체를 생성한 뒤 참조 변수를 이용해서 메소드를 호출해야 한다. 도트(.) 연산자를 사용해서 메소드를 호출한다

  • 메소드 오버로딩

클래스 내에 같은 이름의 메소드를 여러 개 선언하는 것, 오버로딩 : 많이 싣는 것

조건 : 매개변수의 타입, 개수, 순서 중 하나가 달라야 한다, 오버로딩된 메소드를 호출할 경우 JVM은 매개값의 타입을 보고 메소드를 선택합니다.

매개값을 다양하게 받아 처리할 수 있도록 하기 위해 만들었다

06-5 인스턴스 멤버와 정적 멤버

  • 인스턴스 멤버와 this

인스턴스 멤버 : 객체마다 가지고 있는 멤버

정적 멤버 : 클래스에 위치시키고 객체들이 공유하는 멤버

인스턴스 필드 : 객체마다 다른 존재

인스턴스 메소드 : 메소드 영역에 저장되고 공유

  • 정적 멤버와 static

정적 멤버 : 클래스에 고정된 멤버로서 객체를 생성하지 않고 사용할 수 있는 필드와 클래스

static을 붙여 선언, 객체 선언을 할 필요없이 클래스 이름에 도트(.) 연산자로 사용

인스턴스 필드나 인스턴스 메소드 사용은 불가

main() 메소드도 동일한 규칙이 적용된다

  • 싱클톤

전체 프로그램에서 단 하나의 객체만 만들도록 실행할 때 사용

생성자를 외부에서 호출할 수 없도록 생성자 앞에 private 접근 제한자를 붙여줌

정적 필드 선언, 정적 메소드 getInstance()로 외부에서 객체 얻음

  • final 필드와 상수

초기값이 저장되는 이것이 최종적인 값이 되어 프로그램 실행 도중에 수정할 수 없음

static final double EARTH_RADIUS = 6400;

06-6 패키지와 접근 제한자

  • 패키지 선언

패키지의 물리적인 형태는 파일 시스템의 폴더, 클래스의 일부분으로, 클래스를 유일하게 만들어주는 식별자 역할

package com.mycompany;

public class Car {...}

사용하고자 하는 클래스 또는 인터페이스가 다른 패키지에 소속되어 있다면, import 문으로 대상을 사용할 것임을 컴파일러에게 알려준다.

서로 다른 패키지에 동일한 클래스 이름이 존재하는 경우 둘 다 사용하기 위해서는 전체 이름을 코드에 서술해야 한다.

  • 접근 제한자

접근을 제어하기 위해서 사용

다른 패키지에서 사용하지 못하게 막거나 객체 생성과 필드, 메소드 사용을 막기 위해 사용

private ⊂ default ⊂ protected ⊂ public

  • 생성자 접근 제한

private ⊂ default ⊂ protected ⊂ public

  • 필드와 메소드의 접근 제한

private ⊂ default ⊂ protected ⊂ public

  • Getter와 Setter 메소드

필드는 외부에서 접근할 수 없게 막고 메소드는 공개해서 메소드를 통해 필드에 접근하도록 유도

0개의 댓글