Java API, 배열

EUNLEE·2022년 7월 13일
0

2022.07.13 수요일

Java 복습

class

  1. 객체 modeling의 수단
  2. instance를 파생(new 생성자)
  3. ADT(abstract data type) → reference data type

instance

  • new keyword로 메모리 공간 생성
  • instance를 사용하기 위해서는 변수
  • . operator를 사용

constructor(생성자)

  • class의 구성요소
  • instnace를 생성하고 초기화하려는 목적으로 사용
  • 모든 class는 적어도 1개 이상의 생성자(over loading에 의해)를 가지고 있다.
  • 이름은 class명과 동일
  • return type을 명시하지 않는다.
  • 명시적으로 작성하지 않으면 default constructor가 자동으로 삽입

JVM이 관리하는 memory 구조

  1. Register: program의 실행 포인터
  2. Runtime constant pool: 상수가 관리되는 공간
  3. Method Area: class 자체에 대한 정보
    • class variable(class안의 static field)
    • method의 실행 bytecode
  4. Heap: instance는 Heap에 저장된다.
  5. Call Stack(Stack): method가 호출되면 해당 method를 위한 공간이 stack에 잡히고 method 안에서 사용하는 local 변수를 위한 공간

class variable & instance variable

class variable

  • static field: 모든 instance가 공유하는 공유 변수

instance variable

  • 일반 field: instance 마다 독립적인 공간을 확보

method overloading

method의 이름이 같아도 parameter의 수나 data type이 다르면 다른 method로 구별

package

  • Java의 모든 class는 특정 package에 포함. (package는 class를 구별하기 위함)
  • package 구문을 사용하지 않으면 default package에 포함
  • class의 이름이 같아도 package가 다르면 다른 class
  • package의 이름은 unique하게 지어야 한다.
  • class의 유지보수 및 관리를 위해 class를 논리적으로 묶어주는 개념
  • package 이름의 folder가 생성되고 그 안에 class를 위치
  • package화 되어있는 class는 사용할 때 full package명을 이용해서 class사용
    • import 구문을 이용해서 package명을 생략할 수 있다.

Access Modifier(접근자)

  1. public: package에 상관없이 사용가능
  2. protected: 같은 package인 경우 사용가능, 다른 package여도 상속관계에 있으면 사용가능
  3. package(default): 같은 package 내에서만 사용가능
  4. private: 같은 class 내에서만 사용가능
  • 1 → 4로 갈수록 접근 범위가 작아진다.
  • class, field, constructor, method 앞에 붙을 수 있다.
    • class 앞에는 public과 package(아무것도 안쓸 경우)만 쓸 수 있다.
    • field, constructor, method 앞에는 4가지 모두 쓸 수 있다.

Static block

static {
  // main이 실행되기 직전에 프로그램에서 필요한 다른 library 같은 것들을 
	// loading할 필요가 있을 때 static block을 사용한다.
}

Inheritance(상속)

기존 class를 확장해서 새로운 class를 정의하는 방법.

  • constructor는 상속이 안된다.
  • private는 상속이 안된다.
  • 🌟 Java는 단일 상속만 지원
  • 🌟 상위 클래스(super class)와 하위 클래스(sub class) 간에는 Is-A reationship이 성립
  • 🌟 다형성(polymorphism): class로부터 파생된 instance의 data type을 상위 type으로 변환
  • 🌟 dynamic binding
  • 🌟 super(): constructor가 연속적으로 호출(instance 생성과정이 복잡)

final keyword

  1. 변수 앞에 붙으면 상수화
  2. 클래스 앞에 붙으면 상속
  3. method 앞에 붙으면 overriding ❌

abstract class

가지고 있는 method 중에 abstract method가 단 1개라도 존재하면 abstract class

abstract method: method의 선언만 되어있고 정의가 안되어있는 method

  • method 앞에도 class 앞에도 abstract keyword를 꼭 붙여야 한다.
  • abstract class는 instance를 만들 수 없다.
  • 반드시 하위 클래스에서 overriding해야 한다. (하위 클래스에 overriding을 강제시킨다.)
  • abstract method는 상속을 이용해서 사용한다.

interface

  • (interface) 안에 있는 field는 public static final(상수) 이다.
  • (interface) 안에 있는 method는 전부 다 abstract method 이다.
  • interface 간에도 상속이 일어날 수 있다. → 상속이 아닌 구현이라는 표현을 쓴다.
  • interface 간에는 다중 구현이 가능하다.
  • implements keyword를 사용한다.
package lecture0713;

class Human {
	
}

interface MyInterface {
	
}

interface Animal {
	int weight = 10;
	public static final int age = 20;
	
	public void printName();
	public abstract void printAge();
}

abstract class Myclass extends Human implements Animal, MyInterface {
// MyClass는 Human을 상속받고 Animal과 MyInterface를 다중 구현한다.

	@Override
	public void printName() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void printAge() {
		// TODO Auto-generated method stub
		
	}
	
}

public class Main {

}

Java가 제공하는 API(class library)

상당히 많은 class가 package화 되어서 제공된다.

💡 Java의 class library 몇 가지들..

  • java.lang.xxx
    • (lang은 language의 약자)
    • 대표적으로 java.lang.Object
    • java.lang이라는 패키지의 Object 클래스가 제공된다.
  • java.net.xxx
    • (net은 networking의 약자)
    • networking 관련 프로그램을 만들 때 사용한다.
  • java.awt.xxx

⇒ (구글링보다도) “API Reference에서 확인”

Overview (Java SE 11 & JDK 11 )

Object class

Java의 최상위 class

  1. equals()
  2. toString()

배열

  • Size가 고정
  • 통일된 data type을 사용
  • collection ⇒ 무조건 객체형태로만 저장이 가능
    • List 계열
      • 🌟 ArrayList class
        • size가 동적
        • 서로 다른 data type이 가능
      • LinkedList class
    • Map 계열
      • 🌟 HashMap class
    • Set 계열
      • 🌟 HashSet class

String

문자열 생성

  • " "
    • (ex. String a = "Hello";)
  • new String(" ")
    • (ex. String b = new String ("Hello");)

public class Main {
	public static void main(String[] args) {
		
		String str1 = "Hello";
		String str2 = "Hello";
		String str3 = new String("Hello");
		
		System.out.println(str1 == str2); //true
		System.out.println(str1 == str3); //false
		// == 은 메모리 주소값을 비교한다.
		System.out.println(str1.equals(str3)); //true
		// 문자열 내용을 비교하려면 equals()를 써야한다.
		// 문자열 내용이 같은지 확인할 때 == 사용하지 말아요!
	}
}
Primitive data typeWrapper class
원시값객체
byteByte class
short
int
long
float
double
char
boolean

Array List

code로 알아보아요~!

import java.util.ArrayList;
import java.util.List;

public class Main {
	public static void main(String[] args) {
		// 배열과 비슷한 놈이다! 단, 동적으로 크기가 늘거나 줄일 수 있다!
		// 저장은 무조건 객체 형태로만 저장된다!
		// 다양한 형태의 객체를 저장할 수 있다!
		List list = new ArrayList<>();
		list.add("Hello");
		list.add("홍길동");
		list.add(100); // 3번째 칸에 숫자(int 100)이 저장된 것 같이 보여요!
		list.add(new Student());
		
		//List를 만들어서 사용할 거에요.
		// 같은 데이터 타입을 이용하는 경우가 사실 대부분.
		List<String> list1 = new ArrayList<String>(); // 꺽쇠 안에 데이터 타입을 명시 
		list1.add("홍길동");
//		list1.add(100); // error 
	}
}

MAP

JavaScript 객체(JSON)와 형태가 같다.

key/value의 쌍으로 저장

keyvalue
“0”“홍길동”
import java.util.*;

public class Main {
	public static void main(String[] args) {
		// Map
		Map<String, String> map = new HashMap<String, String>();
		map.put("1", "홍길동");
		map.put("2", "Hello");
		
		// API Reference를 참조해서 각 collection의 이용방법을 찾아서 써 보아요!
		
	}
}

0개의 댓글