CSS어려운것
268
2017-11-14 21:12:23
9
1997

Java 기초 (변수) 질문 드려봅니다..


Java 기초를 학습 하고 있는데 궁금한 것이 생겨서 질문 드려봅니다..

정말 기초적인 거지만 아직 많이 헷갈리는 부분이 많아서요 ㅠㅠ..

1. 인스턴스 변수와 클래스 변수의 차이점이 무엇인가요?

2. 전역변수와 클래스변수는 같은 개념 인가요?

1
  • 답변 9

  • 조진표
    296
    2017-11-14 21:49:01 작성 2017-11-14 21:52:06 수정됨

    1.인스턴스 변수와 클래스 변수 

    먼저 이름을 왜 이렇게 지었나 생각해보세요ㅎㅎㅎㅎ

    변수인데 인스턴스 변수라... 인스턴스안에 있는 변수겠죠?? 하나의 클래스에대해 여러개의 객체가 생성되므로 인스턴스 변수는  서로 독립적으로 존재하겠죠ㅎㅎ서로다른 값을 가지구요 

    클래스변수는 객체쪽이아닌 클래스쪽에 포함된 변수겠죠?? 객체는 하나의 클래스에서 생성되고 여러객체는 이 클래스변수를 공유합니다 즉 같이쓴다는거죠 너도접근하고 나도접근하고 때문에 별다른 객체생성없이 클래스면.클래스변수로 바로 쓸 수 있습니다. 메모리에 여러번이 아닌 단 한번만 올라가게 되는것이죠ㅎㅎ


    2.일반적으로 전역변수는 그 클래스에서 전반적으로 사용되는 변수입니다. 반대로 멤버변수는 특정 메소드내에서만 사용되죠.

    전역변수와 클래스변수는 같은개념이아니죠 결국 객체를 생성하면 전역변수는 인스턴스변수가 되고 클래스 변수는 클래스변수가 되는거죠ㅎㅎ

  • kin5299
    178
    2017-11-14 22:18:43

    인스턴스는 변수는 내가 메모리에 올려 놓고 쓴다, 클래스는 프로세스 로드 시 박혀버림 

  • 구구구구우
    1k
    2017-11-14 22:32:23

    마지막으로 쓰신 말씀이 약간 문제가 있어서 첨언하자면 자바에는 c의 전역변수는 없죠


    하지만 쓰임의 측면에서 클래스 변수와 전역변수는 많이 비슷하니 글렇게 알고 쓰셔도 좋습니다

    다만 자바에서 클래스변수의 적절한 사용에 대해서 이해를 하고 쓰는게 좋아요 전역변수나 클래스 변수는 어디에서나 간단하게 접근 할수 있다는 측면 때문에 잘못 사용한다면 좋지 않은 소프트웨어가 나올수 있기 때문입니다

  • CSS어려운것
    268
    2017-11-15 15:22:22
    구구구구우님이 말씀하신 잘못사용한다는  예는 어떤 예인가요 ?
  • 구구구구우
    1k
    2017-11-15 16:53:27

    http://tech.thegajago.com/2016/02/20/%EC%99%9C-%EC%9E%90%EB%B0%94%EC%97%90%EC%84%9C-static%EC%9D%98-%EC%82%AC%EC%9A%A9%EC%9D%84-%EC%A7%80%EC%96%91%ED%95%B4%EC%95%BC-%ED%95%98%EB%8A%94%EA%B0%80/


    여기 좋은글이 있네요.

    " Static 변수는 global state(역주: 전역 상태. 프로그램 혹은 한 모듈 전체의 상태)를 상징합니다. Global state는 추론과 테스트가 매우 까다롭습니다. 가령 코드에서 static 변수를 사용한다고 하면, 이 변수의 상태는 코드 여러 부분에서 영향을 받을 수 있게 되고 따라서 변화를 추적하기가 어려워집니다. 반면에 이를 객체화하여 인스턴스로 생성하면 테스트 중에 그 변수가 어떤 상태를 가지고 있는지 추론하는 것이 보다 간단해집니다. " 

    특히 이 문구가 참 마음에 드네요, 객체지향이 추구하는 목적? 목표?를 다시금 깨닫게 해주는 문구입니다.


    그런데 여기선 static 의 사용을 지양하라는 글이 대부분이지만, 이것은 쓰지말라는 것을 의미하는게 아니에요. static키워드는 그 나름대로의 장점을 가지고 있기 때문에 잘만 사용하면 개발자로 하여금 편리성을 제공해주기 때문이죠. 또 아무리 객체지향을 부르짖는다 해도 프로그래밍에서 객체로 표현되기 어렵거나 표현 안하는것이 더 좋을때도 있거든요

    그렇기에 우리는 항상 무언가를 사용할때 그것이 가지는 특징(장점, 단점 혹은 문제점)을 이해하고, 단점을 줄이고 장점을 극대화 할수있는 최적의 사용법을 공부해야 합니다.

    static의 적절한 사용 예는 기본서나, Effective Java, 그 밖에 다른 자바 서적들을 많이 읽다보면 자연스레 익히게 될거에요. 특히 자바 개발자라면 Effective Java는 필독서이니 꼭 보세요 다른 언어도 Effective시리즈는 꼭 읽어야 된다고 생각합니다. 

    하나 더 첨언하자면 쓰다보니 클래스변수(정적변수라고도 함, C의 정적변수하고 자바의 정적변수는 아주 조금 다름)에 대한 이야기에서 static이라는 키워드에 대한 이야기로 변모했는데, static은 변수 뿐 아니라 함수, 클래스 에도 적용할 수 있고, 클래스변수 (정적변수)와 마찬가지로 그들의 경우도 잘 이용하면 static을 쓰지 않는 경우 보다 더 나은 방법을 제공하기 때문에 언급하였습니다.


  • CSS어려운것
    268
    2017-11-15 19:14:06

    위 문서는 확인 해봐야겠네요. 좋은 정보 감사드려요


  • CSS어려운것
    268
    2017-11-15 19:35:31

    구구님 질문이 한가지 있습니다.


    지역변수는 제가 알기로는 메소드 내에서 선언 한 변수로서,

    메소드가 종료 될 시 그 변수는 소멸된다고 알고 있습니다..


    만약 컬렉션에 중요한 값이 담겼을 때 그 값을 소멸시키지 않기 위해서는 return 시켜주는것이 맞나요?


    가령 예를 들어, 

    public List<Member> member()
    {
       HashMap<String, Object> m = new HashMap<String, Object>();
       member.add("age", m);
    
       return m;
    } 

    이런식으로요.

  • 구구구구우
    1k
    2017-11-16 09:33:55

    질문 자체가 단답으로 하기에는 무리가 있어서

    설명이 길어야 하는데..... 제 생각에 기본서를 쭉 2~3번은 읽고 나서 그때도 모르면 물어보시는게 좋을거 같네요

  • 조진표
    296
    2017-11-16 09:56:47

    @구구구구우


    좋은내용이네요 static키워드에 대한 개념만 알고있었지 어떤영향이있는지는 깊게생각해본적 없었는데 다시 한번 생각해볼 수 있었습니다

  • 로그인을 하시면 답변을 등록할 수 있습니다.