본문 바로가기
JAVA

JAVA 변수 클래스 객체의 관계

by 윈투 2022. 4. 12.

 

변수란?

 

변수: 메모리에 데이터를 저장하고 저장되어 있는 데이터를 참조할 수 있도록 할당된 공간.
8가지 자료형을 이용하면 JVM이 자동으로 공간을 할당해준다.
(boolean, 하나의 문자, 정수, 실수) 형태의 데이터를 담아 놓았다.

 

 

클래스와 객체의 관계는?

대상은 어떻게 잡는지에 따라서 다양한 특징이 나올 수 있다.
묶음으로 표현할 수 있다.
바라보는 객체에 따라서 추구를 하는데 어떤 특성을 가져올지는 그 대상에 따라서 다르게 나올 수 있다.

객체지향 object oriented-> 대상을 추구하는
모든 것이 대상이 될 수 있다.
그 특성들을 묶을 수 있고 묶음으로 대상을 표현하고 있다.
Java는 대상을 추구하는 방향으로 작성하도록 하고 있다.
그 방법이 클래스라는 키워드로 대상을 추구한다. 이렇게 정의하라고 약속을 한 것이다.

 

클래스의 예시

 

class Student{

}

 

class Aircon{

  시원하다-기능
  전원-속성
  온도조절-기능
  풍향조절-기능
  실외기-속성
  제조사-속성
  형태(벽걸이, 스탠드)-속성
}

 

 

객체의 특성


객체의 특성은 크게 속성과 기능(동작)으로 나누어 볼 수 있다.
Java에서는 속성의 경우 자료형으로 표현할 수 있고 기능(동작)의 경우 메서드로 표현할 수 있다.
한 객체를 대상으로 내용을 열거 -> 데이터를 담기 위해 열거 -> 데이터를 사용하기 위해서 담는다 -> 데이터를 이용해서 컴퓨터에게 할 일을 전하기 위해서

 

 

클래스, 자료형, 인스턴스의 관계

우리가 정의한 자료형은 Java에게도 알려줘야 한다.
자료형에 할당되는 크기는 JVM이 자동으로 할당을 한다. 따라서 Java의 경우 메모리 관리에 신경을 쓰지 않아도 된다는 장점이 있다.


동시에 메모리가 얼마만큼 어디에 할당되고 어디에 저장되는지는 알 수 없다 .int 같은 기본 자료형의 경우 데이터를 바로 써서 담을 수도 있고 변수로 불러 올 수도 있었다.


class를 이용한 참조변수의 경우 특정 크기로 할당되는 메모리의 주소값을 받아서 그 주소값을 통해서 접근할 수 있다.

우리가 정의하는 자료형은 JVM이 제공하는 기능이 아니기 때문에 Java는 모르고 있다.
그래서 class의 속성과 메소드를 확인 시켜주면 그때 할당을 시켜주고 그 할당된 주소값을 반환 받고 변수를 선언한다. 변수는 new라는 키워드를 활용한다. 이렇게 new를 통해서 선언을 하는 것을 인스턴스화 한다고 이야기한다. JVM이 할당한 메모리를 instance라고 부른다. 이렇게 선언된 변수를 참조변수(reference variable)라고 한다.

 

hardware가 동작되고 있는 상태가 instance이고 소프트웨어 관점에서는 객체라고 부른다. 메모리가 할당된 상태이다. 객체나 instance가 혼용되어서 사용되고 있는데 관점에 따라 다르게 쓰인다.

클래스와 인스턴스는 같지 않다.
new라는 연산자를 통해서 할당이 되어졌을 대 인스턴스라고 부를 수 있다.

대학원에서 한 학기 수업으로 다룰 정도로 객체지향의 내용은 심도깊게 들어갈 수 있다. 하지만 프로그래밍을 짜면서 더 심도 있는 내용을 이해할 수 있다.

 

 

package com.model;

class Student{  //데이터를 담는 자료형
        String name; // 이름
        String address; // 주소
         int age; //나이
        String email; //이메일 주소
        String phone; // 폰번호
                
         //'학교에 간다'는 동작, 기능이 된다.
        
         public void goToSchool(){  //static이 빠졌다.
                System. out.println( "학교에 갑니다." );
                
        }
        
         public void studyHard(){
                System. out.println( "열심히 공부한다." );
                
        }
        
}

public class OOP {

         public static void main(String[] args) { //main 이라는 메소드가 위치하고 있다. 메소드는 기능에 대한 정의이다. 한 번 정의해두면 언제든지 불러쓸 수 있기 때문에 중복된 코드 작성을 피할 수 있다.
                 Student student; //java는 대소문자를 구분해서 다른 이름으로 인식, Student는 개발자가 정의한 자료형이다. 참조 변수이다.
                
                 //변수에 데이터 저장방법
                 student = new Student();       //인스턴스화 하고 있다. 할당된 주소값을 반환해준다. 그 주소값을 참조변수가 참조하게 된다.  자바가 제공해주는 연산자. 메모리를 할당해줄 것을 요청하는 키워드의 연산자. 그 뒤에 클래스 이름을 쓴다.그러면 JVM이 자동으로 필요한 메모리를 할당을 해준다. 우리가 정의한 자료형은 하나의 데이터를 갖는 것이 아니다. 메모리의 할당이 되어졌을 때 인스턴스 변수, 인스턴스 메서드  
        
                 student. name = "홍길동";
                 student. address= "서울시 강남구 역삼동" ;
                 student. age = 23;
                 student. email = "abd@abc.com";
                 student. phone= "010-1234-5678";  //인스턴트 변수에 데이터를 쓰고 있는 것이다. 메모리가 할당되기 전에는 필드라고 부른다.
                
                 student.goToSchool(); //메서드 호출방법 속성은 클레스로 저장하고 기능은 메서드로 저장할 수 있다.
                
                 System. out.println( student. name);
                 temp(student ); //주소값을 넘겨주고 있다.
                
        }
 
         public static void temp(Student stud){ //주소값을 받아서, 기본자료형 뿐만 아니라 우리가 정의한 자료형도 얼마든지 전달할 수 있다.
                
                System. out.println( stud. address); //접근을 하려면. address를 넣는다. Student 클래스 안의 주소를 temp 메서드 안에서 출력하는 방법
                 stud.goToSchool();
        }
}


//두 개의 클래스가 있다. , 하나는 학생의 특징을 정의하는 클래스.

 

실행 결과

학교에 갑니다.
홍길동
서울시 강남구 역삼동
학교에 갑니다.

 

댓글