안녕하세요

프로그램 과정에서 막혔던 문제들에 대한 해결책 정리


페이지 목록

2011년 1월 17일 월요일

[안드로이드] 자바 생성자 (android java creator)

생성자의 역할
생성자란 ? 객체를 생성할 때 객체의 초기화 작업을 위한 명령 구문
객체가 생성될 때 최초로 실행되는 메서드의 형태로서 생성 시에만 호출하여 수행
특징
생성자의 이름은 클래스명과 같아야함
생성자의 접근 제어자는 private, protected, public 올수 있으며, 생략가능
메서드 아님
리턴 타입표기 않함, 'void' 표기안함
생성자는 상속되지 않음
중복정의 가능
기본 생성자
기본생성자란? 클래스 정의 시 생성자 정의를 하지 않을 경우, JVM에서 자동으로 제공되는 생성자
public 클래스 이름() {}
특징
인자가 없음
생성자 코드 블록의 본문이 비어있음
'new 클래스이름();' 형태로 객체 생성
클래스 정의 시 최소 1개 이상의 생성자가 정의되면 기본 생성자는 제공되지 않음
기본 생성자가 없는 경우, 'new 클래스 기본생성자();'를 이용해 객체 생성할 수 없음
특별한 목적이 없는 경우, 클래스 정의 시에 기본 생성자도 함께 정의함
생성자 정의
생성자 정의 방법
메서드와 비슷
생성자 이름은 메서드 이름과 반드시 같아야 하고 리턴 타입을 표기 하지 않음
생성자 코드 블록의 본문은 객체 생성 시 초기화를 위한 수행 구문으로 구현
      예)     [접근제어자] 클래스이름 ([인자(Argument)리스트]} {초기화 수행구문}
생성자 중복 정의
클래스는 여러 개의 생성자를 정의할 수 있음
생성자의 이름은 같고, 인자를 다르게 하여 여러 개 정의 가능
인자의 개수, 순서, 데이터 타입을 다르게 하여 정의
생성자의 사용
클래스 정의 시, 생성자를 정의한 경우 해당 생성자를 지정하여 객체 생성이 가능
생성자를 호출할 때 인자의 데이터 타입, 순서, 개수 검사해서 해당 생성자 수행
기본 생성자를 이용한 객체 생성 방법
          클래스이름 참조변수 = new 클래스생성자();
생성자를 지정하여 객체 생성 방법
         클래스 이름 참조변수 = new 클래스생성자(초기화1, 초기화2,);
출처: http://skql.tistory.com/72

오늘 안드로이드에서 내가 원하는 함수들을 따로 묶은 자바 클래스를 하나 만들었다. (Activity를 상속받지 않는)

그리고 삽질을 하게 되었다. 계속해서 에러가 나는 것이었다. 이 자바 클래스를 이용할 때 마다 null point exception이 뜨는 것이 아닌가.. 이상 하다 이상하다... 도저히 무엇을 잘못한 것인가

결국 알아낸 것은 null point exception을 뜨지 않게 하기 위해서는 class를 동적 할당을 해줘야 한다는 것이었다. 이것은 자바의 특성인가?? 아니면 무슨 이유에서 꼭 동적할당을 해줘야 되는 것인가? 아시는 분은 제발 답글로 가르쳐 주시기 바랍니다.

문제점

java class - FileManager.java 를 만들었다.

그리고 이 클래스를 사용하기 위해

다른 class에 FileManager fManager; 을 만들고

fManager 내의 함수를 사용하였다.

fManager.readImage();

결과 - NullPointException

해결 방법

FileManager fManager;

fManager = new FileManager();

fManager.init(getBaseContext());

위와 같이 new로 class를 동적할당 하고 내가 필요로 하는 변수들을

init 함수를 통해 지정해주니 해결되었다.

댓글 없음:

댓글 쓰기