class 선언

ryulhui·2024년 6월 20일

progremmers

목록 보기
3/5

클래스 선언

클래스
자바는 객체를 만들기 위해 반드시 클래스를 먼저 만들어야 한다.
클래스는 객체를 만들기 위한 일종의 틀이다.
붕어빵이 객체라면, 붕어빵 틀은 클래스

자동차 클래스 생성 _public class 클래스 명 { }
public class Car{

}

Car.java란 파일을 만든다.
저장을 하면 이클립스는 컴파일하여 디스크에 Car라는 클래스를 생성한다.
자동차 클래스가 생성되었다고 해서 자동차가 만들어 진것은 아니다.

Car객체 생성하기 (자동차 만들기)
public class CarExam{
public static void main(String args[]){
Car c1 = new Car();
Car c2 = new Car();
}
}

new 연산자는 new연산자 뒤에 나오는 생성자를 이용하여 메모리에 객체를 만들라는 명령.
메모리에 만들어진 객체를 인스턴스(instance)라고도 한다.
이렇게 만들어진 객체를 참조하는 변수가 c1 , c2 이다.
위의 코드가 실행되면 Car라는 객체가 2개가 만들어지고 각각의 객체를 참조하는 c1과 c2변수가 선언됩니다.

gpt
이 말씀은 자바에서 객체 지향 프로그래밍의 기본 개념을 설명한 것입니다. 여기서 몇 가지 중요한 개념을 정리해 보겠습니다.

  1. 클래스와 객체:

    • 클래스(Class): 객체를 만들기 위한 틀이며, 데이터와 메서드(기능)를 포함합니다. 예를 들어, Car 클래스는 자동차의 속성(색상, 모델 등)과 동작(가속, 정지 등)을 정의할 수 있습니다.
    • 객체(Object): 클래스를 기반으로 메모리에 실제로 생성된 것을 말합니다. 붕어빵을 예로 들면, 붕어빵 틀(Class)을 사용하여 만들어진 실제 붕어빵(Object)입니다.
  2. 클래스의 정의:

    • 클래스는 코드로 작성되며, 일반적으로 하나의 클래스는 하나의 파일로 구성됩니다. 예를 들어, Car.java 파일에 Car 클래스를 정의했습니다.
  3. 객체 생성:

    • 객체를 사용하기 위해서는 new 연산자를 이용하여 클래스의 생성자를 호출해야 합니다. 생성자는 객체를 초기화하는 역할을 합니다.
    • 예시에서 Car c1 = new Car();Car c2 = new Car();는 각각 Car 클래스의 객체를 생성하고, 이를 참조하기 위한 변수 c1c2를 선언한 것입니다.
  4. 인스턴스(Instance):

    • 객체가 메모리에 생성된 상태를 인스턴스라고 부릅니다. 예를 들어, c1c2는 각각 Car 클래스의 인스턴스입니다.
  5. 객체 지향 프로그래밍(OOP):

    • 자바는 객체 지향 프로그래밍 언어로, 클래스와 객체를 중심으로 코드를 구성합니다. 이는 코드의 재사용성과 유지 보수성을 높이는 등 여러 가지 장점을 제공합니다.

따라서 자바에서는 객체를 만들기 위해 먼저 클래스를 정의하고, 이를 기반으로 객체를 생성하여 메모리에 할당합니다. 이것이 객체 지향 프로그래밍의 기본 원칙 중 하나입니다.


참조타입

*변수를 선언하려면 반드시 변수의 타입을 정해줘야한다.
기본형타입 과 참조형 타입이 있다.
기본형타입에는 논리형, 문자형, 정수형, 실수형 _ 클래스가 아님

참조형 타입은 기본형 타입을 제외한 모든 타입입니다.
앞서 배웠던, 배열도 참조형이고, 클래스도 모두 참조 타입이다

참조형 변수

String str = new String("hello");

str 변수 앞에 기본형 타입이 아닌 String클래스가 적혀있다.
이퀄(=)뒤에는 new 다음에 생성자라는 것이 있다.
new 라는 키워드는 객체를 메모리에 올려준다. 이렇게 메모리에 올라간 객체를 인스턴스라고 말한다.
메모리에 올라간 인스턴스를 가리키는 변수=참조하는 변수=레퍼런스 하는 변수가 str 이다. 참조한다. 레퍼런스 한다라는 것은 변수가 인스턴스를 가지고 있는게 아니라 말그대로 가리킨다는 의미이다.
str이라는 변수에는 메모리의 위치 값이 저장되는 것이다. 메모리의 위치값이 저장된다고 하더라도, 어떤 메모리에 저장되는지 그 정보를 알 수 있는 방법은 없다. 그렇기 때문에 str변수는 String 인스턴스를 참조한다라고만 아시면 된다.
앞으로 배울 클래스들은 모두 참조형이다


String 클래스
문자열을 표현하는 자바에서 가장 많이 사용하는 클래스

자바 인스턴스 생성 방법
1. new연산자를 이용하지 않고 인스턴스를 만들수 있음

String str1 = "hello";
String str2 = "hello";

"hello"라는 문자열이 메모리 중에서 상수가 저장되는 영역에 저장된다. 상수는 변하지 않는 값을 의미.
String str2 = "hello"; 이 문장이 실행될 때에 hello 라는 문자열 상수는 이미 만들어져 있으므로 str1이 참조하는 인스턴스를 str2도 참조한다.같은 인스턴스를 참조함 같은값을 설정할 필요 x

2.new연산자를 이용해서 인스턴스를 만드는 경우

String str3 = new String("hello");
String str4 = new String("hello");

new연산자를 이용하여 인스턴스를 만들면 인스턴스는 무조건 새롭게 만들어진다.
String str4 = new String("hello"); 이 문장이 실행될때도 새롭게 만들게 되므로, str3 과 str4는 서로 다른 인스턴스를 참조한다.

if(str1 == str2){  // 같은 인스턴스를 참조하므로 결과는 true 
    System.out.println("str1과 str2는 같은 레퍼런스입니다.");
}

if(str1 == str3){  // str1과 str3은 서로 다른 인스턴스를 참조하므로 결과는 false 
    System.out.println("str1과 str3는 같은 레퍼런스입니다.");
}

if(str3 == str4){  // str3과 str4는 서로 다른 인스턴스를 참조하므로 결과는 false 
    System.out.println("str3과 str4는 같은 레퍼런스입니다.");
}

참조변수끼리 == 로 비교하면 서로 같은 것을 참조하는지 비교한다.
String은 다른 클래스와 다르게 new를 사용하지 않고 사용할 수 있다. 메모리를 아끼려면 String은 new를 사용하지 않고 사용하는 것이 좋다.
String은 불변 클래스이다. 불변이란 String이 인스턴스가 될때 가지고 있던 값을 나중에 수정할 수 없다.
String은 문자열과 관련된 다양한 메소드를 가지고 있다. 메소드를 호출한다 하더라도 String은 내부의 값이 변하지 않는다.
String이 가지고 있는 메소드중 String을 반환하는 메소드는 모두 새로운 String을 생성해서 반환한다.

String str5 = "hello world";
String str6 = str5.substring(3); 출력값 -> lo world

substring은 문자열을 자른 결과를 반환하는 메소드이다. 해당 코드가 실행되어도 str5는 변하지 않는다.
str6은 str5가 가지고 있는 문자열 중 3번째 위치부터 자른 결과 즉 새로운 String을 참조하게 된다.


필드(field)선언
자동차는 자동차 이름, 자동차 번호를 가지고 있고, 자동차는 달리고 멈추는 기능이 있다. 여기에서 가지고 있는 것을 속성이라고 한다. 자바에서는 이러한 속성을 필드(Field)라는 용어로 사용한다.
이름과 번호를 필드로 가지고 있는 Car클래스 선언
필드는 변수를 선언하는것과 비슷하게 타입 변수명 필드명으로 선언할 수 있다
문자열을 나타낼수 있는 String 타입으로 name 선언
번호는 숫자라서 int로 선언

public class Car{
    String name;    
    int number;
}

Car 클래스를 인스턴스화 하기 _CarExam에서 작업

    Car c1 = new Car();
    Car c2 = new Car();

Car라는 인스턴스가 메모리에 2개 만들어 진다. 객체별로 name과 number라는 속성을 가진다.

  • 속성 이용하기
    • 참조 변수 다음에 나오는 점.(dot)은 참조변수가 참조하는 객체가 가지고 있는 것을 사용할 때 사용
    //c1.name은  c1이 참조하는 객체의 name 을 의미.

    c1.name = "소방차";  //c1이 참조하는 객체의 name을 소방차로 설정 
    c1.number = 1234;   // c1.number = 1234란 c1이 참조하는 객체의 number를 1234 로 설정 

    c2.name = "구급차"  //c2가 가리키는 객체의name을 구급차로 설정
    c2.number = 1004;  //c2가 가리키는 객체의 number를 1004로 설정


    System.out.println(c1.name);  //콘솔에 c1이 참조하는 객체의 name 을 출력합니다. 
    System.out.println(c1.number); //콘솔에 c1이 참조하는 객체의 number 를 출력합니다. 

    String name = c2.name;   //c2가 참조하는 객체의 name 을 String 타입 변수 name 도 참조하게 합니다.

----------------------------------------------------------------------------------------------------------

profile
개발자 준비생😂

0개의 댓글