010 제2 장 모든 것 이 대상,2.2.3자바 의 배열,2.3 은 대상[2.3.1 역할 영역,2.3.2 대상 의 역할 영역],2.4 새로운 데이터 형식 을 만 들 필요 가 없습니다.클래스

2.2.3 자바 의 배열 은 거의 모든 프로 그래 밍 언어 가 배열 을 지원 합 니 다.자바 의 주요 목표 중 하 나 는 안전성 이기 때문에 C 와 C++에서 프로그래머 를 괴 롭 히 는 많은 문제 들 이 자바 에서 다 시 는 나타 나 지 않 을 것 이다.자바 는 배열 이 초기 화 되 고 그 범위 밖에서 접근 할 수 없 도록 확보 합 니 다.이러한 범위 검 사 는 각 배열 의 소량의 메모리 비용 과 운행 시의 아래 표 시 된 검 사 를 대가 로 한다.그러나 이 로 인해 안전성 과 효율 의 향상 으로 바 뀌 었 기 때문에 지불 하 는 대 가 는 가치 가 있다(그리고 자바 는 가끔 이런 조작 을 최적화 할 수 있다).배열 대상 을 만 들 때 실제 적 으로 인용 배열 을 만 들 었 고 모든 인용 은 특정 값 으로 자동 으로 초기 화 됩 니 다.이 값 은 자신의 키워드 null 을 가지 고 있 습 니 다.컴 파일 러 도 기본 데이터 형식의 배열 을 초기 화 할 수 있 습 니 다.이 배열 이 차지 하 는 메모 리 를 모두 0 으로 설정 하기 때 문 입 니 다.
2.3 대상 이 대부분의 프로 그래 밍 언어 에서 변수 생명주기 의 개념 을 영원히 없 앨 필요 가 없고 프로 그래 밍 작업 에서 매우 중요 한 부분 을 차지한다.변 수 는 얼마나 생존 해 야 합 니까?대상 을 없 애 려 면 언제 진행 합 니까?변수 라 이 프 사이클 의 혼란 은 대량의 프로그램 bug 를 초래 할 수 있 습 니 다.이 절 은 자바 가 어떻게 우 리 를 위해 모든 청 소 를 완성 하 는 지 소개 하고 이 문 제 를 크게 간소화 할 것 입 니 다.
2.3.1 역할 역 의 대부분 과정 형 언어 는 역할 역(scope)의 개념 을 가진다.역할 도 메 인 은 그 안에 정 의 된 변수 이름 의 가시 성과 생명 주 기 를 결정 합 니 다.C,C++와 자바 에서 역할 영역 은 괄호 의 위치 에 의 해 결정 된다.역할 영역 에서 정 의 된 변 수 는 역할 영역 이 끝나 기 전에 만 사용 할 수 있 습 니 다."//"이후 줄 끝 에 있 는 모든 문 자 는 주석 입 니 다.축소 형식 은 자바 코드 를 더욱 쉽게 읽 을 수 있 게 한다.자바 는 자유 형식(free-form)의 언어 이기 때문에 빈 칸,탭 문자,줄 바 꿈 은 프로그램의 실행 결과 에 영향 을 주지 않 습 니 다.C 와 C++에서 큰 역할 영역의 변 수 를'숨 기 는'방법 은 자바 에서 허용 되 지 않 습 니 다.자바 디자이너 들 은 이렇게 하면 프로그램 이 혼 란 스 러 워 질 것 이 라 고 생각 하기 때문이다.
2.3.2 대상 의 역할 영역 자바 대상 은 기본 유형 과 같은 생명 주 기 를 가지 지 않 습 니 다.new 로 자바 대상 을 만 들 때 역할 영역 밖에서 생존 할 수 있 습 니 다.후계 장 에서 독자 들 은 프로그램 실행 과정 에서 대상 의 인용 을 어떻게 전달 하고 복제 하 는 지 볼 수 있 을 것 이다.이렇게 하면 재 미 있 는 문 제 를 가 져 온다.자바 가 대상 을 계속 존재 하 게 한다 면 무엇 을 통 해 이 대상 들 이 메모리 공간 을 채 우 고 프로그램 을 막 을 수 있 습 니까?이것 도 자바 가 신기 한 곳 이다.자바 에는 new 로 만 든 모든 대상 을 감시 하고 더 이상 인용 되 지 않 는 대상 을 식별 하 는 쓰레기 회수 기 가 있 습 니 다.너 는 메모리 회수 문 제 를 전혀 걱정 할 필요 가 없다.대상 을 만 들 기만 하면 필요 하지 않 으 면 저절로 사라 진다.이렇게 하면 이러한 프로 그래 밍 문 제 를 없 앨 수 있다.
2.4 새로운 데이터 형식 만 들 기:클래스 가 모든 것 이 대상 이 라면 어떤 대상 의 외관 과 행 위 를 결정 합 니까?대상 의 유형 을 정 한 것 은 무엇 일 까?대부분의 대상 을 대상 으로 하 는 프로 그래 밍 언어 습관 은 키워드 클 라 스 로"새로운 유형의 대상 이 어떻게 보 이 는 지 알려 주 려 고 한다"고 말한다.모든 방법 을 정의 하기 전에는 더 많은 일 을 할 수 있 는 방법 이 없다(즉,의미 있 는 메 시 지 를 보 낼 수 없다).
글 목록
  • 2.2 당신 이 모든 대상 을 만들어 야 합 니 다
  • 2.2.3 자바 의 배열
  • 2.3 영원히 소각 대상 이 필요 없습니다
  • 2.3.1 작용 역
  • 2.3.2 대상 의 역할 영역
  • 2.4 새로운 데이터 형식 만 들 기:클래스
  • 2.2 모든 대상 을 만들어 야 합 니 다.
    2.2.3 자바 의 배열
    거의 모든 프로 그래 밍 언어 는 배열 을 지원 합 니 다.C 와 C++에서 배열 을 사용 하 는 것 은 매우 위험 하 다.왜냐하면 C 와 C++의 배열 은 메모리 블록 이기 때문이다.프로그램 이 메모리 블록 이외 의 그룹 에 접근 하거나,그룹 초기 화 전에 메모리(프로그램 에서 흔히 볼 수 있 는 오류)를 사용 하려 면 예측 하기 어 려 운 결 과 를 초래 할 수 있 습 니 다.
    자바 의 주요 목표 중 하 나 는 안전성 이기 때문에 C 와 C++에서 프로그래머 를 괴 롭 히 는 많은 문제 들 이 자바 에서 다 시 는 나타 나 지 않 을 것 이다.자바 는 배열 이 초기 화 되 고 그 범위 밖에서 접근 할 수 없 도록 확보 합 니 다.이러한 범위 검 사 는 각 배열 의 소량의 메모리 비용 과 운행 시의 아래 표 시 된 검 사 를 대가 로 한다.그러나 이 로 인해 안전성 과 효율 의 향상 으로 바 뀌 었 기 때문에 지불 하 는 대 가 는 가치 가 있다(그리고 자바 는 가끔 이런 조작 을 최적화 할 수 있다).
    배열 대상 을 만 들 때 실제 적 으로 인용 배열 을 만 들 었 고 모든 인용 은 특정 값 으로 자동 으로 초기 화 됩 니 다.이 값 은 자신의 키워드 null 을 가지 고 있 습 니 다.자바 가 null 을 보면 이 인용 이 아직 대상 을 가리 키 지 않 았 다 는 것 을 알 수 있다.모든 인용 을 사용 하기 전에 대상 을 지정 해 야 합 니 다.null 인용 을 사용 하려 고 하면 실행 중 오류 가 발생 합 니 다.따라서 자주 저 지 르 는 배열 오 류 는 자바 에서 피 할 수 있다.기본 데이터 형식 을 저장 하 는 배열 도 만 들 수 있 습 니 다.마찬가지 로 컴 파일 러 도 이러한 배열 의 초기 화 를 확보 할 수 있다.왜냐하면 이 배열 이 차지 하 는 메모 리 를 모두 0 으로 설정 하기 때문이다.배열 은 앞으로 의 장절 에서 상세 하 게 토론 할 것 이다.
    2.3 대상 을 영원히 없 앨 필요 가 없다
    대부분의 프로 그래 밍 언어 에서 변수 생명주기 의 개념 은 프로 그래 밍 작업 에서 매우 중요 한 부분 을 차지한다.변 수 는 얼마나 생존 해 야 합 니까?대상 을 없 애 려 면 언제 진행 합 니까?변수 라 이 프 사이클 의 혼란 은 대량의 프로그램 bug 를 초래 할 수 있 습 니 다.이 절 은 자바 가 어떻게 우 리 를 위해 모든 청 소 를 완성 하 는 지 소개 하고 이 문 제 를 크게 간소화 할 것 입 니 다.
    2.3.1 역할 영역
    대부분의 프로 세 스 형 언어 는 역할 영역(scope)의 개념 을 가지 고 있다.역할 도 메 인 은 그 안에 정 의 된 변수 이름 의 가시 성과 생명 주 기 를 결정 합 니 다.C,C++와 자바 에서 역할 영역 은 괄호 의 위치 에 의 해 결정 된다.예 를 들 면:
    {
    	int x = 12;
    	//Only x available
    	{
    		int q = 96;
    		//Both x & q available
     	}
    	//Only x avai1able
    	//q is out of scope
    }
    

    역할 영역 에서 정 의 된 변 수 는 역할 영역 이 끝나 기 전에 만 사용 할 수 있 습 니 다."//"이후 줄 끝 에 있 는 모든 문 자 는 주석 입 니 다.축소 형식 은 자바 코드 를 더욱 쉽게 읽 을 수 있 게 한다.자바 는 자유 형식(free-form)의 언어 이기 때문에 빈 칸,탭 문자,줄 바 꿈 은 프로그램의 실행 결과 에 영향 을 주지 않 습 니 다.
    다음 코드 는 C 와 C++에서 합 법 적 이지 만 자바 에 서 는 이렇게 쓸 수 없습니다.
    {
    	int x = 12;
    	{
    		int x = 96;//Illegal
    	}
    }
    

    컴 파일 러 는 변수 x 가 정의 되 었 음 을 보고 할 것 입 니 다.따라서 C 와 C++에서 큰 역할 영역의 변 수 를'숨 기기'하 는 방법 은 자바 에서 허용 되 지 않 습 니 다.자바 디자이너 들 은 이렇게 하면 프로그램 이 혼 란 스 러 워 질 것 이 라 고 생각 하기 때문이다.
    2.3.2 대상 의 역할 영역
    자바 대상 은 기본 유형 과 같은 생명주기 가 없다.new 로 자바 대상 을 만 들 때 역할 영역 밖에서 생존 할 수 있 습 니 다.그 러 니까 코드 를 쓰 면
    {
    	String s = new String("a string");
    }// End of scope
    

    인용 s 는 역할 영역 종점 에서 사 라 졌 습 니 다.그러나 s 가 가리 키 는 Srting 대상 은 메모리 공간 을 계속 차지 하고 있 습 니 다.이 작은 코드 에서 우 리 는 이 역할 영역 이후 에 이 대상 을 방문 할 수 없습니다.왜냐하면 그것 에 대한 유일한 인용 은 역할 영역의 범 위 를 넘 어 섰 기 때 문 입 니 다.후계 장 에서 독자 들 은 프로그램 실행 과정 에서 대상 의 인용 을 어떻게 전달 하고 복제 하 는 지 볼 수 있 을 것 이다.
    사실은 new 가 만 든 대상 이 필요 하 다 면 계속 유지 할 것 임 을 증명 한다.이렇게 해서 많은 C++프로 그래 밍 문 제 는 자바 에서 완전히 사 라 졌 다.C++에 서 는 대상 의 보존 시간 이 당신 이 필요 로 하 는 대상 과 똑 같이 길 어야 할 뿐만 아니 라,그것 을 다 사용 한 후에 소각 해 야 합 니 다.
    이렇게 하면 재 미 있 는 문 제 를 가 져 온다.자바 가 대상 을 계속 존재 하 게 한다 면 무엇 을 통 해 이 대상 들 이 메모리 공간 을 채 우 고 프로그램 을 막 을 수 있 습 니까?이것 이 바로 C++에서 발생 할 수 있 는 문제 입 니 다.이것 도 자바 가 신기 한 곳 이다.자바 에는 new 로 만 든 모든 대상 을 감시 하고 더 이상 인용 되 지 않 는 대상 을 식별 하 는 쓰레기 회수 기 가 있 습 니 다.그 다음 에 다른 대상 이 사용 할 수 있 도록 이 대상 들 의 메모리 공간 을 방출 합 니 다.메모리 회수 문 제 를 전혀 걱정 할 필요 가 없다 는 것 이다.대상 을 만 들 기만 하면 필요 하지 않 으 면 저절로 사라 진다.이렇게 하면 이러한 프로 그래 밍 문제(즉,'메모리 누 출')를 없 앨 수 있다.이것 은 프로그래머 가 메모리 방출 을 잊 어 버 려 서 생 긴 문제 이다.
    2.4 새로운 데이터 형식 만 들 기:클래스
    모든 것 이 대상 이 라면 어떤 대상 의 외관 과 행 위 를 결정 하 는 것 일 까?대상 의 유형 을 정 한 것 은 무엇 일 까?'type'이라는 키워드 가 있 기 를 바 랄 수도 있 습 니 다.물론 그 에 상응하는 의미 가 있어 야 합 니 다.그러나 역사 발전의 측면 에서 볼 때 대부분 대상 을 대상 으로 하 는 프로 그래 밍 언어 습관 은 키워드 클 라 스 로"새로운 유형의 대상 이 어떻게 보 이 는 지 알려 주 려 고 한다"고 말 했다.class 라 는 키 워드 는(앞으로 자주 사용 할 것 이 며,이 책 은 이후 굵 은 글자 로 표시 하지 않 을 것 입 니 다)다음 에 새로운 유형의 이름 을 따 르 고 있 습 니 다.예컨대class ATypeName { /* Class body goes here */ }; 은 새로운 유형 을 도입 했다.비록 유형 주 체 는 하나의 주석 문 구 를 포함 하고 있 지만(별표 와 평행봉 과 그 중의 내용 은 주석 이 고 본 장 뒤에 다시 토론 한다).그래서 너 는 그것 으로 너무 많은 일 을 해 서 는 안 된다.그러나 이 유형의 대상 을 new 로 만 들 수 있 습 니 다:ATypeName a=new ATypeName();그러나 모든 방법 을 정의 하기 전에는 더 많은 일 을 할 수 있 는 방법 이 없다(즉,의미 있 는 메 시 지 를 보 낼 수 없다).

    좋은 웹페이지 즐겨찾기