클래스

1. 클래스 선언

자바 : 객체지향 언어 : 프로그램을 구성하는 요소인 객체를 상호작용하도록 프로그래밍함.

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

예를들어 붕어빵이 객체라면, 붕어빵 틀은 클래스

 

자동차 클래스 생성

    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변수가 선언됨

 

2. 참조타입

자바는 변수를 선언하려면 반드시 변수의 타입을 정해줘야함,

자바의 변수타입
기본형타입 참조형 타입
논리, 문자, 정수, 실수 // 얘들은 클래스 아님. 기본형 타입을 제외한 모든 타입. 배열 클래스 등등 모두
int i = 4
4바이트짜리 정수형 변수에 4를 준거임
== 변수가 4라는 값을 가지고 있는 것
String str = new String("hello");
이거는 기본형에 없는 String이니까 참조형
변수가 인스턴스를 가지고 있는 것이 아니라 값의 위치를 가리킴.

 

참조형 변수

예를들어 ) String str = new String("hello");

 -> str 변수 앞에 기본형 타입이 아닌 String클래스가 적혀있다.

 -> 이퀄(=)뒤에는 new 다음에 생성자라는 것이 있다.

 -> new 라는 키워드는 객체를 메모리에 올려준다. 이렇게 메모리에 올라간 객체를 인스턴스라고 말한다.

 

메모리에 올라간 인스턴스를 가리키는 변수, 참조하는 변수, 레퍼런스 하는 변수가 str 이다.

** 참조한다. 레퍼런스 한다라는 것은 변수가 인스턴스를 가지고 있는게 아니라 말그대로 가리킨다는 의미이다.

 

str이라는 변수에는 메모리의 위치 값이 저장되는 것. 값 ㅈ장X

메모리의 위치값이 저장된다고 하더라도, 어떤 메모리에 저장되는지 그 정보를 알 수 있는 방법은 없다.

그렇기 때문에 str변수는 String 인스턴스를 참조한다

 

3. String 클래스

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

 - String[] args

 

가장 많이 사용하는 만큼 자바에서도 특별 취급됨.

모든 클래스는 new를 사용해야만 인스턴스를 만들 수 있는데

String은 new 안쓰고도 기본형 타입처럼 바로 입력하는 방식으로도 인스턴스 생성 가능하고,

일반 클래스와 동일하게 new를 사용해서도 만들 수 있음.

new연산자를 이용하지 않고 인스턴스를 만드는 경우 new연산자를 이용해서 인스턴스를 만드는 경우
String str1 = "hello";
String str2 = "hello";
String str3 = new String("hello");
String str4 = new String("hello");
"hello" 문자열이 메모리 중에서 상수가 저장되는 영역에 저장됨.
상수는 변하지 않는 값을 의미.

String str2 = "hello"; 이 문장이 실행될 때에
hello 라는 문자열 상수는 이미 만들어져 있으므로
str1이 참조하는 인스턴스를 str2도 참조한다.

즉, str 1과 str 2는 같은 인스턴스를 참조하고 있다.
new연산자를 이용하여 인스턴스를 만들면
인스턴스는 무조건 새롭게 만들어진다.

heap영역에 무조건 새로 만들어서 새롭게 참조함.
같은걸 만들더라도 다른 것을 참조함.

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는 같은 레퍼런스입니다.");
    }

 

참조변수끼리 == 로 비교하면 서로 같은 것을 참조하는지 비교한다.

문자열이 같은지 비교하고 싶으면 str1.equals(str2) 이런 식으로 해야함.

 

String의 특징

  • String은 불변 클래스이다. == 불변이란 String이 인스턴스가 될때 가지고 있던 값을 나중에 수정할 수 없다.
  • String은 문자열과 관련된 다양한 메소드를 가지고 있다. 메소드를 호출한다 하더라도 String은 내부의 값이 변하지 않는다.
  • String이 가지고 있는 메소드중 String을 반환하는 메소드는 모두 새로운 String을 생성해서 반환한다.
    String str5 = "hello world";
    String str6 = str5.substring(3);
  • substring은 문자열을 자른 결과를 반환하는 메소드이다. 해당 코드가 실행되어도 str5는 변하지 않는다.
  • str6은 str5가 가지고 있는 문자열 중 3번째 위치부터 자른 결과 즉 새로운 String을 참조하게 된다.

4. 필드 (field) 선언

클래스의 구성 요소인 필드(field)

 == 자동차는 자동차 이름, 자동차 번호를 가지고 있고, 자동차는 달리고 멈추는 기능이 있다.

여기에서 가지고 있는 것을 속성이라고 한다. 자바에서는 이러한 속성을 필드(Field)라는 용어로 사용한다.

 

필드(field)선언

- 필드는 변수를 선언하는 것과 비슷하게 (타입) (필드명) 이렇게 선언하면 됨

  • 이름과 번호를 필드로 가지고 있는 Car클래스 선언
    public class Car{
        String name;    
        int number;
    }

 

  • Car 클래스를 인스턴스화 하기
    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 도 참조

'Java > 기초 공부' 카테고리의 다른 글

클래스 다듬기 - 생성자, this, 오버로딩, 패키지  (0) 2025.11.20
클래스와 객체(2)  (0) 2025.11.20
배열  (0) 2025.11.18
제어문 - 반복문  (0) 2025.11.17
[Java] 입출력  (0) 2025.11.17

+ Recent posts