본문 바로가기
study/Java

자바Java 인스턴스의 생성과 사용

by 고기만두(개발자) 2021. 8. 16. 13:38
728x90
반응형

-prologue-

신입사원 시절 사내 기반기술 테크레터 약 20편 정도?를 3개 시즌에 걸쳐 준비하여 배포한 적이 있다.

그때 배포한 내용을 문제되지 않을 선에서 적절히 편집 및 재구성하였다.

시즌1. 자바

시즌2. 자료구조

시즌3. Oracle tuning - 인데 시즌3은 대외비 내용이 많아서 아카이빙 못해둘지도

---------------------------------------------------------------------------------------------------------------------

첫 주제로, 자바 인스턴스의 생성과 사용에 대한 내용을 정리해 보았습니다.

 

/* 아래 코드와 텍스트를 함께 봐 주세요! */
class Tv {
       //속성
       String color;
       boolean power;
       int channel;
      
       //Tv의 기능 메서드
       void power() {
               power = !power; //전원 온오프
       }
      
       void channelUp() {
               ++channel; // 채널 업
       }
      
       void channelDown() {
               --channel; // 채널 다운
       }
}

class TvTest{
       public static void main(String args[]) {
               Tv t1 = new Tv();
               Tv t2 = new Tv();
              
               System.out.println("t1의 채널값은 " + t1.channel + "입니다.");
               System.out.println("t2의 채널값은 " + t2.channel + "입니다.");
              
               t2 = t1;
               t1.channel = 7;
              
               System.out.println("t1의 채널값을 " + t1.channel + "으로 변경했습니다.");
               System.out.println("t1의 채널값은 " + t1.channel + "입니다.");
               System.out.println("t2의 채널값은 " + t2.channel + "입니다.");
              
       }
}

 

JAVA는 객체 지향적 언어입니다.

객체를 만들어서 이를 불러오는 발상은 프로그램의 개발, 유지, 보수 측면에서 코드의 재사용성을 높여 주었고, 관리의 편리함과 신뢰성을 높여주는 결과를 가져왔습니다.

 

객체를 실존하는 ‘TV’에 비유한다면, ‘텔레비전’을 생성하기 위해 필요한 ‘색상, 전원, 채널’ 같은 속성, ‘전원을 켜고 끄거나’ ‘채널을 돌리는’ 기능 등을 정의한 설명서가 ‘클래스’ 입니다.

그리고 이를 ‘인스턴스’화하면 하나의 ‘TV’ 객체가 생성됩니다.

이 인스턴스는 참조 변수를 통해서만 다룰 수 있고, 타입이 클래스에서 지정한 것과 같아야 합니다. 

위 코드에서 Tv 클래스에 색상, 전원, 채널 변수를 만들어 속성을 지정했습니다.

그리고 전원을 켜고 끄는 기능, 채널을 올리고 내리는 기능을 메서드로 만들었습니다.

(메서드 이야기는 3편쯤에서 계속되니 조금만 기다려 주세요!)

그리고 TvTest 클래스의 메인 메서드에서 t1, t2라는 변수를 설정하여 두 대의 Tv 객체를 인스턴스화했습니다.

그러면 위 도표에서 보시듯 t1 t2가 서로 다른 메모리 주소에 저장되어 서로 다른 객체가 생성됩니다.

하지만 TV의 기본 속성과 기능을 똑같이 가지고 있습니다.

둘 다 초기값을 따로 지정하지 않았거든요.

하지만 t2 t1에 대입하게 되면, t2 t1과 같은 메모리 주소를 갖게 됩니다.

그러면 t2가 원래 가지고 있던 메모리 주소는 가비지 콜렉터에 의해 제거됩니다.

참조 변수가 하나도 없는 인스턴스는 더 이상 사용될 수 없기 때문입니다.

그리고 t1의 채널 속성값을 7로 변경했더니, 다음과 같은 결과가 나옵니다.

수학 시간에 함수에 대해 배우면서 y = f(x) 를 배웠었죠.

한 가지 값을 함수에 넣으면 한 가지 값만이 나올 수 있다는 점을 핵심으로 들 수 있습니다.

함수에 따라 여러 값이 한 가지 값을 가리킬 수는 있겠지만, 한 가지 값이 여러 결과를 가져올 수 없었죠.

인스턴스 역시 마찬가지입니다

여러 개의 참조 변수가 하나의 객체를 가리킬 수는 있지만, 하나의 참조 변수에는 하나의 주소만 저장될 수 있다는 점을 이번 예제를 통해 알 수 있었습니다.

728x90
반응형

댓글