Study/Java

클래스 객체 필드 메서드 인스턴스 (1)

고래상어9 2022. 6. 30. 20:04
class Animal {
}

public class Sample {
	public static void main(String[] args) {
		Animal cat = new Animal();
    }
}

객체 만들기 

new는 객체를 생성할 때 사용하는 키워드 

이렇게 하면 Animal 클래스의 인스턴스(instance)인 cat, 즉 Animal의 객체가 만들어진다.

 

메소드 호출은 다음과 같은 형태를 가지고 있다.

객체에 도트(.) 연산자를 붙이고 메소드 이름을 기술하면 된다.

도트 연산자는 객체의 필드와 메소드에 접근할 때 사용한다.

매개값은 메소드를 실행하기 위해 필요한 데이터이다.

Ex> 10+20에서 10과 20은 +의 매개값이다.(더하기 기능의 매개값)

리턴값은 메소드가 실행하고 나서 호출한 곳으로 돌려주는(리턴하는) 값이다.

 

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

클래스로부터 만들어진 객체를 해당 클래스의 인스턴스라고 한다.

A 객체는 A 클래스의 인스턴스인 셈

클래스로부터 객체를 만드는 과정 = 인스턴스화 

* 하나의 클래스로부터 여러 개의 인스턴스를 만들 수 있다. ( 동일한 설계도로 여러 대의 자동차 생성하는 것과 동일)

 

객체 지향 프로그래밍 개발 3가지 단계

1. 클래스 설계

2. 설계된 클래스를 가지고 사용할 객체 생성

3. 생성된 객체 이용.

 

단순히 main() 메서드만 작성해서 실행할 목적으로 클랙스를 이용. 

main() 메소드가 없는 클래스는 객체 생성 과정을 거쳐 사용해야 한다.

 

클래스 선언

public class Person{
}

 *파일이름과 일치하지 않는 클래스 선언에 public 접근 제한자를 붙이면 컴파일 에러 발생

클래스로부터 객체를 생성하는 방법은 new 연산자를 사용하면 된다.

Person p1 = new Person();

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

new 연산자 뒤에는 생성자가 오는데, 생성자는 클래스() 형태를 가지고 있다.

new 연산자로 생성된 객체는 메모리 힙(heap) 영역에 생성된다.

new 연산자는 힙 영역에 객체를 생성시킨 후, 객체의 주소를 리턴하도록 되어 있다.

이 주소를 참조 타입인 클래스 변수에 저장해 두면, 변수를 통해 객체를 사용할 수 있다.

 

Ex> Student 클래스를 선언, StudentExample 클래스의 main() 메서드에서 Student 객체를 생성

public class Student{
}
//클래스로부터 객체 생성

public class StudentExample {
	public static void main(String[] args) {
      Student s1 = new Student();
      System.out.println("s1 변수가 Student 객체를 참조합니다.");
      
      Student s2 = new Student();
      System.out.println("s2 변수가 또 다른 Student 객체를 참조합니다.");
    }
  }

s1과 s2가 참조하는 Student 객체는 완전히 독립된 서로 다른 객체이다.

 

클래스의 용도 : 라이브러리(API : Application Program Interface) 용 / 실행용

1. 라이브러리 클래스는 다른 클래스에서 이용할 목적으로 설계된다. 프로그램 전체에서 사용되는 클래스가 100개라면 99개는 라이브러리이고 단 하나가 실행 클래스이다.

2.실행 클래스는 프로그램의 실행 진입점인 main() 메서드를 제공하는 역할을 한다. Student는 라이브러리클래스이고 StudentExample은 실행 클래스이다. Student에 main() 메서드를 작성해서 라이브러리인 동시에 실행 클래스로 만들 수도 있다.

클래스의 구성 멤버

필드(Field), 생성자(Constructor), 메소드(Method)

이 구성 멤버들은 생략되거나 복수 개가 작성될 수 있다.

public class ClassName {

	//필드 : 객체의 데이터가 저장되는 곳
    int fieldName;
    
    //생성자 : 객체 생성 시 초기화 역할 담당
    ClassName() {}
    
    //메소드 : 객체의 동작에 해당하는 실행 블록
    void methodName() {}
  
}

필드(Field) : 

필드는 객체의 고유 데이터, 부품 객체, 상태 정보를 저장하는 곳이다.

선언 형태는 변수와 비슷하지만, 필드를 변수라고 부르지 않는다.

변수는 생성자와 메소드 내에서만 사용되고 생성자와 메소드가 실행 종료되면 자동 소며로딘다.

하지만 필드는 생성자와 메소드 전체에서 사용되며 객체가 소멸되지 않는 한 객체와 함께 존재한다.

생성자(Constructor)

생성자는 new 연산자로 호출되는 특별한 중괄호 { } 블록이다.

생성자의 역할은 객체 생성 시 초기화를 담당한다.

필드를 초기화하거나, 메소드를 호출해서 객체를 사용할 준비를 한다.

생성자는 메소드와 비슷하게 생겼지만, 클래스 이름으로 되어 있고 리턴 타입이 없다.

메소드(Method)

메소드는 객체의 동작에 해당하는 중괄호 { } 블록을 말한다.

중괄호 블록은 이름을 가지고 있는데, 이것이 메소드 이름이다. 

메소드를 호출하게 되면 중괄호 블록에 있는 모든 코드들이 일괄적으로 실행된다.

중괄호 블록은 이름을 가지고 있는데 이것이 메소드 이름이다.

메소드를 호출하게 되면 중괄호 블록에 있는 모든 코드들이 일괄적으로 실행된다.

메소드는 필드를 읽고 수정하는 역할도 하지만, 다른 객체를 생성해서 다양한 기능을 수행하기도 한다.

메소드는 객체 간의 데이터 전달의 수단으로 사용된다.

외부로부터 매개값을 받을 수도 있고, 실행 후 어떤 값을 리턴할 수도 있다.