3-2주차. [멋쟁이사자처럼 아기사자반]

김명수·2025년 1월 19일

아기사자반

목록 보기
6/13

3-2주차 시작

클래스 선언

●클래스 선언

  • 클래스 선언
    1.자바는 객체지향 언어
    2.프로그램을 구성하는 요소는 객체이며, 이것이 상호작용 하도록 프로그래밍함
    3.자바는 객체를 만들기 위해서 클래스를 먼저 만들어야함
    4.클래스는 객체를 만들기위한 틀(Ex.붕어빵이 객체라면 붕어빵틀을 클레스라고 할수 있음)
    public class 클래스명{
        
    }
  • 클래스를 선언하는 방법
  • 클래스 블록안에 필요한 구성요소들은 만들어주면됨
public class 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변수가 선언

참조타입

●참조타입

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


출처 : https://school.programmers.co.kr/learn/courses/5/lessons/138

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

String클래스

●String클래스

  • String클래스
    1.문자열을 표현하는 자바에서 가장 많이 사용하는 클래스
    2.new연사자를 이용하지 않고 인스턴스를 만들수 있음
    3.new연사자를 이용해서도 인스턴스를 만들수 있음
        //new연산자를 이용하지 않고 인스턴스를 만드는 경우
        String str1 = "hello";
        String str2 = "hello";

1."hello"라는 문자열이 메모리 중에서 상수가 저장되는 영역에 저장, 상수는 변하지 않는 값을 의미
2.String str2 = "hello"; 이 문장이 실행될 때에 hello 라는 문자열 상수는 이미 만들어져 있으므로 str1이 참조하는 인스턴스를 str2도 참조

        //new연산자를 이용해서 인스턴스를 만드는 경우
        String str3 = new String("hello");
        String str4 = new String("hello");

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

        if(str1 == str2) //참조형이였을대는 실제 값을 비교하지않고 가르키고있는 주소가 같은지 비교, 같은 인스턴스를 참조하므로 결과는 true 
            System.out.println("str1과 str2는 같은 레퍼런스입니다.");
        if(str1 == str3) //서로 다른 인스턴스를 참조하므로 결과는 false
            System.out.println("str1과 str3는 같은 레퍼런스입니다.");
        if(str3 == str4){ //str3과 str4는 서로 다른 인스턴스를 참조하므로 결과는 false
            System.out.println("str3과 str4는 같은 레퍼런스입니다.");
        //String의 큰특징중 하나가 한번 생성된것은 변하지않음
        System.out.println(str1); //출력 hello
        System.out.println(str1.substring(3)); //출력 lo
        //substring-잘라주세요라는 의미를 가지고있음
        //인덱스가 3번인거부터 보여주세요라는 뜻
        //3번부터 나머지만 출력
        System.out.println(str1); //출력 hello
        //str1자체는 안바뀜

필드(field)선언

●필드(field)선언

  • 필드(field)선언
    1.자동차는 자동차 이름, 자동차 번호를 가지고 있고, 여기에서 가지고 있는 것을 속성이라고 말하고 자바에서는 이러한 속성을 필드(Field)라는 용어로 사용
public class Car {
    //타입 필드명
    String name;
    int number;
}
  • Car라는 클래스에 이름과 번호를 필드로 선언한 부분
public class CarExam {
    public static void main(String[] args) {
        Car c1 = new Car();
        Car c2 = new Car();

        c1.name = "소방차";
        c1.number = 1234;

        c2.name = "구급차";
        c2.number = 1111;

        System.out.println(c1.name); //출력 소방차
        System.out.println(c1.number); //출력 1234

        System.out.println(c2.name); //출력 구급차
        System.out.println(c2.number); // 1111
    }
}
  • 이렇게 객체를 생성했을 경우 Car라는 객체가 각각 하나씩 생성이 되고, 그객체들마다 속성이 각각 생겨있음

3-2주차 후기

클래스 선언, 참조타입, String클래스, 필드(field)선언에 대해서 배웠는데,
명확하지 않았던 개념을 확실하게 알게된거같습니다.
특히 참조타입이라는걸 잘모르고있었는데, 새롭게 알게되었고 String클래스에 대해서는 다시한번더 개념을 똑바로 잡았습니다.

profile
신입개발자

0개의 댓글