JAVA 객체지향 프로그래밍

인스턴스

수업소개

여러 상태의 클래스가 동시에 필요할 때는 클래스 앞에 new를 붙여서 클래스의 복제본을 만들어서 서로 다른 상태를 유지할 수 있습니다. 클래스의 복제본을 인스턴스라고 합니다. 이 수업에서는 인스턴스가 무엇인지, 인스턴스는 어떻게 만드는지를 소개합니다. 객체지향의 핵심이라고 할 수 있는 수업입니다. 

 

 

강의1

소스코드

변경사항

MyOOP.java

public class MyOOP {
    public static void main(String[] args) {
		Print p1 = new Print();
		p1.delimiter = "----";
		p1.A();
		p1.A();
		p1.B();
		p1.B();

		Print p2 = new Print();
		p2.delimiter = "****";
		p2.A();
		p2.A();
		p2.B();
		p2.B();
		
		
		p1.A();
		p2.A();
		p1.A();
		p2.A();
	}

Print.java 

class Print {
    public String delimiter = "";

	public void A() {
		System.out.println(delimiter);
		System.out.println("A");
		System.out.println("A");
	}

	public void B() {
		System.out.println(delimiter);
		System.out.println("B");
		System.out.println("B");
	}
}

 

 

댓글

댓글 본문
  1. 제예솔
    어려운걸 어렵다, 이해하기 힘든 것이 당연하다라고 말씀해주셔서 감사합니다 이고잉님!
  2. 안광민
    완료
  3. 싱와
    인스턴스와 클래스의 차이,

    클래스는 메소드와 변수들을 모아놓은 것으로, 지금까지 복잡한 코드들을 한번의 서랍으로 정리한것을 말한다.
    그런데, 뭐하나를 수정하려고 하면, 일일히 수정해서 다시 써야만 하고 엄청나게 복잡한 과정을 거치게 된다.

    인스턴스는 이런 클래스들의 단점을 보완하기 위하여 등장했다. 그래서 클래스에서 그대로 복제해와서 부분부분만 바꾸어서 클래스들의 성질을 모두 이용한다. 웜마 효율짱!


    인스턴스가 좋은점?


    클래스가 무엇이었나. 번잡한 변수들과 메소드들을 모아서 잘 정리한 서랍 아니었나.

    그런데 집 서랍을 잘 보아라, 다양한 서랍이 있다.
    이 서랍의 손잡이는 분홍색으로, 저 서랍의 손잡이는 녹색으로 바꾸고 싶은데,
    "서랍"이라는것은 전세계의 서랍이 될수도있고, 내방 전체의 서랍이 될 수도 있고,
    그냥 "서랍"이지 어떤 특정한 서랍은 아니다.
    그러다 보니 서랍의 손잡이 색깔을 하나 바꾸려다가
    전세계의 서랍의 손잡이 색깔이 죄다 분홍색이 되버릴수도, 녹색이 되버릴수도 있다.
    우리집 수납의 손잡이가 죄다 분홍색이라니.. 생각만해도 끔찍해진다.

    그래서 인스턴스 개념이 등장했다.
    강의에서는 복제품 냉장고에 대한 이야기를 했다. 이를 좀 더 풀어나가서 방금 이야기했던 서랍 이야기로 돌아가보자.
    서랍의 손잡이 색깔을 하나 바꾸려고 하니까, 아까는 "서랍"이 전체를 지칭하는(클래스) 범위였기 때문에 모든 손잡이 색깔이 바뀌는 불상사가 일어났었다.

    그러나, 이제는 딱 하나의 서랍을 지정하는거다. 그리고 걔 이름을 붙여준다. p1, p2 와 같이..
    그래서 이제는 손잡이를 바꾸는 업자에게 확실하게 이야기할 수 있는 당당함이 생긴다.
    "p1이라는 별명을 가진 서랍의 손잡이를 분홍색으로 바꾸어 주세요.." 라고..
    p1이라는 별명을 가졌지만 얘도 서랍은 서랍이다. 이제 분홍색 손잡이 서랍이 필요할때마다
    전세계의 서랍의 손잡이 색깔을 변경할 필요 없다.

    sonjabiColor p1 = new sonjabiColor();

    이렇게 하면 정확하게 우리는 어떤 손잡이의 컬러를 바꿀지 업자에게 지칭해주는 것이다.
    그러면 기존 서랍의 성질도 모두 가지고 있으면서도, 손잡이의 컬러만 바꿀 수 있는 엄청난 혁명을 겪는것이다!
    와! 소름!


    * 단 주의점은, 기존 클래스에 있는 특허권을 풀어주어야 한다..
    static이라고 요놈은 복제를 못하게 막아놓는 특허권과 같다. 이놈을 제거해서 풀어주면 마구잡이로 복제가 가능하다.
  4. 포기금지
    기존의 코드는 print라는 하나의 클래스를 이용해서 다른 데이터 타입들을 바뀔때 마다 일일히 수정, 입력했다면,
    기존의 static(class안에 소속 되 있다는 키워드.)가 없는 변수와 메소드를 호출, 정의하는 것을 할 수 있다.
    이것을 통해서 print라는 클래스의 각각의 다른 데이터의 복제본(instance)을 만들어 유지시킬 수 있다.

    인스턴스를 이용하여 바뀌어야되는 데이터 타입의 클래스의 코드를 훨씬 더 깔끔하고 중복을 제거하는 효과를 얻을 수 있었다.
  5. 이정왓
    클래스 멤버들의 static을 제거 후 활용.
    인스턴스는 class를 비유하자면 복제한 것.
    값을 유동적으로 바꾸고자 할때
    여러 코드를 중복적으로 짜지 않아도,
    복제된 인스턴스를 통해 클래스안의 멤버들을
    독립적으로 갖다 쓸 수 있음. 변경도 가능.

    복제할때 클래스는 데이터타입의 역할을 함.
    클래스 이름 = new 클래스();
  6. 이정왓
    인스턴스란 클래스를 복제한 것으로 new 키워드를 입력하여 해당 클래스타입의 새로운 이름의 변수를 입력한다. 이는 곧 인스턴스라고한다.

    이 인스턴스를 활용하기위해서 조건이 있는데 복제하여 만든 인스턴스는 클래스에서 사용할 함수를 사용하기위해 static 이라는 조건을 없애야한다.
  7. yechubot
    class, instance.

    class - class 하나만을 사용해야 하는 경우, 안에 값이 다른 경우 계속해서 다시 써줘야 한다. 효율적이지 못하다.
    instance- class 를 복제한 것으로, new를 붙여서 만들어준다 인스턴스는 클래스와 달리 독립적인 형태로 존재하기 때문에 필요한 것을 독립적으로 갖다 쓸 수 있다. 효율적이고, 코드가 보다 깔끔해진다.
    또한, 인스턴스를 쓸 때는 static을 없애줘야 한다. static은 class의 경우에만 쓴다.
  8. Jimin Joo
    클래스를 복제해서 이름을 붙인것이 인스턴스, 인스턴스에 살짝 변화를 줌으로써 훨씬 더 간편하게 코드를 작성할 수 있음.
    단, 해당 클래스에 static은 없어야함.
  9. hyuna lee
    감사합니다. delimiter가 클래스 소속일때는 매번 바꿔주어야 하는데, 인스턴스에서는 delimiter값만 바꿔서 얼마든지 여러개로 복제할 수 있겠네요.
  10. 빽토리얼
    인스턴스를 활용할 시 효용은 간단하다. 하나의 클래스를 여러가지 인스턴스로 복제해서 같은 메서드를 다른 매개변수를 넣으면서 값을 고정시킬 수 있다. 하나의 클래스에 돌려막기를 시도하면 계속 매개변수의 값을 바꿔줘야하기 때문에 상당히 불편한데 이를 방지할 수 있다.
    실 비유를 하자면 런닝머신이 있다고 할 때 하나만 있다면(class) 이를 돌려막기하면서 각 사람마다 달리기 속도, 운동 시간 등을 계속 바꿔줘야 하지만 여러 대의 복제된 런닝머신이 있다면(instances) 이를 사용하는 각 사람에 맞춰서 달리기 속도 및 운동 시간 등을 고정시켜 활용할 수 있기 때문에 번거롭게 세팅을 다시 할 필요가 없는 것이다.
  11. 넘무
    전공수업보다 코딩수업이 재미있어지기 시작합니다..
    큰일인건가??
  12. 김시은
    인스턴스와 클래스의 차이, 그리고 인스턴스의 효용?
    클래스는 그냥 자기 자신 그 자체이다.
    인스턴스는 클래스의 복제본이다.
    인스턴스는 기본적으로 클래스가 가지고 있는 의미 덩어리를 그대로 가지고 있다.
    인스턴스에서 어떠한 꾸밈을 추가하면, 해당 인스턴스는 클래스의 덩어리를 가짐과 동시에 자신만의 꾸밈을 받게 된다.
    각각의 인스턴스는 공통적으로 같은 클래스의 덩어리를 갖지만, 동시에 각자 다른, 각양각색의 꾸밈을 갖는 것이다.
    각자의 꾸밈은 해당 인스턴스에만 적용된다. 어떤 인스턴스에서 어떠한 꾸밈을 추가하더라도, 클래스 자체는 그대로 유지된다.
    어떤 꾸밈을 한 번 더 사용하고 싶을 때 인스턴스를 사용하면 , 코드의 반복을 줄일 수 있다. 따라서 클래스만 사용했을 때보다 훨씬 더 효율적으로 코드를 작성할 수 있다.
  13. jajavava
    인스턴스는 클래스의 복제본이다.
    클래스 내 중복된 코드를 줄이고, 알아보기 쉽게 하기 위해서 인스턴스를 만든다.
    인스턴스는 new를 붙여 만들고 안의 코드를 다르게 할 수 있다.
    이렇게 인스턴스를 사용하는 클래스의 메소드는 static을 빼야한다.
  14. 홀리
    클래스는 여러개의 변수와 메소드가 담긴 상자. 근데 원하는 값에 따라 그 변수와 메소드에 넣어야 하는 데이터, 값이 달라야 하는데 그럴 때 유용하게 쓰이는 것이 인스턴스
    사용 방식, 형태는 같지만 값을 달리 하기 위해 인스턴스 복제본을 만들어 각기 다른 값을 부여하는 것

    이라고 이해했는데 맞을까요. 감자맛님 댓글에 '같은 기능을 가지고 있으나 수치가 다른 각각의 개체로 사용할 수 있다.' 부분을 보니 이해가 잘 되네요. 감사합니다.
  15. 2020.03.15 완료
  16. 용자
    오오.. 감자맛님의 비유 감사합니다.
  17. 감자맛
    여러 대의 냉장고를 만들어 사용한다고 생각해보자.
    설계도(클래스)의 어떤 수치를 변경하게 되면, 만들어진 다른 냉장고의 해당 수치 또한 변경되어 생산된다. (e.g.: 설계도 상의 손잡이 크기를 바꾸면, 이후 만들어지는 모든 냉장고의 손잡이 크기가 바뀌어 생산된다.)
    그러나 설계도를 바탕으로 이미 생산된 냉장고 한대(인스턴스)의 손잡이 크기를 바꾼다고 생각해보자. 다른 냉장고에는 전혀 영향이 가지 않는다.
    이렇듯, 각각의 객체를 개별적으로 컨트롤 하기에 용이하다.
    대화보기
    • 감자맛
      클래스 : 원안 ( 설계도 )
      인스턴스 : 생산물 ( 고유 정체성을 가져서 식별됨 )
      클래스를 복제하여 각각의 인스턴스로 구별하여 활용하면
      번거로운 수정 없이 각각의 개체를 관리하기에 용이하다.
      같은 기능을 가지고 있으나 수치가 다른 각각의 개체로 사용할 수 있다.
    • ㄱㅎㅈ
      import java.io.IOException;
      이 코드가 들어가야 오류가 나지 않습니다.
    • 라또마니
      클래스 : 사람

      인스턴스: 이기호, 박정운, 유재석, 이문세, 레오나르드 디카프리오, 로버트 다우니 주니어, 왕조현
    • 먼지
      자동차에 비유하자면

      클래스 : 같은 내용의 변수나 함수를 반복해서 쓰지 않기 위함
      -> 클래스를 활용하면 흰색 자동차를 100개와 같이 '많이 만들기'가 쉬워짐

      인스턴스 : 클래스를 기반으로 생성된 여러개의 인스턴스들은 각기 다른 재료로 채울 수 있음
      -> 인스턴스를 활용하면 흰색자동차 100개, 빨간색 자동차 100개, 검정색 자동차 100개 와 같이 '다양한 색'의 자동차를 많이 만들기 쉬워짐
    • 이기호
      클래스를 생성하고 그 클래스를 통해 인스턴스를 복제(?)를 하게 되면 정리가 코드의 정리가 간결해지고 효율적으로 유지보수를 할 수 가있다. 라고 정의가 되어지는데 아직 좀 더 봐야할 것 같습니다. 감사합니다^^
    • 쑤우
      수강완료. 감사합니다~~
    • 박정운
      1. 클래스란?
      - 동일한 컨샙을 공유하는 기능들을 한 데 모은 것

      2. 클래스와 인스턴스의 차이점
      - 클래스는 한 번에 한 개의 변수만을 다룰 수 있습니다. => 다른 변수를 사용하려면 기존 변수를 없애야 합니다.
      - 인스턴스는 클래스를 변수별로 복제함으로써 여러개의 변수를 동시에 다룰 수 있습니다.
    • 허공
      (1) 인스턴스는 클래스의 복제본이라고 비유할 수 있다. (2) 어떤 클래스를 인스턴스화 해서 사용하려면 그 클래스의 멤버들(변수, 메소드)에 붙은 (클래스의 소속임을 정의하는) static을 지워줘야 한다. (3) 인스턴스 사용 시, 기존 클래스는 건드리지 않으면서 각각의 인스턴스 내에서 원하는 데이터 부분을 변경할 수 있다. 코드의 중복을 줄임으로써 코드를 훨씬 더 깔끔하게 정리정돈 할 수 있다.
    • 정중사
      인스턴스를 통해서 반복되던 명령들을 메소드에 담고담고 또 다른 클래스로 쪼개고쪼개고 점점더 단순한형태로 변해요! 그런데, 너무 추상적이어서 제 머리속이 점점 더 복잡해져요. ㅠㅠ 저는 익숙해지는데까지 시간이 좀더 필요할 거같아요.
    • 정이사
      클래스를 기반으로 인스턴스를 생성할 수 있다.
      인스턴스를 사용하면 매개변수를 바꿀 때 마다 다시 설정하지 않아도 된다. 인스턴스는 클래스의 매개변수 별로 설정할 수 있기 때문. 이 떄문에 인스턴스는 사용하려는 매개변수가 다양할 경우 편리하게 사용될 수 있다.
    버전 관리
    egoing
    현재 버전
    선택 버전
    graphittie 자세히 보기