[Java] 구조체

노현남·2023년 7월 19일
0

Java

목록 보기
8/11

구조체란 ?

구조체란 하나 이상의 변수를 묶어서 새로운 자료형을 정의하는 C언어의 도구이다. 구조체 개념은 객체 지향 언어의 탄생에 지대한 공을 세웠다.

예시를 들어

학생은 아래의 내용을 포함하는 상위 개념이다.

  • 이름
  • 학년
  • 학번

개념단위(엔티티)의 하위 자료형을 내재시켜 생성할 수 있다는 뜻이고.
이것을 사용자 정의 자료형(user defined data type)이라고 부른다.

아래는 구조체의 이해를 돕기 위한 사진이다.

요약

  • struct를 이용하여 Student 구조체를 선언한다.
  • 학생이라는 구조체 변수는 다음과 같은 변수를 포함한다.
    • 정수형 rollno; (아마도 학생 번호를 의미하는 듯)
    • 문자형 이름;
    • 실수형 marks;

자바에서의 구조체

자바에서는 구조체변수를 지원하지 않고, 클래스를 사용한다.

예로 Car 라는 사용자 정의 자료형을 만들어 보겠다.

public class Car {

	String carName;
    String carColor;
    int yearOfProduction;
    int priceOfCar;
    
}
    

Car 클래스 안에 들어있는 carName, carColor, ageOfProduction, priceOfCar라는 변수들을 클래스의 데이터 멤버 또는 멤버 변수라고 부른다.

멤버 변수는 클래스의 객체를 생성했을 때 해당 객체의 상태(데이터)를 저장하는 변수들을 말한다.

클래스의 데이터 멤버들은 객체의 속성을 나타내며, 클래스가 특정 데이터와 작업을 수행하는 방법을 정의하는데 사용된다.

Car 자료형은 다음과 같은 객체의 속성을 멤버 변수로 선언한다.

  1. 차량 명 (carName) : 문자형
  2. 차량 색상 (carColor) : 문자형
  3. 차량 생산 년도 (yearOfProduction) : 정수형
  4. 차량 가격 (priceOfCar) : 정수형

그렇다면 이것을 실제로 사용하기 위해서는 Car 클래스를 객체화 하는 작업이 필요하다. 클래스가 정의 되었다고 해서, 객체가 생성된 것은 아니기 때문

main 함수 내에서 Car 클래스의 객체를 생성해보도록 하겠다.

public static void main (String[] args) {
	Car car;
}

주어진 코드는 main 메서드 안에서 Car 클래스 타입의 변수 car를 선언한 것이다.

여기서 변수 car는 정확하게 말하면 참조 변수인데 (참고) [Java] 데이터 타입 아무튼 참조변수는 객체가 가진 메모리를 직접 가지는 것이 아니라, 해당 객체의 주소 만 참조 하는 것이다.

정리하자면, Car 타입의 변수 car를 선언했다고 해서 이 변수가 실제 메모리를 가지는 것이 아니다. 메모리를 할당하게 하려면 new 연산자를 사용해야한다.

new 연산자를 사용하면 클래스의 인스턴스(객체)를 생성할 수 있다.
즉, 클래스로부터 객체를 생성하고, 해당 객체를 참조하는 참조 변수를 반환한다.

public static void main (String[] args) {
	Car car; // Car 타입의 위치를 저장하는 참조변수
    car = new Car(); // Car 클래스의 인스턴스 (객체 생성);
    
    car.carName = "avante";
    car.carColor = "white";
    car.yearOfProduction = 2022;
    car.priceOfCar = 25000000;
}
profile
겸손하게 독학하기

1개의 댓글

comment-user-thumbnail
2023년 7월 19일

글을 읽는 동안 많은 걸 배울 수 있었습니다.

답글 달기