자바 4주차 정리

선장원·2021년 10월 30일

자바

목록 보기
24/24

4주차 정리 (16~20일차)

음 실습 내용을 빼면 정리 할 내용이 많지는 않지만 정리를 해야겠지!

Map / 상속 / 인터페이스 / 예외 / 클래스 / 꿀팁
흠 이정도로 나눌 수 있다.

Map

리스트와 조금 다른 형태
리스트는 인덱스가 있고 인덱스에 객체를 넣는 형태

맵은 key,value 두가지로 구성되어 있고
key가 리스트의 인덱스같은 기능을 하는데
리스트의 인덱스는 자동으로 값의 위치에 따라 변경되지만
key는 한번 정하면 계속 유지가 되고
자기가 원하는 클래스로 지정이 가능하다.

선언

Map<Integer, String> map1 = new HashMap<>();
Map<Integer, String> map1 = new HashMap<Integer, String>();
리스트와 마찬가지로 우변의 <>는 생략 가능하다

왜 좌변과 우변이 다른지 모르겠다
좌변은 Map이고 우변은 HashMap일까

데이터 저장

Map1.put(key값, value값);
키값이 순차적일 필요는 없는데 순차적인 것이 관리가 편함

써보니 순차적인게 맞는듯?

map1.put(11, “deta123t”);
System.out.println(map1.get(11));
이렇게 하면 덮어쓰기가 된다

데이터 출력

System.out.println(map1.get(1));
System.out.println(map1.get(1));

get()메서드를 사용해서 괄호안에 키값을 적어 준다

반복문에 활용

keyset() : 키값으로 구성된 값

		// 반복문에 활용
		for (Integer n:map1.keySet()) {
			String s = map1.get(n);
			System.out.println(s);
			System.out.println(map1.get(n));
		}

키값이 일정하지가 않아서 for문으로는 힘드나보다

데이터 삭제

map3.remove(1);

remove()메서드를 사용하고 괄호안에 키값을 적어준다

객체를 map에 담기

맵 선언

Map<Integer, TestDTO> testMap = new HashMap<>();

맵에 객체 담기

testMap.put(1, test1);
testMap.put(2, test2);
testMap.put(3, test3);

키값이 2인 데이터 출력

System.out.println(testMap.get(2));
test2 객체 출력

반복문에 활용

		for (Integer t : testMap.keySet()) {
			System.out.println(testMap.get(t));
		}

key값은 Integer이라서 testDTO가 아니라 Integer으로 해야함

상속(Inheritance)

상속을 하는 이유

  • 기본적이 구조는 비슷하면서 조금씩 다른 클래스가 여러 개 있다면 이를 묶어서 쓰고자 할 때

공통 속성을 뽑아낸다?

예를 들면 게임에서 랩과 스텟을 만들고 클래스를 나누면 랩과 스텟을 부모클래스로 하고
클래스별로 다르게 성장하는 것을 자식 클래스로 나눠서 하는 그런 기능인가?

부모클래스, 자식클래스

  • 부모클래스 : 물려주는 클래스
    1. 사용권한을 준다(생성자, 메서드, 필드)
    1. private로 지정한 요소는 상속하지 않음
  • 자식클래스 : 물려받는 클래스

상속은 주면 없어지는 것이 아니라 사용권한을 주는 것

부모>자식> 자식> 자식 가능

두개의 클래스로 부터 상속 받을 수는 없음

부모가 둘인 것은 안된다는 건가

상속 문법

public class 자식클래스 extends 부모클래스 {
}

모든 매개변수 포함 생성자를 만들 때 부모클래스도 포함시켜서 생성하면
super() 메서드 안에 부모클래스 생성자가 생성된다
단 부모 생성자의 형식과 super()안의 형식이 일치해야 한다

생성자 순서

super()메서드가 먼저 실행이 된다

인터페이스(Interface)

스위치같은 느낌인가??

  • 메서드를 선언할 수 있지만 실행내용은 없음
    1. 리턴타입, 메서드 이름, 매개변수만 정의할 수 있음
    1. 추상 메서드(abstract method)라고 함
  • 인터페이스 클래스가 존재하고 이를 구현(implements)하는 클래스가 존재함

인터페이스 활용

인터페이스는 생성자가 없음
우변에는 인터페이스의 구현클래스 생서자를 활용

만들 때 클래스로 만들지 말고 인터페이스로 만들어야함

다형성(多形性)(polymorphism)

  • 객체지향 프로그래밍의 특징이라고 많이 언급 됨
  • 하나의 변수(객체)에 다양한 클래스를 대입할 수 있다.
    1. 대입하는 클래스는 자식클래스 또는 구현 클래스만 가능

BoardServiceInterface bs = new BoardServiceInt1();
bs = new BoardServiceInt2();

1을 쓰다가 다시 2로 바꿔서 사용가능
메타몽같은 친구구나

일관성

인터페이스에서 만든 메서드는 구현된 클래스에서 반드시 만들어야해서 일관성이 있다

CRUD 메서드

C(Create) : 새로운 데이터 생성
R(Read) : 데이터 조회, 출력
U(Update) : 데이터 수정
D(Delete) : 데이터 삭제

이건 왜 나왔더라?

method Override

메서드 재정의

  • 상속받은 메서드를 자식클래스에서 실행내용을 바꾸는것
  • 메서드 이름, 리턴타입, 매개변수는 변경할 수 없으. 실행내용만 변경가능

@Override의 역할

  • 자바 컴파일러가 실행시 재정의가 제대로 됐는지 체크 해주도록 하는 역할
  • 재정의시 @Override를 붙이지 않고 메서드 이름 부모클래스와 다르게 쓴다든지 매개변수를 다르게 쓴다든기 하면 재정의 메서드로 인지하지않고 자식클래스만 가지고 있는 메서드로 인식하게 됨

https://velog.io/@captain1/자바-11일차에서 사용했었음

예외

실행 도중 발생하는 일종의 오류
예외종류

  • NullPointException
  • IndexOutofBoundsException
  • 등등
    예외 발생시 프로그램이 멈추지 않고 실행을 하도록 처리

예외 처리

try {
실행블록
} catch(예외 클래스 e) {
예외 발생시 실행할 내용
} finally {
필수항목은 아님
try가 끝나거나 catch 부분이 끝나면 무조건 실행
}

예외 클래스 e 예외가 발생할 클래스 이름을 적으면 된다.
throws는 안쓰나?

catch를 여러개 사용해서 여러 개의 예외를 처리 가능

클래스

이건 내가 찾아본 클래스이다

SimpleDateFormat 클래스

선언
SimpleDateFormat sdf = new SimpleDateFormat("패턴방식");

년 : y
월 : M (대문자)
일 : d
시 : h
분 : m
초 : s
오전/오후 : a

두개를 붙여쓰면 1의자리숫자가 01 으로 앞에 0이 붙어서 나온다
년도는 숫자에 따라 다르다
y = 2021
yy = 21
yyyy = 2021

1의 자리 숫자 앞에 0 붙여서 출력하기

String s = String.format(“%02d”, int)
01
05

String s = String.format(“%03d”, int)
015
007

꿀팁

generate hashcode() and equals()

마우스 오른쪽 클릭
source
generate hashcode() and equals()를 눌러서 생성
하면
DTO클래스안의 필드값이 같은지 비교할 수 있다.

내용물이 같으면 같은 hashcode값을 가지도록 만들어 준다

https://velog.io/@captain1/자바-13일차에서 나중에 알아봅시다 라고 한 내용

여기 까지가 자바를 배운 내용이다
자바 책같은 걸 보면 아직 안배운 내용도 있는데 지금은 시간이 촉박해서 안배운 내용도 있고
스프링이나 나중에 하면서 배우는 내용도 있다

다음주부터는 데이터베이스를 나간다.

profile
코딩도전기

0개의 댓글