개발저장소

[Java] 클래스 - 1 본문

Programming Language/Java

[Java] 클래스 - 1

개발소 2024. 4. 26. 08:57

▶ 객체와 객체 지향 프로그래밍

https://develrepo.tistory.com/24

 

[Java] Java란?

1. Java Java는 썬 마이크로시스템즈에서 개발한 객체 지향적인 프로그래밍 언어이다. 특징 JVM(Java Virtual Machine) 위에서 동작하기 때문에 운영체제와 상관없이 동작한다. 객체 지향 프로그래밍에 적

develrepo.tistory.com

 

 

1. 클래스와 인스턴스

클래스(Class)객체를 생성하기 위한 설계도이다. 객체 그 자체를 오브젝트(Object)라고 부르며, 클래스로부터 생성된 객체를 인스턴스(Instance)라고 부른다. 인스턴스는 클래스와의 관계에 중점이 있다.

클래스를 선언하는 것은 객체를 생성하기 위한 설계도를 작성하는 작업이라고 할 수 있다.

 

클래스를 생성하면 클래스의 이름과 같은 소스 파일(.java)가 생긴다. 소스 파일을 컴파일하면 바이트 코드 파일(.class)가 생성되는데, 소스 파일 내의 클래스만큼 생성된다.

 

클래스를 사용해 객체를 생성하려면 객체 생성 연산자인 new를 사용하면 된다.

Book book = new Book();
// 클래스 변수 = new 클래스()

 

new 연산자는 힙 영역에 저장 공간을 할당받고, 주소를 스택 영역의 클래스 변수에 대입시킨다.

 

 

클래스의 구성

클래스는 크게 데이터가 저장되는 필드(Field), 객체를 생성할 때 초기화를 담당하는 생성자(Constructor), 그리고 객체가 수행할 동작을 나타내는 메서드(Method)로 나눌 수 있다.

 

필드 선언 방법은 변수 선언과 동일하며, 기본 타입과 참조 타입 모두 가능하다.필드는 외부 객체나 객체 내부의 생성자 및 메서드에서 사용된다.

// 객체 내부에서 사용
class Book {
    String title;
    int price;

    void discount(int sale){
        price = price * (100 - sale) / 100;
    }
}
// 외부 객체에서 사용
Book javaBook = new Book();
javaBook.price = 30000;

 

 

new 연산자는 객체를 생성하고, 생성자를 호출해 객체를 초기화한다.

모든 클래스는 하나 이상의 생성자가 존재한다. 만약 생성자를 선언하지 않았다면, 컴파일러는 기본 생성자를 바이트 코드 파일에 자동으로 추가한다. 단, 생성자를 만들어 두었다면 기본 생성자를 추가하지 않는다.

 

생성자는 클래스의 이름과 같고 리턴 타입이 존재하지 않는다.

Book(String title, int price) {
    this.title = title;
    this.price = price;
}

 

 

생성자 오버로딩

매개값으로 필드를 다양하게 초기화하기 위해선 생성자 오버로딩이 필요하다.

매개변수의 타입, 개수, 순서를 달리하는 생성자를 여러 개 선언하는 것이다.

class Book {
    Book() { ... }
    Book(String title) { ... }
    Book(String title, int price) { ... }
}

 

생성자 오버로딩이 많아질 경우, 생성자 간 중복된 코드가 발생할 수 있다. 이때, 공통 코드를 작성하고 다른 생성자가 this()를 사용해 생성자를 호출하는 방법으로 개선할 수 있다.

 

 

메서드는 객체의 동작을 정의한 것이다. 다른 객체에서도 호출될 수 있기 때문에 객체 간 상호작용을 정의한 것으로도 볼 수 있다.

메서드는 리턴 타입이름, 매개변수로 이루어져 있다.

다른 언어에서 함수라고 하는 개념과 비슷하지만, 객체 내에서만 사용되는 함수를 메서드라고 하는 특이사항이 있다.

리턴타입 이름 (매개변수, ... ) {
    ...
    return; // 리턴타입이 void라면 불필요
}

 

 

메서드 오버로딩

생성자와 비슷하게 이름은 같지만 매개변수의 타입, 개수, 순서가 다른 메서드를 여러개 선언하는 것을 말한다.

보통 다양한 매개값을 처리하기 위해 사용된다.

 

만약 메서드가 가변길이의 매개변수를 가지거나 중복되는 부분을 줄이고 싶다면, 가변길이 매개변수를 사용하는 것이 좋다.

int sum(int ...values) {}

int result1 = sum(1, 2, 3);
int result2 = sum(1, 2, 3, 4, 5);

 

매개값은 배열로 자동으로 변환되어 사용된다.

 

 

'Programming Language > Java' 카테고리의 다른 글

[Java] 상속  (0) 2024.05.03
[Java] 클래스 - 2  (0) 2024.04.30
[Java] 제어문  (0) 2024.04.10
[Java] 연산자  (0) 2024.04.10
[Java] 변수와 타입  (0) 2024.03.29