[Android] 안드로이드 앱 개발을 위한 필요한 자바 문법

Android/Android · 2020. 6. 24. 17:19
반응형

 

 이번 포스트에서는 안드로이드 앱 개발에 필요한 기초적인 자바 문법에 대해서 소개하겠습니다. 다음에 대한 내용을 간단하게 소개합니다.

 

  1. 자료형
  2. Casting
  3. final, static
  4. if(), switch()
  5. for(), while(), do-while()
  6. Array
  7. Method
  8. Overload, Overriding
  9. Class
  10. Object
  11. Polymorphism
  12. 접근 지정자
  13. Constructor
  14. Inheritance
  15. super()
  16. Abstract Class
  17. Interface
  18. Exception
  19. Thread
  20. Lambda
  21. Generic
  22. Collection Framework

 

 

 1. 자료형

 

 자료형은 변수에 어떤 형태의 변수를 넣을 것인지 정하는 것입니다. 다음 표를 보시면 이해될 것입니다.

 

자료형 키워드 크기 기본값 표현 범위
정수형 byte 1byte 0 -128 ~ 127
short 2byte 0 -32,768 ~ 32,767
int 4byte 0 -2,147,483,648  ~ 2,147,483,647
long 8byte 0 -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
문자형 char 1byte \u0000 0 ~ 65.535
실수형 float 4byte 0.0 -3.4E38 ~ 3.4E38
double 8byte 0.0 -1.7E308 ~ 1.7E308
논리형 boolean 1bit false true of false

 

 

 2. Casting

 

 캐스팅은 한국말로 타입 변환이란 뜻입니다. 예를 들어, byte 타입을 int 타입으로 변환한다거나 그 반대로 변환하는 행위를 말합니다. 캐스팅에는 자료형에도 자주 쓰이지만, 객체의 개념에서 매우 많이 사용되는 기법입니다. 캐스팅에는 두 가지 방법이 있는데, 하나는 자동(묵시적) 타입 변환이고, 하나는 강제(명시적) 타입 변환입니다. 

 

 - 자동(묵시적) 타입 변환(Promotion)

 

 자동 타입 변환은 프로그램 실행 도중 자동으로 타입 변환이 일어나는 것을 말합니다. 이것은 작은 크기를 가지는 타입이 큰 크기를 가지는 타입에 저장될 때 발상합니다.

 

큰 크기 타입 = 작은 크기 타입

(ex. int a = char b)

 

 큰 크기와 작은 타입을 구별하는 방법은 메모리의 크기입니다. 1번에서 자료형의 크기에 따라 나뉘게 됩니다. 또한, 지정된 범위(표현 범위) 내에 포함된 자료형이여만 자동 타입 변환을 사용할 수 있습니다.

 

 

 - 강제 타입 변환(Demotion)

 

 큰 크기의 타입은 작은 타입의 타입으로 자동 타입 변환이 불가능합니다. 그러나 메모리의 크기를 작게 쪼개어서 저장한다면 캐스팅이 가능합니다. 예를 들어, byte 타입에 int 타입을 캐스팅하고 싶을 때 int의 4byte를 1byte씩 쪼개서 1byte씩 byte 타입에 저장한다는 뜻입니다. 이를 강제 타입 변환(Casting)이라고 합니다. 다음은 캐스팅을 사용하는 방법입니다.

 

작은 크기 타입 = (작은 크기 타입) 큰 크기 타입

(ex. byte a = (byte) int b)

 

 

 - 객체의 형 변환

 

 서로 상속 관계에 있고, 왼쪽이 부모, 오른쪽이 자식의 형태를 띱니다.

 

Parent parent = new Child();

 

 이는 하위 클래스에서 상위 클래스 유형으로 할당하는 것은 가능하나, 그 반대의 경우에는 강제 형 변환을 해야 합니다. 앞서 얘기한 것처럼 다음과 같이 사용하면 됩니다.

 

자식 객체 = (자식 클래스) 부모 객체

(ex. Child child = (Child) new Parent();)


 이 외에도 인터페이스도 캐스팅이라는 것이 존재합니다.

 

 

 

 3. final, static

 

 -final

 

 final이 사용되면 보통 상수화를 하기 위해 많이 사용된다고 알고 있습니다. 그럼 자바에선 어떨까요? 비슷한 개념입니다. final 필드에서 사용하게 되면 상수화를 하는 것이고, 메서드는 오버 라이딩 불가, 클래스는 상속받을 수 없음을 의미합니다.

 

 -static

 자바에서 static을 쓴다는 것은 메모리에 한 번 할당되어 프로그램이 시작 시 단 한 번만 실행이 되며, 프로그램이 종료될 때 해제되는 것을 말합니다. 그래서 주로 값이 변하지 않는 값에 static을 쓰게 되며, final과 같이 자주 쓰이는 문법입니다. 또한 동일한 클래스의 모든 객체들에 의해 공유됩니다.(공통 멤버)

 

 

 

 4. if, switch

 

 주로 코드에 어떤 조건을 걸고 싶을 때 사용하는 문법입니다. 사용 방법은 다음과 같습니다.

 

//if문
if( ··· ) {
	···
} else if( ··· ) {
	···
} else {
	···
}

//switch문
switch( 변수 ) {
	case ···:
    case ···:
    	System.out.println("···");
        break;
    case ···:
    default
    	System.out.println("···");
}

 switch문에서 default는 생략 가능하고, case에 해당하는 조건이 없을 시 실행되는 구문입니다.

 

 

 

 5. for(), while(), do-while()

 

 주로 어떤 행위를 반복할 때 사용하는 문법입니다.

 

//for()
for(int i=0; i<100; i++) {
	····
}

//while()
while(5) {
	···
}

//do-while
do {
	···
}while(조건)

 

 여기서 do-while() 문은 특이한 게 반복문 내부에 있는 내용을 최초로 먼저 실행을 한 다음 조건문을 검사합니다. 즉, cnt++;이라는 구문이 반복문 내에 있으면 cnt값이 증가하고 조건문을 실행한다는 뜻입니다.

 

 

 

6. Array

 

 배열입니다. 수많은 데이터를 저장하기 위해선 배열 사용이 편리합니다. 1차원부터 시작해가지고 다차원까지 차수를 늘릴 수 있지만, 많으면 복잡해지기 때문에 보통 3차원까지 사용합니다. 다음은 선언 방법입니다.

 

int[] array = new int[5];

 

 

 7. Method

 

 메소드입니다. 메소드는 어떤 한 가지의 특정 기능을 수행하기 위한 문법입니다. 메소드를 사용하면 코드의 가독성이 좋아지며, 코드 해석을 더욱 쉽게 할 수 있습니다. 다음은 메소드 사용 법입니다.

 

	// 반환형 없음, 파라미터 없음
	public void A() {
		
	}
	//반환형 없음, 파라미터 a
	public void A(int a) {
		
	}
	//반환형 int, 파라미터 없음
	public int B() {
		int a=0;
		
		return a;
	}
	//반환형 int, 파라미터 b
	public int B(int b) {
		
		return b;
	}

 

 보통 하나의 메소드 당 하나의 기능을 수행하는 것을 권장합니다. 이는 CleanCode를 하는 기법 중 하나인데, 더 깊게 들어가면 머리 아프니 메소드는 오로지 하나의 기능만! 수행한다는 것만 알고 있으면 됩니다.

 

 

 

 8. Overload, Overriding

 

 -Overload

 오버로드는 메소드의 이름과 반환형의 자료형이 같지만, 매개변수의 개수 또는 매개변수의 자료형이 달라야 합니다.

 

	public void A(int a) {
		
	}
	
	public void A(int a, int b) {
		
	}
	
	public void A(long a) {
		
	}

 

 

 -Overriding

 오버 라이딩은 메소드 재정의라는 뜻입니다. 보통 부모, 자식관계에서 많이 사용되며, 가져온 메소드는 기존 메소드와 동일한 구조를 갖고 있어야 합니다.

 

class Parent {
	public int A(int a) {
		return a;
	}
}

class Child extends Parent{
	@Override
	public int A(int a) {
		return a;
	}
}

 

 오버라이딩 시 Annotation으로 @Override를 붙여주면 이 메소드는 오버 라이딩되었다는 것을 더욱 쉽게 알아볼 수 있습니다.

 

 이러한 오버 로딩과 오버 라이딩을 하는 이유는 다형성 때문입니다. 다형성은 나중에 나오니 거기서 설명하겠습니다.

 

 

 

 9. Class

 클래스는 객체 지향 프로그래밍(OOP)에서 자주 사용되는 문법입니다. 예를 들어, 어떤 제품을 만드는데 부품을 먼저 개발하고 이 부품들을 하나씩 조립해서 완성된 제품을 만들 듯이, 소프트웨어를 개발할 때에도 부품에 해당하는 객체들을 먼저 만들고, 이것들을 하나씩 조립해서 완성된 프로그램을 만드는 것이 객체지향 프로그래밍입니다. 객체지향 프로그래밍을 알기 위해선 우선 객체에 대해서 알아야 합니다. 우선 객체를 설계한 틀 혹은 설계도라고 이해하면 좋습니다.

 

 

 

 10. Object

 객체입니다. 객체는 실제로 존재하거나 추상적으로 생각할 수 있는 것 중에서 자신의 속성을 가지고 있고 다른 것과 식별 가능한 것을 뜻합니다. 클래스와 함께 자동차로 예를 들어 설명해보겠습니다.

 자동차에는 다양한 부품이 있지만, 그중 바퀴가 있습니다. 이 바퀴에는 A업체의 바퀴와 B, C가 있습니다. 여기서 이 업체들의 바퀴를 객체라고 할 수 있고, 바퀴를 장착하는 행위를 클래스에서 합니다(정확히는 클래스 내부에 있는 메소드가 수행). 여기서 바퀴를 나열하는 것은 Interface를 사용할 수도 있고, Abstract Class를 사용할 수도 있습니다. 이는 다음 항목에서 설명하겠습니다.

 

 

 

 11. Polymorphism

 다형성입니다. 다형성이란 하나의 메소드나 클래스가 있을 때 이것들이 다양한 방법으로 동작하는 것을 의미합니다. 앞서 얘기한 오버로딩과 연관되어 있는 항목입니다.

 

 

 

 12. 접근 제한자

 보통 클래스나 객체 사용 시 많이 사용되는 항목입니다. 접근을 제한해 외부에서 데이터 접근을 하지 못하도록 막거나 모든 접근을 허용할 수 있도록 만드는 것이 접근 제 한 자입니다. 이는 자바의 특징 중 하나인 캡슐화와도 연관되어 있는 내용입니다. 다음은 접근 제한자에 대한 표입니다.

 

범위 public protected default private
클래스 내부 O O O O
동일 패키지 O O O X
다른 패키지 O X X X
하위 패키지 O O X X

 

 이 외에도 메소드, 생성자 등에 대한 내용도 있지만, 일단 이것만 알아두셔도 충분합니다.

 

 

 

 13. Constructor

 생성자입니다. 생성자는 객체 생성 시 new 연산자를 통해서 인스턴스를 생성할 때 반드시 호출되고, 제일 먼저 실행되는 메소드(일반적인 메소드와는 다릅니다.)입니다. 생성자는 객체를 사용하기 위한 필드 값 등을 초기화하는 역할을 합니다.

 생성자는 클래스 이름과 같아야 하며, 굳이 적지 않아도 되지만, 실행될 때 기본 생성자가 자동으로 만들어집니다(눈에는 보이지 않습니다.).

 

class A {
	int a;
	//생성자
	public A(int a) {
		this.a = a;
	}
}

 

 

 

 14. Inheritance

 상속입니다. 상속이란 부모가 자식에게 물려주는 행위를 뜻하는데, 자바에서도 같은 의미입니다. 부모 클래스가 자식 클래스에게 상속하여, 부모 클래스가 갖고 있는 필드와 메소드를 사용할 수 있습니다. 상속을 하게 되면 중복된 코드를 줄일 수 있고, 유지보수가 편하며 통일성이 있고, 다형성에 적합한 코드가 됩니다.

 

class Parent {
	public int A(int a) {
		return a;
	}
}

class Child extends Parent{
	@Override
	public int A(int a) {
		return a;
	}
}

 

 위에 오버라이딩에 있는 예제와 같은 예제입니다. 상속을 받기 위해선 자식 클래스에 extends를 넣은 다음 부모 클래스명을 작성해주시면 됩니다. 자세한 상속 관계에 대해선 얘기가 꽤 길어지니 넘어가도록 하겠습니다.

 

 

 

 15. super()

 자식 클래스에서 부모 클래스를 호출할 일이 생기면 super()를 사용하면 됩니다. 사용법은 super.부모메소드(); 입니다. 아래는 간단한 예제입니다.

 

class A {
	public void ABC(String k) {
		System.out.println(k);
	}
}

class B extends A{
	String a = "hello";
	public void abc() {
		super.ABC(a);
	}
}

 

 B클래스에서 abc메소드를 호출한다면 super()를 통해 A클래스의 ABC()메소드가 실행됩니다.

 

 

 

 16. Abstract Class

 추상 클래스입니다. 추상클래스는 다양한 클래스 안에 공통적인 필드와 메소드를 정의해놓은 클래스입니다. 예를 들어, 클래스 A, B, C가 있고, 메소드 d()가 있습니다. 메소드 d()는 세 클래스 다 갖고 있는 공통적인 메소드입니다. 우리는 이 d()메소드를 굳이 클래스 따로따로 사용할 필요 없이 그냥 추상 클래스 하나 정의해 놓고, 상속받아서 오버라이딩하면 코드를 알아보기 쉽고, 기능에 대한 메소드 명을 명시해놓은 추상클래스를 통해 이 프로그램은 어떤 기능이 있는지 쉽게 알아볼 수 있습니다. 다음은 추상클래스 예제입니다.

 

abstract class A {
	public int a;
	//생성자
	public A(int a) {
		this.a = a;
	}
	//추상 메소드 선언
	public abstract void ABC();
}

class B extends A{
	//생성자, A클래스의 생성자의 파라미터가 존재하므로 super(a);
	public B(int a) {
		super(a);
	}
	//추상메소드 오버라이딩
	@Override
	public void ABC() {
		
	}
}

 

 

 

 17. Interface

 인터페이스입니다. 자바에서 인터페이스란 객체의 사용 방법을 정의한 타입입니다. 기본적으로 인터페이스는 추상 메소드의 모음입니다. 메소드의 구현부는 없으므로 인터페이스를 만든다면 반드시 구현 클래스를 만들어야 합니다. 근데 추상클래스가 있는데 굳이 인터페이스를 사용하는 이유는 무엇인지 의문을 가질 수 있습니다. 

 추상 클래스와 인터페이스의 가장 큰 차이는 추상 클래스는 클래스 내 추상 메소드가 '하나 이상' 포함된 것을 말하며, 인터페이스는 모든 메소드가 추상 메소드인 경우입니다. 또한, 구현하는 방법도 명확히 다르구요.

 그럼 인터페이스는 어떨 때 사용하기 좋을까요? 일단 추상 클래스는 기능을 상속받고 그 기능을 확장시키는 데 사용합니다. 그리고 자바는 다중 상속을 할 수 없습니다. 그래서 다양한 기능을 추상 클래스만으로 사용하기엔 무리가 있다 보니 인터페이스란 것이 등장했습니다. 인터페이스는 다중으로 받을 수 있으며, 함수의 구현을 강제하기 때문에 구현 객체의 동작을 보장할 수 있습니다.

 

 다음은 인터페이스 예제입니다.

 

//interface A 생성
interface A {
	//메소드 a(), b() 생성
	public void a();
	public void b();
}
//interface B 생성
interface B {
	//메소드 c(), d() 생성
	public void c();
	public void d();
}

class C {
	public void e() {
		
	}
}

//ABCD클래스는 C를 상속받고, A, B 인터페이스를 받는다.
class ABCD extends C implements A, B {
	//생성자
	public ABCD() {
		
	}
	//인터페이스 메소드 재정의(인터페이스는 구현을 강제하기 때문에 메소드 재정의를 하지 않으면 오류가 난다.)
	@Override
	public void c() {
		
	}

	@Override
	public void d() {
		
	}

	@Override
	public void a() {
		
	}

	@Override
	public void b() {
		
	}
	//C클래스의 e()메소드 상속
	@Override
	public void e() {
		
	}
}

 

 

 

 18. Exception

 예외처리입니다. 프로그램을 만들다 보면 많은 오류들이 발생합니다. 에러가 나는 이유는 하드웨어의 오작동 또는 고장으로 인해 JVM 실행에 문제가 생겼을 경우 발생합니다. 그러나 예외는 다릅니다. 예외는 사용자의 잘못된 조작이나 개발자의 코딩 실수로 인해 프로그램이 발생하는 오류를 뜻합니다. 예외가 일어나면 프로그램이 종료되는 것은 에러와 같은 개념이지만, 예외는 프로그램이 종료되지 않고 정상적으로 작동될 수 있게 만들 수 있는 것이 가장 큰 차이입니다.

 예외처리는 보통 try-catch문으로 사용됩니다. 다음은 예제입니다.

 

class A {
	public void ABC() {
		//예외처리
		try {
			abc();
		} catch(Exception e) {
			System.out.println("클래스가 존재하지 않습니다.");
		}
	}
	//메소드 호출한 곳에서 예외 떠넘기기
	public void abc() throws ClassNotFoundException{
		Class clazz = Class.forName("java.lang.String2");
	}
}

 

 여기서 throws는 예외처리를 메소드 호출한 곳으로 떠넘기는 구문입니다. 

 

 

 

 19. Thread

 쓰레드입니다. 쓰레드는 특정 프로그램 내에서 프로그램(프로세스)이 실행되는 흐름의 단위라고 할 수 있습니다. 이를 활용하여 멀티 쓰레드란 것이 있습니다. 멀티 스레드란 하나의 프로세스가 두가지 이상의 작업을 할 수 있도록 하는 것입니다. 보통 안드로이드에서는 UI쓰레드와 작업 쓰레드가 있습니다. UI는 말 그대로 UI를 그리는 작업을 하고, 작업 쓰레드는 보통 오래 걸리는 작업을 개발자가 임의로 만들어서 작업하는 것이 있습니다. 

 

class A {
	public static void main(String[] args) {
		B b = new B();
		
		//Runnable의 생성자
		Runnable r = new C();
		Thread c = new Thread(r);
		//하나의 쓰레드 당 start() 한번만 호출
		b.start();
		c.start();
	}
}
//쓰레드 상속
class B extends Thread {
	@Override
	public void run() {
		for(int i=0; i<5; i++) {
			System.out.println(getName());
		}
	}
}
//Runnable 인터페이스 구현
class C implements Runnable {
	@Override
	public void run() {
		System.out.println(Thread.currentThread().getName());
	}
}

 쓰레드를 생성하는 방법은 크게 총 두가지가 있습니다. 쓰레드를 상속받거나 Runnable 인터페이스를 구현하는 방법입니다. 상속은 클래스마다 한 번밖에 받지 못하므로 Runnable 인터페이스 구현을 많이 선호합니다. start()를 한 번밖에 호출하지 못하는 이유는, 두 번 호출하게 되면 IllegalThreadStateException이 발생하게 됩니다. 다시 호출하기 위해선 생성자를 통해 다시 생성해야 합니다.

 

 

 

 20. Lambda

 람다입니다. 람다식이란 간단하게 말해 메소드를 하나의 식으로 표현한 것입니다. 이는 Java 8부터 지원하게 되었으며, 람다식으로 인해 자바의 기존 코드 작성 패턴이 많이 변경되었습니다. 자바에서는 익명 클래스(Anonymous Class)란 것이 있습니다. 익명 클래스란 말 그대로 익명인 클래스를 뜻합니다. 다음 예제는 익명 클래스의 예제입니다.

 

interface A {
	public void a();
}

class B {
	public void anonymous() {
		A a = new A() {
			@Override
			public void a() {
				System.out.println("익명 클래스");
			}
		};
		a.a();
	}
}

 

 이처럼 익명 클래스는 인터페이스를 객체 없이 구현하거나, 메소드 혹은 생성자에 들어가는 객체도 익명 클래스로 구현 가능합니다. 익명 클래스를 사용하는 이유는 일회성인 클래스를 굳이 따로 만들어서 관리(메모리에 상주)하는 것보단 이처럼 익명 클래스를 통해 일회성으로 만드는 것이 오히려 더 효율적이기 때문입니다.

 이제 이것들을 람다식으로 표현하면 이런 예제가 나옵니다. 

 

class B {
	public void anonymous() {
		A a = new A(() -> System.out.println("람다식으로 표현"));
	}
}

 

 이것이 람다식이며, 앞으로 안드로이드를 개발하면서 익명 클래스와 함께 자주 볼 구문입니다.

 

 

 

 21. Generic

 제네릭입니다. 제네릭 타입을 사용함으로써 잘못된 타입이 사용될 수 있는 문제를 컴파일 과정에서 제거할 수 있습니다. 제네릭은 람다식, 스트림 등 다양한 곳에서 사용되기 때문에 잘 알아두면 편합니다. 

 제네릭의 가장 큰 이점은 컴파일 시 강한 타입 체크를 하는 것과 Casting을 할 필요가 없다는 것입니다. 다음은 제네릭에 대한 간단한 예제입니다.

 

class A<T, M> {
	
	private T t;
	private M m;
	
	public T getT() {
		return t;
	}
	
	public M getM() {
		return m;
	}
	
	public void setTM(T t, M m) {
		this.t = t;
		this.m = m;
	}
}

class B {
	public static void main(String[] args) {
		A<String, Integer> a = new A<String, Integer>();
		a.setTM("Generic", 1);
		String str = a.getT();
		int k = a.getM();
	}
}

 

 제네릭의 가장 기본적인 사용방법입니다. 제네릭에 사용되는 <T, M> 이런 문자들은 사용하는 규칙이 있습니다. 한 번 찾아보시면 자세히 나오니 찾아보시기 바랍니다.

 

 

 

 22. Collection Framework

컬렉션 프레임워크입니다. 자바는 배열의 문제점들을 해결하고, 유명한 알고리즘을 바탕으로 객체들을 효율적으로 추가, 삭제, 검색할 수 있도록 java.util. 패키지에 컬렉션과 관련된 인터페이스와 클래스들을 포함시켜 놨습니다. 이들을 총칭해서 Collection Framework라고 합니다. 컬렉션 프레임워크에는 크게 3가지가 있습니다. List, Set, Map.

 

인터페이스 분류 특징 구현 클래스
Collection List - 순서를 유지하고 저장
- 중복 저장 가능
ArrayList, Vector, LinkedList
Set - 순서를 유지하지 않고 저장
- 중복 저장 안 됨
HashSet, TreeSet
Map - 키와 값의 쌍으로 저장
- 키는 중복 저장 안 됨(고유 key)
HashMap, HashTable, TreeMap, Properties

 

  다음은 ArrayList에 대한 간단한 예제입니다.

 

import java.util.*;

class A {
	public static void main(String[] args) {
		ArrayList<String> a = new ArrayList<String>();
		a.add("hi, ");
		a.add("hello ");
		
		for(String hi: a) {
			System.out.println(hi);
		}
		
		a.remove(1);
	}
}

 

 

 다음은 HashSet에 대한 간단한 예제입니다.

 

public class ExampleCode {
	public static void main(String[] args) {
		
		Set<String> set = new HashSet<String>();
		
		set.add("1aaa");
		set.add("2bbb");
		set.add("1aaa");
		set.add("3ddd");
		set.add("4eee");
		set.add("5fff");
		//반복자 Iterator(컬렉션 프레임워크에 저장되어 잇는 요소들을 읽어오는 방법)
		Iterator<String> iterator = set.iterator();
		//객체 수만큼 반복(다음 인자가 없을 때까지)
		while(iterator.hasNext()) {
			//한 개의 객체 가져옴
			String str = iterator.next();
			System.out.println(str);
		}
		set.remove(2);
	}
}

 

 결과를 보면 무작위로 데이터가 나오는 것을 볼 수 있습니다. 이건 Set이 가진 특징 중 하나입니다.

 

 

 

 Map 컬렉션입니다. Map은 하나의 키(Key) 값과 값(value)로 구성되어있습니다. 키는 중복이 안되지만, 값은 중복이 가능합니다. 만약 키값이 같다면, 최신 값으로 대체됩니다. 다음은 간단한 예제입니다.

 

public class ExampleCode {
	public static void main(String[] args) {
		
		Map<String, Integer> map = new HashMap<String, Integer>();
		
		map.put("John", 90);
		map.put("Suzan", 95);
		map.put("kei", 80);
		map.put("hong", 100);
		map.put("z", 0);
		
		System.out.println(map.size());
		//key값으로 찾기
		System.out.println(map.get("suzan"));
		
		Set<String> keySet = map.keySet();
		Iterator<String> keyIterator = keySet.iterator();
		while(keyIterator.hasNext()) {
			String key = keyIterator.next();
			Integer value = map.get(key);
			System.out.println(key+ " " +map);
		}
		System.out.println();
		
		map.remove("z");
		
		map.clear();
		
		
	}
}

 

 

 

 여기까지 안드로이드 앱 개발에 필요한 기초적인 자바 개념을 살펴보았습니다. 한꺼번에 하기엔 내용이 너무 방대해 압축하다 보니 내용이 상당히 짧아지고, 무슨 말인지 모르는 부분도 있을 것입니다. 단지 앱 개발에 필요한 항목만 넣기엔 너무 심심해서 설명을 조금 추가해봤습니다. 이 중에서 이해가 안 되거나 더욱 알고 싶은 부분이 있으면 구글에 검색하면 잘 설명하고 있으니 찾아보시는 것을 추천드립니다. 감사합니다.

반응형