[Java]Class클래스1

Michelle Kim·2025년 4월 8일

Springboot-Java

목록 보기
15/20

Class클래스

학습목표
1. 객체 생성을 위한 클래스의 선언
2. 필드를 선언하고 생성 후, 이를 읽어들이거나 변경하는 방법
3. 생성자를 선언하고 생성자에서 필드를 초기화
4. 메소드의 다양한 기능 이해
5. 패키지 선언하는 방법
6. 접근 제한자의 종류와 사용 방법

1. 객체 지향 프로그래밍

객체란(object): 물리적으로 존재, 추상적으로 생각할 수 있는 것 중에서, 자신의 속성을 가지고 있으면서 식별 가능한 것을 말한다.

  • 객체 : 속성(필드field) + 동작(메소드method)으로 구성되어 있음

🟠 객체간의 관계

객체는 개별적으로 사용될 수 있지만, 대부분 다른 객체와 관계를 맺고 있다.

  • 집합관계 : 하나는 부품, 하나는 완성품에 해당
    ex) 자동차 - 엔진, 타이어, 핸들 등으로 구성 =>자동차와 이 부품들은 집합 관계
  • 사용관계 : 객체간의 상호작용 말함
    ex) 사람은 자동차를 사용할때 - 달린다, 멈춘다 등의 메소드 호출 => 사용 관계
  • 상속관계 : 상위(부모)객체를 기반으로 하위(자식)객체를 생성하는 관계
    ex) 상위객체(종류 의미), 하위객체(구체적인 사물)에 해당 => 자동차는 기계의 한 종류이다. => 기계(상위), 자동차(하위)는 상속 관계

🟠 객체와 클래스

클래스: 설계도

  • 클래스에는 객체를 생성하기 위한 필드와 메소드가 정의되어 있다.

인스턴스(instance): 클래스로부터 만들어진 객체

🟠 객체 생성과 클래스 변수

new 클래스()

new : 클래스로부터 객체를 생성시키는 연산자
생성자 : new연산다 뒤에 오는 것, 클래스() 형태 가짐

=> new 연산자로 생성된 객체는 메모리 heap영역에 생성된다.
=> 메모리 내에서 생성된 객체의 위치를 모르면 객체를 사용할 수 없음! 그래서 new연산자는 힙영역에 객체를 생성시킨 후 객체의 번지를 리턴하도록 되어있다.

클래스 변수 = new 클래스();
Student s1 = new Student();

🟠 클래스의 용도

  1. 라이브러리(API:Application Program Interface)용 : 다른 클래스에서 이용할 목적으로 설계된다.
  2. 실행용 : 프로그램 실행 진입점인 main()메소드를 제공하는 역할을 한다.

🟠 클래스의 구성 멤버

클래스에는 객체가 가져야 할 구성 멤버가 선언된다.

  • 구성 멤버 : 필드(field), 생성자(constructor), 메소드(method)
public class ClassName{
//필드
int fieldname;

//생성자
ClassName(){...}

// 메소드
void methodName(){...}
}

1. 필드(field) : 객체의 고유 데이터, 부품 객체, 상태 정보를 저장하는 곳
2. 생성자(constructor) : new연산자로 호출되는 특별한 중괄호{}블록, 객체 생성시 초기화 역할 담당, 메소드와 비슷하게 생겼지만, 클래스이름으로 되어있고 리턴 타입이 없다.
3. 메소드(method) : 객체의 동작에 해당하는 실행 블록

2. Field 필드

필드 : 객체의 고유 데이터, 객체가 가져야 할 부품, 객체의 현재 상테 데이터를 저장하는 곳

🟠 필드 선언

필드 선언 : 클래스 중괄호 {}블록 어디서든 존재할 수 있다.
하지만 생성자와 메소드 중괄호 {}블록 내부에는 선업 될 수 없다.
생성자와 메소드 중괄호 내부에 선언 된것 => 로컬 변수가 된다!

타입 필드 [= 초기값] ;
String comapny = "자동차" ;

타입 : 기본 타입(byte, short, int, long, float, double, boolean) 과 참조 타입(배열, 열거, 인터페이스) 모두 올 수 있다.

🟠 필드 사용

필드 사용 : 필드값을 읽고 변경하는 작업

  • 클래스 내부에서 사용할 경우 : (생성자/메소드에서 사용할경우) 단순위 필드 이름으로 읽고 변경 가능
  • 클래스 외부에서 사용할 경우 : 클래스로부터 객체 생성한 뒤 => 필드 사용해야함!
    - 이유? 필드는 객체에 소속된 데이터, 객체가 존재하지 않으면 필드도 존재하지 않기 때문
public class Car{
// 필드
String company = "현대자동차";
String model = "그랜저";
int speed;
}


public class CarExample{
	public static void main(String[] args){
    	//객체 생성
        Car myCar = new Car();
        
        //필드값 읽기
        System.out.println("제작회사: " + myCar.company);
        System.out.println("모델명: " + myCar.model);
        System.out.println("현재속도: " + myCar.speed);
        
        //필드값 변경
        myCar.speed = 60;
        System.out.println("수정된 속도: " + myCar.speed);
   
       
    }
}

3. Constructor 생성자

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

객체 초기화 : 필드를 초기화, 메소드를 호출해서 객체를 사용할 준비를 하는 것, 생성자를 실행하지 않고는 클래스로부터 객체를 만들 수 없다.

🟠 기본 생성자

모든 클래스는 생성자가 반드시 존재, 생성자를 하나 이상 가질 수 있다.

Car myCar = new Car(); // 기본 생성자

🟠 생성자 선언

생성자를 명시적으로 선언하려면 : 반드시 선언된 생성자를 호출해서 객체를 생성해야만 한다.

클래스(매개변수 선언, ...) {
 // 객체의 초기화 코드
}

생성자 : 메소드와 비슷한 모양 가지고 있으나, 리턴 타입이 없고, 클래스 이름과 동일하다.

매개 변수 선언 : 생략 가능, 여러개를 선언해도 좋음, new 연산자로 생성자를 호출할 때 외부의 값을 생성자 블록 내부로 전달하는 역할을 한다.

🟠 필드 초기화

다른 값으로 초기화 하고 싶을때
1. 필드를 선언할 때 초기값을 주는 방법
2. 생성자에서 초기값을 주는 방법

  • this.필드 : this라는 참조변수로 필드를 사용하는 것과 동일
public Korean(String name, String ssn){
	this.name = name;
    this.ssn = ssn;
}

🟠 생성자 오버로딩

생성자 오버로딩 : 매개변수를 달리하는 생성자를 여러 개 선언하는 것,
매개 변수의 타입, 개수, 순서가 다르게 선언한다!

생성자에서 다른 생성자를 호출할 때 : this() 코드 사용!

클래스([매개변수, ...]{
	this(매개변수, ..., 값, ...); // 클래스의 다른 생성자 호출
    실행문;
}
  • this() : 자신의 다른 생성자를 호출하는 코드, 반드시 생성자의 첫 줄에서만 허용이된다. this()의 매개값은 호출되는 생성자의 매개변수에 맞게 제공해야 한다.
profile
🇬🇧영국대학교)Computer Science학과 졸업 📚Data, AI, Backend 분야에 관심이 많습니다. 👉Email: kimbg9876@gmail.com

0개의 댓글