[Java] 클래스와 데이터

2025. 1. 8. 10:12·Language/Java
반응형

 

☕ 클래스가 필요한 이유

🍪 배열 사용의 한계

String studentNames[] = { "학생1", "학생2", "학생3" };
    int studentAges[] = { 15, 16, 17 };
    int studentGrades[] = { 90, 80, 100 };
  • 한 학생의 데이터가 studentNames[], studentAges[], studentGrades[] 3개의 배열로 나누어져 있다.
  • 따라서 데이터를 변경할 때 매우 조심해서 작업해야 한다.
  • 사람이 관리하기 좋은 방식이 아니다. (→ 사람이 관리하기 좋은 방식은 학생이라는 개념을 하나로 묶는 것)

 

☕ 클래스 도입

🍪 학생 클래스 정의

public class Student {
	String name;
	int age;
	int grade;
}

 

클래스에 정의한 변수를 멤버 변수, 또는 필드라 한다.

  • 멤버 변수(Member Variable): 이 변수들은 특정 클래스에 소속된 멤버이기 때문에 이렇게 부른다.
  • 필드(Field): 데이터 항목을 가르키는 전통적인 용어이다. 데이터베이스, 엑셀 등에서 데이터 각각의 항목을 필드라 한다.
  • 자바에서 멤버 변수, 필드는 같은 뜻이다. (클래스에 소속된 변수)

클래스는 관례상 대문자로 시작하고 낙타 표기법을 사용

  • ex) Student, User, MemberService
public class ClassStart3 {
	public static void main(String[] args) {
		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라고 하면 정수 타입, Sring이라고 하면 문자 타입이다.
  • 클래스를 사용하면 int, String과 같은 타입을 직접 만들 수 있다.
  • 사용자가 직접 정의하는 사용자 정의 타입을 만들려면 설계도가 필요하다. 이 설계도가 바로 클래스이다.
  • 설계도인 클래스를 사용해서 실제 메모리에 만들어진 실체를 객체 또는 인스턴스라 한다.
  • 클래스를 통해서 사용자가 원하는 종류의 데이터 타입을 마음껏 정의할 수 있다.

 

🍪 용어: 클래스, 객체, 인스턴스

클래스는 설계도이고, 이 설계도를 기반으로 실제 메모리에 만들어진 실체를 객체 또는 인스턴스라 한다. 둘 다 같은 의미로 사용된다. 여기서는 학생(Student) 클래스를 기반으로 학생 1(student1), 학생 2(student2) 객체 또는 인스턴스를 만들었다.

 

🍪 1. 변수 선언

Student student1 //Student 변수 선언

  • Student student1
    • Student 타입을 받을 수 있는 변수를 선언
    • int는 정수를, String은 문자를 담을 수 있듯이 Student는 Student 타입의 객체(인스턴스)를 받을 수 있음

 

🍪 2. 객체 생성

student1 = new Student() //Student 인스턴스 생성

student1 = new Studet() 코드를 나누어 분석

  • 객체를 사용하려면 먼저 설계도인 클래스를 기반으로 객체(인스턴스)를 생성해야 한다.
  • new Student(): new는 새로 생성한다는 뜻이다. new Student()는 Student 클래스 정보를 기반으로 새로운 객체를 생성하라는 뜻이다. 이렇게 하면 메모리에 실제 Student 객체(인스턴스)를 생성한다.
  • 객체를 생성할 때는 new 클래스명()을 사용하면 된다.
  • Studnet 클래스는 String name, int age, int grade 멤버 변수를 가지고 있다. 이 변수를 사용하는데 필요한 메모리 공간도 함께 확보한다.

 

🍪 3. 참조값 보관

student1 = x001; //Student 인스턴스 참조값 보관

  • 객체를 생성하면 자바는 메모리 어딘가에 있는 이 객체에 접근할 수 있는 참조값(주소)(X001)을 반환한다.
    • 여기서 X001이라고 표현한 것이 참조값이다. (실제로 X001처럼 표현되는 것은 아님. 예시임.)
  • new 키워드를 통해 객체가 생성되고 나면 참조값을 반환한다. 앞서 선언한 변수인 Student student1에 생성된 객체의 참조값(x001)을 보관한다.
  • Student student1 변수는 이제 메모리에 존재하는 실제 Student 객체(인스턴스)의 참조값을 가지고 있다.
    • student1 변수는 방금 만든 객체에 접근할 수 있는 참조값을 가지고 있다. 다라서 이 변수를 통해서 객체를 접근(참조)할 수 있다. 즉, student1 변수를 통해 메모리에 있는 실제 객체를 접근하고 사용할 수 있다.

 

참조값을 변수에 보관해야 하는 이유

객체를 생성하는 new Student() 코드 자체에는 아무런 이름이 없다. 이 코드는 단순히 Student 클래스를 기반으로 메모리에 실제 객체를 만드는 것이다. 따라서 생성한 객체에 접근할 수 있는 방법이 필요하다. 이런 이유로 객체를 생성할 때 반환되는 참조값을 어딘가에 보관해두어야 한다. 앞서 Student student1 변수에 참조값(x001)을 저장해 두었으므로 저장한 참조값(x001)을 통해서 실제 메모리에 존재하는 객체에 접근할 수 있다.

 

[출처] 김영한의 자바 입문

반응형
'Language/Java' 카테고리의 다른 글
  • [Java] 자바 메서드
  • [Java] Scanner로 입력 받기
  • [Java] 자바 연산자
  • [Java] 자바 변수
올콩
올콩
콩 심은 데 콩 난다
  • 올콩
    콩스토리
    올콩
  • 전체
    오늘
    어제
    • 분류 전체보기 (206) N
      • SSAFY (10)
      • Algorithm (120)
        • 이론 (6)
        • 백준 (BOJ) (112)
        • 프로그래머스 (1)
        • 코드트리 (1)
      • Trouble Shooting (10)
      • Frontend (7)
      • React (17)
      • Next.js (5) N
      • Vue (4)
      • Node.js (2)
      • HTML (9)
      • DevOps (4)
        • Git (4)
      • Language (9)
        • JavaScript (0)
        • Java (9)
      • Embedded (1)
      • CS (5)
        • Network (1)
        • Blockchain (4)
      • 자격증 (2)
      • 기타 (1)
        • Tistory (1)
  • 블로그 메뉴

    • GitHub
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Heap
    강의
    그리디
    SSAFY
    파이썬
    재귀
    알고리즘
    html5
    Error
    Next.js
    Algorithm
    DP
    싸피
    순열
    구현
    수학
    SSAFYcial
    블록체인
    Java
    백준
    백트래킹
    오블완
    브루트포스
    티스토리챌린지
    dfs
    React
    힙
    우선순위큐
    중복순열
    bfs
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
올콩
[Java] 클래스와 데이터
상단으로

티스토리툴바