1.JAVA 기초 강좌
클래스/ 인스턴스/ 메소드 복습
*각 클래스에서 생성된 인스턴스는 생성된 후에는 각자의 개별 속성을 가지고 그 자체로 변화하게 된다
생성자 복습
*연산자 new가 인스턴스를 생성하는 것이지, 생성자가 인스턴스를 생성하는 것이 아니다. 인스턴스가 생성되며 (초기화 메소드인 생성자가) 호출되는 것이다.
**인텔리제이(윈)Alt + Insert/ (맥)Command + N : 생성마법사
class Phone {
String model;
String color;
int price;
Phone(String model, String color, int price) {
this.model = model; // 이 객체에 있는 model이라는 변수에, paremeter로 받은 model을 할당
this.color = color;
this.price = price;
}
}
public class Main {
public static void main(String[] args) {
Phone galaxy = new Phone(); // 인자가 필요한데 인자를 안 넣어 컴파일 에러
Phone iphone =new Phone();
System.out.println("철수는 이번에 " + galaxy.model + galaxy.color + " + 색상을 " + galaxy.price + "만원에 샀다.");
System.out.println("영희는 이번에 " + iphone.model + iphone.color + " + 색상을 " + iphone.price + "만원에 샀다.");
}
}
상속
코드를 클래스 단위로 쪼갤 수 있고, 중복된 클래스를 만들 필요없다. ~객체지향~
상대적으로 적은 양의 코드를 작성할 수 있고, 코드를 재사용할 수 있어 관리가 용이하다.
1. 부모 클래스에서 정의된 필드와 메소드를 물려받는다.
2. 새로운 필드와 메소드를 추가할 수 있습니다.
3. 부모 클래스에서 물려받은 메소드를 수정할 수 있다. ~객체지향~
class Animal {
String name;
public void cry() {
System.out.println(name + " is crying.");
}
}
class Dog extends Animal {
Dog(String name) {
this.name = name;
}
public void swim() {
System.out.println(name + " is swimming!");
}
}
public class Main {
public static void main(String[] args) {
Dog dog = new Dog("코코");
dog.cry();
dog.swim();
Animal dog2 = dog;
dog2.cry();
// dog2.swim(); // compile error
}
}
오버로딩 : 한 클래스 내 동일 메소드를 다수 정의하는 것
조건 : 메소드 이름이 같을 것/ 매개변수의 개수 또는 타입이 다를 것
int add(int x, int y, int z) {
int result = x + y + z;
return result;
}
long add(int a, int b, long c) {
long result = a + b + c;
return result;
}
int add(int a, int b) {
int result = a + b;
return result;
}
// 오버로딩의 조건에 부합하는 예제입니다.
오버라이딩 : 부모 클래스에서 상속받은 내용을 변경하는 것
조건 : 메소드 이름이 같을 것/ 매개변수가 같을 것/ 반환타입이 같을 것
*다형성 vs 오버라이딩 같이 정리해보기
2. 알고리즘 강의
숙제 :
소수 구하기 + 백준 1929번: 소수 구하기
문자열 뒤집기 + 백준 12954번: 비트 문자열 뒤집기
배열 vs 링크드 리스트
조회 | 삽입/삭제 | 데이터추가 | 결론 | |
배열 | O(1) | O(N) | 빈 공간이 없다면 새로 공간을 할당받아야 한다 |
데이터 조회가 빈번하다면 배열을 사용하자 |
링크드 리스트 | O(N) | O(1) | 맨 뒤 노드만 동적으로 추가하면 된다. | 삽입/삭제가 빈번하다면 연결 리스트 사용하자 |
**파이썬 리스트는 배열로 구현했다! -> 연결 리스트/ 배열 두 형태로 모두 사용 가능하다.
클래스
파이썬에서 생성자 함수의 이름은 _init_으로 예약돼 있다.
인스턴스 생성: 인스턴스를 할당할 변수 = 인스턴스() in python
생성자는 별도로 호출하지 않아도 인스턴스 생성 시 같이 호출된다. 이해 완
Self : 클래스 메소드 호출 시 첫 인자로 인스턴스를 주는 것
링크드 리스트 구현
노드는 해당 데이터와 다음 노드를 알려주는 표시로 이루어진다.
class Node:
def __init__(self, data):
self.data = data
self.next = None
# 3을 가진 Node 를 만드려면 아래와 같이 하면 됩니다!
node = Node(3) # 현재는 next 가 없이 하나의 노드만 있습니다. [3]
first_node = Node(5) # 현재는 next 가 없이 하나의 노드만 있습니다. [5]
second_node = Node(12) # [12] 를 들고 있는 노드를 만듭니다.
first_node.next = second_node # 그리고, [5]의 next 를 [12]로 지정합니다. [5] -> [12]
class LinkedList:
def __init__(self, value):
self.head = Node(value) # head 에 시작하는 Node 를 연결합니다.
linked_list = LinkedList(5)
print(linked_list.head.data) # 5가 출력됩니다!
# 현재 LinkedList 는 (5) 만 존재합니다!
#head 출발, cur는 열차 칸 이동, cur.next = None일 때까지(마지막 칸까지)
class LinkedList:
def __init__(self, value):
self.head = Node(value) # head 에 시작하는 Node 를 연결합니다.
def append(self, value): # LinkedList 가장 끝에 있는 노드에 새로운 노드를 연결합니다.
cur = self.head
while cur.next is not None: # cur의 다음이 끝에 갈 때까지 이동합니다.
cur = cur.next
cur.next = Node(value)
#열차 = 링크드리스트 열차 칸 = 노드 클래스
linked_list = LinkedList(5)
linked_list.append(12)
# 이렇게 되면 5 -> 12 형태로 노드를 연결한 겁니다!
linked_list.append(8)
# 이렇게 되면 5 -> 12 -> 8 형태로 노드를 연결한 겁니다!
3.알고리즘 특강
자료구조 선택기준
더블 링크드 리스트
'내일배움캠프 4기 스프링 > 내배캠 TIL📘' 카테고리의 다른 글
11. 14 알고리즘 강의/ JAVA 기초 강의/ 그림으로 배우는 알고리즘/ Leetcode (0) | 2022.11.14 |
---|---|
11. 11 CS 특강/ 알고리즘 강의 (0) | 2022.11.11 |
11. 09 파이썬 기초 강좌/ 알고리즘 강의/ 알고리즘 특강/ JAVA 정석 + 기초 (0) | 2022.11.09 |
11. 08 파이썬 기초 강좌/ JAVA 기초 강좌/ 알고리즘 강좌 + 코테 문풀 (0) | 2022.11.08 |
11. 07 DOM/ Json/ 알고리즘 강좌/JAVA 강좌 (0) | 2022.11.07 |