728x90

안드로이드 앱 프로그래밍 책과 인터넷 검색을 통해서 안드로이드 앱 프로그램을 만드는 연습을 하다보니 한계에 부딪치기 시작했다.

인터넷에 올라온 소스코드를 가지고 테스트를 해보니 전화번호부 가져오기를 하다보니 원하지 않게 값이 저장된다. 거의 유사한 코드들이 복사해서 돌아다니고 있다.

그래서 자바 책을 들여다보면서 기본적인 사항을 내 나름대로 조금씩 정리를 해둔다.

처음부터 문법만 접하면 어떻게 활용해야 하는지를 몰라서 성취감이 없다.

목표를 정하고 만들어야겠다는 걸 하기 위해 기능을 하나씩 익히고 부족하면 문법사항을 들여다보면서 배우는게 초보자인 나에게는 효율적이다.

부족하지만 그동안 작성해두었던 게시물 중심으로 샘플을 활용하여 작성해둔다.


주석문

// 한줄 주석


/*

여러줄 주석

*/ 


/**

 document 생성용 주석

*/



변수(Variable) : 프로그램이 실행되는 동안 데이터를 저장하기 위한 공간

- 메모리 공간 할당 + 메모리 공간의 이름

- int 와 같이 변수의 특성을 결정짓는 키워드를 가리켜 자료형이라 한다.

- 변수 이름의 제약 사항

  . 숫자로 시작 불가

  . $와_ 이외의 다른 특수문자는 사용불가

  . 키워드는 변수의 이름으로 사용 불가

- short 형 데이터는 int형 데이터로 자동 변환한다.

- 자바에서는 true 와 false는 그 자체로 저장이 가능한 데이터이다.

- 1과 '1'은 서로 다르다.

지역변수

 - Local Variable(지역변수)는 메서드 안에 선언된 변수를 말한다.

 - 사용자가 직접 초기화를 해주어야 한다. 초기화를 안하면 에러가 발생한다.

 - 지역변수 생성 시점은 해당 메서드가 수행될 때이다.

 - 메서드 수행이 끝나면 지역변수는 메모리에서 사라진다.

 멤버변수

 - Member Variable(멤버변수)는 클래스 안에 선언된 변수를 말한다.

 - 사용자가 초기화를 하지 않아도 시스템에 의해서 자동으로 초기화된다.

   하지만 프로그램의 정확성을 위해 직접 초기화하는 습관이 필요하다.

 - 멤버변수는 static 으로 선언된 변수와 인스턴스 변수가 있다.

 - static 변수는 객체를 생성하지 않고, 클래스 이름으로 참조할 수 있다.

 - 인스턴스 변수는 반드시 객체를 생성한 후 객체 레퍼런스를 통해서 참조해야 한다.



안드로이드앱 프로그래밍 동영상 강좌를 듣다보면 casting 이란 말이 엄청 나온다.

casting(형변환)은 변수 또는 리터럴의 타입을 다른 타입으로 변환하는 것을 말한다.

int score = (int) 88.3; // double 형의 값을 int 형으로 변환하여 88을 저장한다.


배열은 PHP 에서도 정말 많이 활용된다. C#에서도 배열의 필요성을 많이 알게되었다.

소스코드를 접하면서 내가 소홀하게 무심코 넘겼던 것을 알게되었고, 배열의 사용이 정말 중요하고 많더라.


배열(array)을 선언한 다음에는 배열을 생성해야 한다.

- 배열 선언 : 참조변수를 위한 공간 만들기

  int [] grades;

- 배열 생성 : new 키워드를 이용하여 배열을 생성한다. 데이터를 저장할 수 있는 공간이 만들어진다.

  grades = new int[5];

- 배열은 같은 타입의 데이터만 여러개 생성한다.

- 배열의 길이는 length 속성을 이용하면 알 수 있다.

- 배열의 크기를 키보드 입력 값을 받아서 지정할 수 있다.

  int n = 10;

  int [] grades = new int[n];

- 배열에서 최대값, 최소값을 구할 때 int max = 0; 이라는 초기값을 지정하는 것은 오류가 발생할 수 있다.

  최대값이 음수일 수도 있는데, 초기값을 0 으로 선언하면, 0보다 작으므로 원하지 않는 결과가 나온다.


배열의 복사

배열에서 조건에 맞는 데이터만 복사하고 싶은 경우가 있다.

이때 for 문으로 돌리면서 if 조건문으로 해당되는 데이터만 복사하면 된다.


배열의 단점

ㅇ 크기를 변경할 수 없다.

    - 크기를 변경할 수 없으므로 새로운 배열을 생성해서 데이터를 복사하는 작업이 필요하다.

    - 실행속도를 향상시키기 위해서는 충분히 큰 크기의 배열을 생성해야 하므로 메모리가 낭비된다.

ㅇ 비순차적 데이터의 추가 또는 삭제에 시간이 많이 걸린다.

    - 차례대로 데이터를 추가하고 마지막에서부터 데이터를 삭제하는 것은 빠르지만,

    - 배열의 중간에 데이터를 추가하려면, 빈자리를 만들기 위해 다른 데이터들을 복사해서 이동해야 한다.


equals()는 두 배열에 저장된 모든 요소를 비교해서 같으면 true, 다르면 false를 반환한다.

equals()는 일차원 배열에서만 사용 가능하다.

다차원 배열 비교는 deepEquals()를 사용해야 한다.



메서드 : 코드 블럭에 이름을 붙여 놓은 것을 말한다.

- return type : 메서드는 블록 안의 코드를 실행한 다음 결과를 반환할 수 있다.

- return 값이 필요없는 경우는 void 라고 적는다.

- 반환한 값이 있다면 데이터의 유형에 따라 byte, short, int, long, float, double, char, boolean, 배열, 클래스 이름을 적는다.

- 매개변수 : 외부로부터 값을 전달받는데 사용된다.

- 메서드를 작성하는 가장 큰 이유는 반복적으로 사용하는 코드를 줄이기 위함이다.

- 하나의 메서드는 한가지 기능만 수행하도록 작성하는 것이 좋다.


Java에서 매개변수 전달방식은 call-by-value 이다.
Java 에서 문자열 비교는 compareTo
if(names[j].compareTo(names[j+1]) > 0){ }


method overloading : 한 클래스 내에 같은 이름의 메서드(함수)를 여러개 정의하는 것을 말한다.

- 메서드 이름이 같아야 한다.

- 매개변수의 개수 또는 타입이 달라야 한다.

- 매개변수는 같고 리턴타입이 다른 경우는 오버로딩이 성립되지 않는다.


public class Contacts {
    public void ContactsIDInsert(ContentResolver cr, Context context, String strName, String strMobileNO) {
        //코드 작성
    }

    public void ContactsIDInsert(ContentResolver cr, Context context, String strName, String strMobileNO, String strOfficeNO) {
        //코드 작성
    }

    public void ContactsIDInsert(ContentResolver cr, Context context, String strName, String strMobileNO, String strOfficeNO, String strEmail, String strPhoto) {
        //코드 작성
    }

}


오버라이딩(overriding)

조상 클래스로부터 상속받은 메서드의 내용을 변경하는 것을 오버라이딩이라고 한다.

overriding 의 조건

- 이름이 같아야 한다.

- 매개변수가 같아야 한다.

- 리턴타입이 같아야 한다.

- static, final, private 가 지정된 메소드는 오바라이딩 불가


try catch finally 문

try {

   예외 발생 가능성이 있는 문장들;

}
catch (예외타입 메개변수명){

   예외타입의 예외가 발생할 경우 처리 문장;

}
finally {

   항상 수행할 필요가 있는 문장들;

   // 필수 블록은 아니다

}

그냥 무조건 항상 실행되는 것이 아니라 finally 와 연결되어있는 try 블록으로 일단 진입을 하면,
무조건 실행되는 영역이 바로 finally 블록이다.
중간에 return 문을 실행하더라도 finally 블록이 실행된 다음에 메소드를 빠져나간다.


'안드로이드 > Java 문법' 카테고리의 다른 글

[Java] 정보은닉과 캡슐화  (0) 2017.10.16
자바 기본 데이터형과 크기  (0) 2017.10.11
Java 클래스(Class) ★★★★★  (0) 2017.05.04
ArrayList and HashMap  (0) 2017.03.06
Java foreach 문  (0) 2017.03.01
블로그 이미지

Link2Me

,