'5월 1일' 열세 번째 기록 [TIL]

가은·2024년 5월 1일
0

I Learned [본 캠프]

목록 보기
17/135
post-thumbnail

👩‍🏫 오늘의 출석

❓열세 번째, 9 to 9을 해 본 소감❓

자바 강의를 열심히 들었는데 왜 끝이 나지 않는 기분일까 했는데 그래도 오늘은 1차 목표했던 부분까지는 다 들어서 조금의 위로를 해본다. 그런데 속상한 건 앞에 들었던 내용들이 또 내 머릿속에 남아 있지 않고 날아가 버렸다는 점이다, 그럴 줄 알고 2~3회 독으로 계획을 잡았던 거지만, 그래도 한 번 듣고 모든 것을 기억할 수 있었으면 얼마나 좋았을까 하는 부질 없는 생각도 조금 하며 오늘의 공부를 마쳤다.

📑오늘 학습한 내용

9시부터 10시까지는 코드 카타를 진행했다.

🧩오늘의 알고리즘 : 배열의 평균값🧩

class Solution {
    public double solution(int[] numbers) {
        double answer = 0;
        int total = 0;
        
        for (int i = 0; i < numbers.length; i++){
            total += numbers[i];
        }
        answer = (double) total / numbers.length;
        return answer;
    }
}
def solution(number):
    total_sum = sum(number)
    average = total_sum / len(number)
    return average

🧩 오늘의 SQL : 역순 정렬하기 🧩

문제 : 동물 보호소에 들어온 모든 동물의 이름과 보호 시작일을 조회하는 SQL문을 작성해주세요. 이때 결과는 ANIMAL_ID 역순으로 보여주세요. SQL을 실행하면 다음과 같이 출력되어야 합니다.

SELECT NAME, DATETIME
FROM ANIMAL_INS
ORDER BY ANIMAL_ID DESC

이후 10시부터 12시까지는 Level2 과제를 다시 풀어보며 코드를 다시 한 번 복습하고 이해하는 시간을 가졌다.

🗝️여기서 잠깐! "new ArrayList<>() VS Array.asList()"

  • new ArrayList<>()와 Array.asList()는 다른 class, return type이 다르다.
// new ArrayList<>()
import java.util.ArrayList;

// Array.asList()
import java.util.Arrays;
원소의 추가/삭제set 사용
new ArrayList<>()가능가능
Array.asList()불가능가능

1시부터 7시 30분까지는 자바의 정석 강의를 들으며 내가 1차 목표로 했던 부분까지의 강의를 들었다.

💻자바의 정석 내용 정리

인터페이스

  • 추상 메서드의 집합
  • 구현된 것이 전혀 없는 설게도 (모든 멤버가 public)
interface 인터페이스이름 {
	public static final 타입 상수이름 =; // public static final 생략 가능
    public abstract 메서드이름(매개변수목록); // public abstract  생략 가능
}

인터페이스의 상속

  • 인터페이스의 조상은 인터페이스만 가능(Object가 최고 조상이 아님)
  • 다중 상속 가능
interface Fightable extends Movale, Attackable {}
interface Movable {
	/*지정된 위치(x,y)로 이동하는 기능의 메서드*/
    void move(int x, int y);
}
interface Attackable {
	/*지정된 대상(u))을 공격하는 기능의 메서드*/
    void attack(Unit u);
}

인터페이스의 구현

  • 인터페이스에 정의된 추상 메서드를 완성하는 것
class 클래스이름 implements 인터페이스이름 {
	// 인터페이스에 정의된 추상 메서드를 모두 구현해야 함
}
  • 일부만 구현하는 경우, 클래스 앞에 abstract를 붙여야 함
interface Fightable {
	void move(int x, int y);
    void attack(Unit u);
}


abstract class Figter implements Fightable {
	public void move(int x, int y) {/*내용*/}
}

Q. 인터페이스란 추상 메서드의 집합
Q. 인터페이스의 구현이란 인터페이스의 추상 메서드 구현부 만들기 (미완성 설계도 완성하기)
Q. 추상 클래스와 인터페이스의 공통점?
추상 메서드를 가지고 있음(미완성 설계도)

Q. 추상 클래스와 인터페이스의 차이점?
인터페이스는 iv를 가질 수 없음

abstract class Player {
	boolean pause;			// iv, 일시정지 상태를 저장하기 위한 변수
    int currentPos;
    
    Player() {							// 추상 클래스도 생성자가 있어야 함
    	pause = flase;
        currentsPos = 0;
    }
    /*지정된 위치(pos)에서 재생을 시작하는 기능이 수행하도록 작성되어야 함*/
    abstract void play(int pos);		// 추상메서드
    /*재생을 즉시 멈추는 기능을 수행하도록 작성되어야 함*/
    abstract void stop();				// 추상메서드
    
    void play() {
    	play(currentPos);				// 추상메서드 사용 가능
    }
}
/*인터페이스는 iv, 생성자, 인스턴스 메서드 생성 불가*/
interface Fightable {
	void move(int x, int y);
    void attack(Unit u);
}

인터페이스를 이용한 다형성

  • 인터페이스도 구현 클래스의 부모일 수 있음
interface Fightable {
	public void move(int x, int y) {/*내용*/}
    public void attack(Fightable f)
class Fighter extends Unit implements Fightable {
	public void move(int x, int y) {/*내용*/}
    public void attack(Fightable f) {/*내용*/}
}
Unit u = new Fighter();
Fightable f = new Fighter();

f.move(100, 200);
f.attack(new Fighter());
  • 인터페이스 타입 매개변수는 인터페이스 구현한 클래스의 객체만 가능
interface Fightable {
	public void move(int x, int y) {/*내용*/}
    public void attack(Fightable f)
    /*Fightable 인터페이스를 구현한 클래스의 인스턴스만 가능*/
  • 인스턴스를 메서드의 리턴타입으로 지정할 수 있음
/*Fightable 인터페이스를 구현한 클래스의 인스턴스를 반환*/
Fightable method() {
	...
    Fighter f = new Fighter();
    return f;
    /*위의 두 문장을 한 문장으로 바꾸면 => return new Fighter();*/
}
class Fighter extends Unit implements Fightable {
	public void move(int x, int y) {/*내용/*}
    public void attack(Fightable f){/*내용*/}
}

인터페이스의 장점

  • 두 개상(객체)간의 '연결, 대화, 소통'을 돕는 '중간 역할'을 함
  • 선언(설계)와 구현을 분리시킬 수 있음

0개의 댓글