[JAVA] 김영한 실전 자바 - 클래스와 데이터, 기본형과 참조형

선뀰·2023년 12월 13일
0

JAVA

목록 보기
4/25

1. 클래스가 필요한 이유

학생이 늘어날 때 마다 변수를 추가해야 하는 단점이 있다.
다양한 자료형의 데이터를 묶어 관리하고, 데이터를 처리하는 기능까지 함께 관리하는 문법 요소이다.

문제 : 이전 문제에 배열을 사용해야 한다.

객체지향 문법 요소

클래스와 인터페이스
클래스 : 일반 클래스, 추상클래스

배열을 사용해보자


String[] studentNames = {"학생1", "학생2"};
        int[] studentAges = {15, 16};
        int[] studentGrade = {90, 80};

        for (int i = 0; i< studentNames.length; i++){
            System.out.println("이름:" + studentNames[i] + "나이:" + studentAges[i] + " 성적 : " + studentGrade[i]);
        }

배열을 통해 원하는 값만 넣어서 사용 가능하다. 데이터를 변경할 때 조심해서 제거해야 한다.
3개 배열의 인덱스 순서를 항상 정확하게 맞춰야 한다. = 하지만 좋은 방식은 아니다.
학생이라는 개념을 하나로 묶는 것이다.

2. 클래스 도입

클래스에 정의한 변수들을 멤버 변수, 필드 라고 한다.
멤버 변수 : 특정 클래스에 소속된 변수를 멤버 변수라고 한다.
필드 : 데이터 항목을 가르키는 용어이다. DB, 엑셀에서의 데이터 항목

  • 필드 vs 지역변수
    상위 중괄호가 클래스 일때 -> 필드
    상위 중괄호가 메서드 일때 -> 지역변수
    클래스는 관례상 대문자로 시작, 낙타 표기법을 사용한다.
public class Student {
	String name;
    int age;
    int grade;
}
Student student1;
        student1 = new Student();
        student1.name = "학생1";
        student1.age = 15;
        student1.grade = 90;

        Student student2 = new Student();
        student2.name = "학생2";
        student2.age = 16;
        student2.grade = 80;

        System.out.println("이름 :" + student1.name + "나이 " + student1.age + "성적 " + student1.grade);
        System.out.println("이름 :" + student2.name + "나이 " + student2.age + "성적" + student2.grade);

클래스를 사용하면 int, String과 같은 타입을 직접 만들 수 있다.
정의타입 설계도가 클래스이다. 클래스를 사용하여 실제 메모리에 만들어진 실체를 객체 = 인스턴스라고 한다. 클래스를 통해서 사용자가 원하는 종류의 데이터 타입을 정의할 수 있다.

Student student1
Student는 타입을 받을 수 있는 변수를 선언한다.
student1 = new Student() // Student 인스턴스 생성한다.
객체를 생성할 때는 new 클래스명()을 사용하면 된다.
String name, int age, int grade 멤버 변수를 가지고 있다.

  • 객체를 생성하면 자바는 객체에 접근할 수 있는 참조값(주소)(x001)을 반환한다.
    Student student1에 Student인스턴스 참조값이 보관되어 있다.
    student1변수는 방금 만든 객체에 접근할 수 인슨 참조값을 가지고 있다.
    메모리에 있는 실제 객체에 접근하고 사용할 수 있다.

객체 사용

메모리에 존재하는 객체에 접근해야 한다. .을 사용하여 접근할 수 있다.
Student = student1;
student1 = new Student(); // 메모리 값을 만들어 준다.
student1.name = "학생1";
student1.age = 15;

System.out.println("이름:" + student1.name);

클래스

객체가 가져야 할 속성(변수)와 기능(메서드)를 정의한다.

객체

클래스에서 정의한 속성과 기능을 가진 실체이다. 서로 독립적인 상태를 가진다.
student1 학생1의 속성을 가지는 객체이고, student2는 학생2의 속성을 가지는 객체이다.
student1과 student2는 서로 다를 객체이다.

클래스명 참조 변수명=new 생성자();
A a=new A();
클래스, 참조 변수, new 힙메모리에 저장, A() 생성자->객체

인스턴스

특정 클래스로부터 생성된 객체이다.

객체 vs 인스턴스

인스턴스는 객체보다 관계에 초점을 맞춘다. student1은 Student의 객체이다.
student1은 Student의 인스턴스이다. 인스턴스라는 용어를 주로 사용한다.

포인트 연산자 사용하기

힙 메모리에 직접 접근할 수 있는 방법이 있다. 위치 정보를 포함하고 있는 참조 변수를 이용하여 객체에 접근 .포인트 연산자

참조 변수명.필드명
참조 변수명. 메서드명()

class A {
	int m=3;
    void print() {
    	System.out.println("객체 생성");
    }
}

public class CreateObj {
	public static void main(String[] args) {
    	A a=new A(); // 클래스 객체 생성
        
        a.m=5;
        System.out.println(a.m);
        // 클래스 멤버 활용
        // 0필드 활용 : 필드에 값을 읽고/쓰기
        
        a.print();
     }
}
profile
공부 기록

0개의 댓글