23.02.20
1. 언어의 기초: ram, cpu, 변수, 데이터
2. 자바의 기본: 기본데이터 (값, 기본형변수), 참조형데이터 (주소, 참조형변수)
연산자, 제어문, 배열
3. 자바의 심화: 클래스+객체 = > 생성자, static
상속 = > 형 변환, 추상클래스
접근제어자
접근제어자 | public | protected | default | private |
표시 | + | # | - | |
접근 가능 | 아무곳 | 같은패키지, 상속받은 다른패키지 |
같은 패키지 | 해당 클래스 |
같은클래스 | O | O | O | O |
동일한 패키지 + 하위 클래스 |
O | O | O | X |
동일한 패키지 + 비 하위 클래스 |
O | O | X | X |
다른 패키지 + 하위 클래스 |
O | O | X | X |
다른 패키지 + 비 하위 클래스 |
O | X | X | X |
예외처리
1) 예외처리를 왜 하는가? 안 하면 어떻게 되는가?
실행할 때 특정한 부분에서 에러가 나면 프로그램이 중단되어버린다.
특정 부분의 실행을 포기하고 프로그램을 중단시키지 않기 위해서 예외처리를 한다.
2) 컴파일 에러, 실행 에러 비교!
컴파일(번역)에러: 영어코드(문법 에러) – 번역---> JVM
문법적 에러로 오타 등으로 인해 에러가 나는 것입니다.
실행(run-time)에러: 논리적 문제, 자원 연결 문제 JVM이 실행
런타임 에러라고 하며, 컴파일 성공 후 실행할 때 원하는 대로 실행되지 않는 것입니다.
3) 자바에서 예외 처리하는 방법
try {
에러가 발생할 것 같은 코드
} catch (Exception e) {
에러가 발생했을 때 처리 내용 코드
}
4) 반드시 예외처리 해야 하는 경우는?
외부자원을 연결할 때 (스트림을 사용할 때): network, file, db, cpu
컬렉션(Collection)
수업끝나고 컬렉션을 정리 했다.
package 복습;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Hashtable;
import java.util.LinkedList;
import java.util.PriorityQueue;
import java.util.Properties;
import java.util.Random;
import java.util.TreeMap;
import java.util.TreeSet;
public class 컬렉션정리 {
public static void main(String[] args) {
// List: 순서가 있는 데이터의 집합, 데이터의 중복을 허용함
// ArrayList, LinkedList, Stack, Vector
// ex) 할일우선순위
/* 1. ArrayList
달리기 대회에서 1등이 A군, 2등이 B군, 3등이 C양, 4등이 D양 인데
2등이 반칙을 해서 탈락 되었다 등수와 이름이 잘 찍히도록 프로그램! */
ArrayList runner = new ArrayList();
runner.add("A군");
runner.add("B군");
runner.add("c양");
runner.add("D양");
for (int i = 0; i < runner.size(); i++) {
System.out.println((i + 1) + "등: " + runner.get(i));
}
System.out.println("-------");
runner.remove(1); //2등 탈락
for (int i = 0; i < runner.size(); i++) {
System.out.println((i + 1) + "등: " + runner.get(i));
}
System.out.println("===================");
// Queue: List + FIFO , 제일먼저 들어간 데이터가 제일먼저 삭제
// LinkedList, PriorityQueue
/* 2. LinkedList
시헌일정 순서가 국어, 수학, 영어, 컴퓨터 시럼일정을 담은 컬렉션을 만드세요.
시험을 보면 한과목씩 사라지게 해주세요. */
LinkedList subject = new LinkedList();
subject.add("국어");
subject.add("수학");
subject.add("영어");
subject.add("컴퓨터");
System.out.println("전체 시험볼 과목: " + subject);
for (int i = 0; i < subject.size(); i++) {
subject.remove();
System.out.println((i + 1) + "일차 시험 후 남은과목: " + subject);
}
System.out.println("===================");
// Set: 순서를 유지하지 않는 데이터의 집합, 데이터의 중복을 허용하지 않음
// HashSet, TreeSet
/* 3. HashSet
로또번호 6개 생성해서 리스트에 넣어보기(중복되지 않게) */
Random r = new Random();
HashSet lotto = new HashSet();
for (int i = 0; lotto.size() < 6; i++) {
lotto.add(r.nextInt(45)+1); //1~45
}
System.out.println(lotto);
System.out.println("===================");
// Map: 키(key)와 값(value)이 쌍으로 이루어진 데이터의 집합
// HashMap, TreeMap, Hashtable, Properties
/* 4. HashMap 고객관리 시스템에서
100번 고객은 A양, 200번 고객은 B군,
300번 고객은 C양, 400번 고객은 D군 일때
200번 고객은 탈퇴, 300번고객은 E양으로 개명
==> 고객의 전체리스트를 프린트 */
HashMap client = new HashMap();
client.put("100", "A양");
client.put("200", "B군");
client.put("300", "C양");
client.put("400", "D군");
System.out.println("수정전 고객 리스트 " + client);
client.remove("200", "B군");
//client.replace("300", "E양");
client.put("300", "E양");
System.out.println("현재 고객 리스트 " + client);
}
}
23.02.21
형변환(Casting, 캐스팅)
1. 자동형변환, 업캐스팅 (작 --> 큰)
작은 곳에 있던 데이터가 큰 곳으로 복사되는 경우, 자동으로 형변환되어 저장
2. 강제형변환, 다운캐스팅 (큰 --> 작)
큰 곳에 있던 데이터가 작은 곳으로 복사되는 경우, 강제로 형변환하여 저장
크기 기준 | 큰 | 작 | |
기본형 | 변수의 크기 | 큰 크기의 변수 | 작은 크기의 변수 |
참조형 | 상속관계 일때 개념의 크기 |
부모클래스 | 자식클래스 |
boxing, unboxing
기본형
1. boxing,오토박싱 (기본형 --> 클래스(포장클래스))
EX) Int -> Integer
2. unboxing,오토언박싱 (클래스(포장클래스) --> 기본형)
EX) Double -> double
형변환 예시
package 복습;
import java.util.ArrayList;
import javax.swing.JButton;
public class 아무거나 {
public static void main(String[] args) {
// 인덱스, 순서, 직접접근! ==> ArrayList
ArrayList list = new ArrayList();
list.add("홍길동"); // object <- String (자동형변환)
list.add(100); // object <- Integer(랩퍼클래스, 포장클래스) <- 오토박싱 - int(기본형)
list.add(11.22); // object <- Double(랩퍼클래스, 포장클래스) <- 오토박싱- double(기본형)
list.add(new JButton()); // object <- JButton
//Integer <---- 오토박싱 --- int (기본형만 박싱,언박싱함)
// ---- 오토언박싱 ---- 역순으로 가는것 (기본형만 박싱,언박싱함)
String name = (String)list.get(0);// 직접접근! 랜덤액세스 가능! 강제형변환
//String <- Object, 강제형변환
int age = (Integer)list.get(1);
//int <- Integer <- Object , 오토언박싱, 강제형변환
}
}
형변환 확인문제
1. 형변환(캐스팅)이란?
값(Data)의 타입을 다른타입으로 변환 하는 것을 뜻함.
2. 업 캐스팅이란? 다른 말은?
작은 곳에 있던 데이터가 큰 곳으로 복사 (자동형변환)
3. 다운 캐스팅이란? 다른 말은?
큰 곳에 있던 데이터가 작은 곳으로 복사 (강제형변환)
4. Car ← Truck에서 부모 클래스/자식 클래스를 구분하시오.
Car: 부모클래스, Truck: 자식클래스 (자동형변환됨)
5. byte b = 100; int i = b; 내부에서 일어난 처리 내용을 쓰시오.
b를 byte -> int 로 업캐스팅(자동형변환) 했다.
6. int i2 = 10; byte b2 = (byte) i2; 내부에서 일어난 처리 내용을 쓰시오.
i2를 Int -> byte 다운캐스팅(강제형변환) 했다.
7. 오토박싱이란?
기본형 -> 클래스로 바꾸는 것 이다. Ex) int -> Integer
8. 오토언박싱이란?
클래스 -> 기본형 으로 바꾸는 것 이다. EX) Double -> double
9. 다음 각 줄에 주석을 달아주세요.
ArrayList list = new ArrayList(); //list라는 ArrayList생성
list.add(100); //list 에 object인 100을 넣어줌
int age = (Integer)list.get(0);
//list.get(0)은 object에서 Integer로 가서 다운캐스팅(강제형변환)
//int age에 넣었으니 Integer 에서 int로 가서 오토언박싱 됨
-----------------------------------------------------------------------------------------------------------
1. 기본형 형변환 중, 아래코드를 수정해보세요.
Int x = 100;
Byte y = x; --> Byte y = (byte)x; x 강제형변환(다운캐스팅)
2.참조형 형변환이 되는 조건은?
상속관계의 객체들만 가능
3.상속에서 위에 물려주는 클래스를 무엇이라고 부르는가?
super클래스,부모클래스
4.상속에서 아래 물려주는 클래스를 무엇이라고 부르는가?
sub클래스, 자식클래스
5.상속을 사용할 때 키워드는 다음중 무엇? 1)extend 2)extends 3)implements
2번 extends
6.기본형 데이터 4가지
정수, 실수, 문자1, 논리
7.참조형 데이터 2가지 이상
배열, 클래스
8.참조형 형변환 중, 아래 코드를 수정해보세요.
Car c = new Car();
Truck t = new Truck(); //Truck은 Car를 상속받아 만들었음
t = c; //수정해보세요. --> t = (Truck)c;
9.기본형, 참조형 변수에 각각 들어있는 것은?
기본형(값), 참조형(주소)
10.참조형 변수를 초기화 하려고 한다. 무엇으로 초기화 해야할까?
null로 초기화
11.null이란?
주소가 없다 라는 개념
12.포장클래스(랩퍼클래스)란? 종류 2가지
기본형을 클래스로 만들어놓은 것, Integer, Double, Boolean, Character
13.업캐스팅이란?
부모클래스로 자식클래스의 타입을 형변환(Object(큰) ß String(작), 자동형변환)
14.다운캐스팅이란?
자식클래스로 부모클래스의 타입을 변환 (String(작) ß Object(큰), 강제형변환)
오버로딩 / 오버라이딩
1. 오버로딩,다형성(overloding)
하나의 이름으로 다양한 형태를 구현할 수 있는 자바의 특징
- 메소드 이름을 하나로 동일하게 쓸수있다.==> 메소드 입력값은 달라야함.(순서, 타입, 개수)
- 상속에 있어서 특정한 자리에 부모클래스가 정의되러 있다면, 그자리에 하위클래스인 자식클래스가 다 들어갈 수 있다.
2. 오버라이딩,재정의(overriding)
- 부모클래스로 부터 상속받은 메서드 중에서 수정해서 사용하고자 하는 경우
부모 클래스에 있는 메서드와 완벽하게 똑같이 다시 자식클래스에서 정의하면 자식클래스의 메서드가 호출된다.
==> 메서드명, 매개변수, 리턴 타입이 모두 같아야함.

크롤링
mvn repository(자바 라이브러리 저장소) 에서 jsop을 다운해왔다. (poi 와 mysql도 함께 가져옴)
지금은 수동으로 다운해주었지만 maven이라는 프로그램을 쓰면 다운이 쉬워진대
네이버 증권사이트에서 주식정보를 크롤링 해왔다.
package 주식정보시스템;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
public class 네이버주식정보시스템 {
public static void main(String[] args) {
JFrame f = new JFrame();
f.setSize(300, 450);
f.getContentPane().setBackground(Color.LIGHT_GRAY);
f.setLayout(new FlowLayout());
Font font = new Font("나눔스퀘어", Font.BOLD, 40);
JButton b1 = new JButton("카카오");
b1.setFont(font);
b1.setBackground(Color.pink);
//액션기능
//1) 액션기능 추가
//2) 클릭했을 때 누가 담당할지 부품을 만들어주세요.
//3) 클랙했을 때 어떻게 처리할 지를 코딩
b1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//처리내용
//에스엠 코드 041510를 주면서
//크롤링하는 부품에게 크롤링 기능 요청!
네이버증권크롤링3 c = new 네이버증권크롤링3();
c.naver("041510");
System.out.println("---------------------------");
}
});
JButton b2 = new JButton("에스엠");
b2.setFont(font);
b2.setBackground(Color.orange);
b2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//처리내용
//카카오 코드 035720를 주면서
//크롤링하는 부품에게 크롤링 기능 요청!
네이버증권크롤링3 c = new 네이버증권크롤링3();
c.naver("035720");
System.out.println("---------------------------");
}
});
JButton b3 = new JButton("네이버");
b3.setFont(font);
b3.setBackground(Color.yellow);
b3.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//처리내용
//네이버 코드 035420를 주면서
//크롤링하는 부품에게 크롤링 기능 요청!
네이버증권크롤링3 c = new 네이버증권크롤링3();
c.naver("035420");
System.out.println("---------------------------");
}
});
JLabel label = new JLabel("CODE");
label.setFont(font);
JTextField text = new JTextField(7);
text.setFont(font);
JButton b4 = new JButton("크롤링시작");
b4.setFont(font);
b4.setBackground(Color.darkGray);
b4.setForeground(Color.white);
b4.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String code1 = text.getText();
네이버증권크롤링3 c = new 네이버증권크롤링3();
c.naver(code1);
System.out.println("---------------------------");
}
});
f.add(b1);
f.add(b2);
f.add(b3);
f.add(label);
f.add(text);
f.add(b4);
f.setVisible(true);
}
}
23.02.22
인터페이스
인터페이스 = 구체적인 구현은 하지 않고, 규칙만 정의함 (추상메서드, 불완전한 메서드, abstract(불완전))
UI = 유저 인터페이스, 사용자 인터페이스
인터페이스를 사용하는 이유?
메서드의 틀을 미리 만들어 개발자 간의 의사소통 혼선을 줄여주고 다형성 개발에 유리하기 때문에 사용한다.
추상클래스는 단일상속 이지만, 인터페이스는 여러 개가(다중) 가능하다.
- 인터페이스는 클래스생성으로 하는것이 아니라 interface를 누르고 생성해야한다.
- 기능중심으로 규칙을 정의해야한다.
함수(메서드)만 정의 가능 (변수는X)
public, abstract 생략 가능!
인터페이스는 어떻게 처리할지는 아직 적어주지 않는 추상메서드로만 정의해야함
인터페이스는 무조건 public : 다른패키지에서도 사용 가능함.
상속과 인터페이스는 같이 쓸 수 있다.
인터페이스에 적어둔 메서드는 모두 다 사용해주어야함 (추가는 가능하지만 인터페이스에 있는 것을 사용하지 않을 수는 없다.)
Computer interface
package 인터페이스;
public interface Computer {
public abstract void 인터넷하다();
public void 유튜브하다();
void 코딩하다();
//public, abstract 생략가능
}
AppleComputer
package 인터페이스;
public class AppleComputer implements Computer{
@Override
public void 인터넷하다() {
System.out.println("크롬으로 인터넷을 사용하다.");
}
@Override
public void 유튜브하다() {
System.out.println("여행 채널을 유튜브로 보다.");
}
@Override
public void 코딩하다() {
System.out.println("이클립스IDE로 자바코딩을 하다.");
}
}
BananaComputer
package 인터페이스;
public class BananaComputer implements Computer {
@Override
public void 인터넷하다() {
System.out.println("엣지로 인터넷을 사용하다.");
}
@Override
public void 유튜브하다() {
System.out.println("코딩 채널을 유튜브로 보다.");
}
@Override
public void 코딩하다() {
System.out.println("파이참 IDE로 파이썬을 코딩하다.");
}
}
컴퓨터사용
package 인터페이스;
public class 컴퓨터사용 {
public static void main(String[] args) {
AppleComputer apple = new AppleComputer();
//Computer apple = new AppleComputer(); 로 사용해도됨 작은것은 큰것에 넣어쓸수 있기 때문(형변환)
BananaComputer banana = new BananaComputer();
apple.코딩하다();
apple.유튜브하다();
apple.인터넷하다();
banana.코딩하다();
banana.유튜브하다();
banana.인터넷하다();
}
}
익명클래스
computer인터페이스를 구체적으로 구현한 이름없는 클래스를 가지고 객체 생성함 ==>익명클래스
인터페이스는 불완전 하기 때문에 이것을 틀로해서 객체생성이 불가능 하다. (new 불가능)
앱 만들 때 선호하는 방법, 웹에서는 많이 사용하지는 않다고 하셨다.
Ex) ActionLisener
ActionLisener 자체는 인터페이스 이지만 얘를 구체적으로 구현함으로써 클래스가 됨..
ActionListener 자체는 인터페이스고 ActionListener(){~}는 클래스로 보는 것
ActionLisener의 익명클래스 부분

위 이미지의 드래그 되어있는부분이 익명클래스 부분이다.
네트워크 (TCP / UDP)
URL
U: Uniform
R: Resource
L: Locator
http://DNS
httpè 요청하는 방법
대부분은 tcp인데, udp는 언제 사용할까?
게임의 모든 유저의 데이터를 tcp로 하게 되면 비효율적이기 때문에 게임이나, 동영상 같은 거는 udp를 이용해야 한다.
23.02.23
DB
oracle을 깔고, dbeaver도 깔았다. 하지만 어떤문제에서인지 oracle이 제대로 작동하지 않아 보조강사님께서 열심히 도와주셨다.. 모든걸 다해봐도 안되서 강사님께서 오라클 대신에 mysql을 깔아주셨다..
보조강사님께서 윈도우 업데이트가 안되서 그런거일수도 있다고 하셔서 계속 미뤄왔던 윈도우를 업데이트 했다. 근데 어이없게도 오라클이 된다... 윈도우 업데이트랑도 관련있는거였냐구...
나는.. 저게 왜 안깔리지 하는 생각에 수업에 집중도 잘 못한것 같다 ㅠㅠㅠ 이러면 안되는데 ㅠㅠㅜ
DB에 사용하는 언어는 SQL이라고 함
DDL : 테이블명 + 항목명 + 항목타입
DB는 저장할 대상을 선정하고 ==> 대상에 어떤 속성(컬럼, 항목)들이 정의해야 한다.
oracle과 mysql에서 DDL 할 때 타입을 조금 다르게 설정해야 한다고 하셨다..
oracle | mysql | |
문자열 | varchar2 | varchar |
숫자(정수) | int | number |
하나 만들고, 지우고, 수정 할때마다 저장을 꼭해주는것이 중요하다!!
SQL
-- : 주석처리
ctrl + enter : 실행
한줄을 입력하면 꼭 엔터로 한줄이상 띄워줘야한다.
[개념정리]
1. 정형데이터란?
답: 저장할 데이터(항목)가 정해진 데이터
2. DBMS란?
답: DB를 관리해주는 프로그램
3. 당신이 알고 있는 DBMS의 종류 2가지 이상
답: Oracle, mySQL, mariadb, sqlite
4. SQL은 무엇의 약자?
답: Structured Query Language (구조적(체계적)으로 정리된 명령문의 모음)
5. SQL의 종류 3가지 분류
- DDL: 저장할 데이터의 항목정의 (create, alter, drop, truncate)
- DML: 실제로 데이터를 조작 (insert, select, update, delete)
- DCL: 계정관리, 백업복구 (grant, revoke backup, restore)
6. CRUD는 무엇의 약자?
Create Read Update Delete 의 약자!
CRUD(크루드): 조작4가지
조작 | Create (만들다) | Read (읽다) | Update (수정하다) | Delete (삭제하다) |
sql | insert | select | update | delete |
7. 당신이 알고 있는 DB클라이언트 프로그램은?
답: DBeaver, TOAD, Oracle SQL Developer
8. DML중 데이터를 넣을 때 사용하는 구문은?
답: Insert ex) insert into member values ('melon', '3333', 'melon', '013')
9. DML중 데이터를 검색할 때 사용하는 구문은?
답: SELECT ex) SELECT * FROM `member`
23.02.24
테이블 3대 필수 요소 (SQL필수요소): 테이블명 + 항목명 + 항목타입
날짜 같은거는 타입을 varchar(100) 로 하면 안되고 NUMBER로 해줘야 날짜 검색이 가능하다.
Not Null 부분에 체크하면 빈칸으로 두지 못하게 만드는것이고,
디폴트 부분은 빈칸으로 두었을때 어떻게 할건지를 적어두는 것이다.
데이터 입출력은 행단위이다.
DB는 영속성이 있다.
Char(10)과 Varchar(10)의 차이
Char(10): 들어가는 값이 무조건 10자리이다. (전화번호, 주민번호 같은 고정적인 것 일 때 사용)
Varchar(10): 저장공간이 10 이고 들어가는 값은 유동적이다.
실제 업무에서 컬럼을 추가하는 것은 매우 힘든 일 이기 때문에 컬럼 고치는 일을 최소화 해한다고 하셨다.
- D C L : DB 관리/제어 해주는 문법(계정생성, 계정권한여, 백업, 복구)
CREATE USER apple IDENTIFIED BY a1234 -- id: apple, pw: a1234
GRANT CONNECT, resource, dba TO apple -- GRANT로 권한주기 apple 에게
REVOKE resource, dba FROM apple -- apple 한테서 권한 뺏기
DROP USER apple CASCADE -- apple 계정 삭제
-- 백업, 복구는 다음에 나올 때 하신대!
명령어 보다는 스키마 설계에 집중해야한다.
어떤데이터를 DB에 저장할것인가 선별해내는 것이 중요하다.
- 스키마(틀): 저장한 틀을 만드는 것(항목들 테이블, 테이블 간의 관계)
- 엔터티: 그 안에 저장할 대상
- 특성: 엔터티 마다 나오는 항목들
- 인스턴스: 들어가는 실제 값
SQL 이용
|
설명 | 예시 |
CREATE
|
테이블을 만들 때 사용 | CREATE TABLE PRODUCT ( id varchar2(200), pw varchar2(200)
|
INSERT | 테이블에 값 넣어주기 |
INSERT INTO PRODUCT VALUES ('park', '100')
|
DROP | 테이블을 없앰 |
DROP TABLE PRODUCT
|
SELECT
|
검색, 확인 |
PRODUCT의 모든 컬럼 확인
SELECT * FROM PRODUCT |
|
오름차순 정렬 |
COMPANY로오름차순으로 정렬한 NAME 컬럼
SELECT name FROM PRODUCT ORDER BY company |
|
내림차순 정렬 |
PRICE로 내림차순 정렬한 전체컬럼
SELECT * FROM PRODUCT ORDER BY PRICE DESC |
WHERE | 범위 정해주기 | PRODUCT의 모든 컬럼중 ID가 100 인것 SELECT id FROM PRODUCT WHERE id = '100' |
AND
|
조건 모두 만족 |
ID가 100이고 PRICE가 1000인 제품명과 이미지
SELECT name, img FROM PRODUCT WHERE ID = '100' AND PRICE = '1000' |
OR
|
조건중 하나라도 만족 |
ID가 100, 102 제품의 NAME
SELECT name FROM PRODUCT' WHERE id = 100 OR id = '102' |
UPDATE SET
|
수정 |
ID가 100, 102 제품의 PRICE를 1000으로 수정
UPDATE PRODUCT SET PRICE = '1000' WHERE id = 100 OR id = '102' |
DELETE
|
칼럼(테이블 정보) 삭제 | COMPANY가 c100일 경우 그 칼럼(테이블 정보) 삭제 DELETE FROM PRODUCT WHERE COMPANY = 'c100'
|
CONSTRAINTS
|
PRIMARY KEY (PK) : 가장중요, 우선순위 등등 |
ID는 중복되면 안되고, 비워두면 안되기 때문에 제약을 걸어줌(Constraints) CREATE TABLE PRODUCT ( id varchar2(200) PRIMARY KEY, pw varchar2(200)
|
테이블에 최소 하나 이상의 컬럼은 있어야한다.(모두다 삭제할수 없음, 칼럼이 없으면 테이블 생성 불가)
Drop table은 복구가 불가능 하기 때문에 주의 해야함 (백업해놓으면 되돌릴수 있긴하대)
RDB(관계형DB): 여러 테이블간의 관계 표현
엔티티 관계도: Entity Relationship Diagram (ERD)

db를 이용해서 java를 줄이는게 좋음: java코드가 많으면 서버가 할 일이 많아져서 컴퓨터 성능을 올리는 수 밖에 없다.
JAVA | 대상 == Object == 객체 |
DB | 개체 == Entity(엔터티, 엔티티) |

SQL문은 비교연산자랑 대입연산자가 =로 똑같다.
공공데이터 포털 에서 CSV 파일을 다운받아 테이블에 넣는 실습도 해보았다.
-- id, name, content, price, company, img
CREATE TABLE PRODUCT1 (
id varchar2(200),
name varchar2(200),
content varchar2(200),
price varchar2(200),
company varchar2(200),
img varchar2(200)
)
-- csv파일 다운! ex) 공공데이터 포털
-- csv: 한꺼번에 다줌,
-- XML(오픈API): 내가 요청한것만 줌
-- csv 파일 가지고 오기!
-- TABLE 이름 폴더에서 우클릭 -> 데이터 가져오기 클릭 -> CSV에서 가져오기 클릭
-- -> 파일 선택 -> 다음 -> 다음 -> 다음 -> 다음 -> 진행!
-- 문제 풀기
SELECT * FROM PRODUCT1 -- 전체
-- 1. price로 내림차순 정렬하여 전체컬럼 검색
SELECT * FROM PRODUCT1 ORDER BY PRICE DESC
-- 2. company로 오름차순 정렬하여 제품의 이름, 내용, 가격 검색
SELECT name, CONTENT, price FROM PRODUCT1 ORDER BY company
-- 3. id가 100인 제품의 이름과 가격 검색
SELECT name, price FROM PRODUCT1 WHERE id = '100'
-- 4. price가 5000인 제품명과 회사명
SELECT name, company FROM PRODUCT1 WHERE PRICE = '5000'
-- 5. id가 100이고 가격이 1000인 제품명과 이미지 검색
SELECT name, img FROM PRODUCT1 WHERE ID = '100' AND PRICE = '1000'
-- 6. 회사명이 c100인 회사명과 제품명
SELECT company, name FROM PRODUCT1 WHERE COMPANY = 'c100'
-- 7. 회사명이 c100, c200인 제품명과 가격
SELECT name, price FROM PRODUCT1 WHERE COMPANY = 'c100'
-- 8. price가 5000원인 제품의 content를 품절로 수정
UPDATE PRODUCT1 SET CONTENT = '품절' WHERE PRICE = '5000'
-- 9. id가 100, 102번 제품의 img를 o.png로, price를 10000으로 수정
UPDATE PRODUCT1 SET img = 'o.png', PRICE = '1000' WHERE id = 100 OR id = '102'
-- 10. id가 101번 제품의 company를 apple, name은 appleshoes로 수정
UPDATE PRODUCT1 SET COMPANY = 'apple', name = 'appleshoes' WHERE id = '101'
-- 11. name이 shoes1이거나 id가 107인 제품 삭제
DELETE FROM PRODUCT1 WHERE NAME = 'shoes1' OR ID = '107'
-- 12. 회사명이 c100인 경우 그 칼럼 삭제
DELETE FROM PRODUCT1 WHERE COMPANY = 'c100'
-- 13. 테이블의 모든 정보 삭제
DELETE FROM PRODUCT1 -- 너 진짜 조건도 없이 이 데이터들 다 지울거야? 라는 확인 창이 뜸
-- 14. 테이블 삭제
DROP TABLE PRODUCT1 -- 너 진짜 이 테이블 지울거야? 라는 확인 창이 뜸
Foreign key(FK) ==외래키
pk, fk 설정하는 것도 실습 해보았다.
패키지 만들때 업무용 규칙 ==> 인터넷 주소(도메인 네임) 거꾸로!!
ex) com.multicampus.www.Document
- 기업에서는 크롤링 할 줄 아는 사람을 선호한대.
- 회사마다 인터페이스를 중요하게 생각하는 곳도 있고 인터페이스를 중요하지 않다고 생각하는 경우도 있음. (큰 회사는 인터페이스를 선호하는 경우가 많음.)
- 챗봇 구현 경험 기업에서 조금 중요시 여긴다고 하셨다.
- 클라우드 경험은 꼭 있어야 한다고도 하셨다.
면접
- 기본적인 sql문 질문
DDL, DML이 무엇인지 아나요? 설명하세요.
- 난이도 있는 질문
ERD를 보여주고 이거 설명하라고 할수도 있음.(관계성 어떻게 된것 같아요?, 엔터티 몇 개 인것 같아요?)
용어 알아듣는지, 알고 있는 (ERD를 읽을수 있는지, ERD만들어봤어요? 스키마 설계해봤어요?)
복습할만한것!
- tcp서버, tcp클라이언트 만들기 혼자 해보기,
- 예전에 만들었던 swing 음식주문 시스템, 투표 시스템, 카운터 등등을 다시해보기 (기능 바꿔보기 ex) 라벨을 버튼으로 바꾸기)
- 클론코딩은 조금 어려워서 잘 못할 수도 있다고 하셨다.
아마존(aws) 유튜브, 웹사이트에서 강연&강의 들으면 수료증을 받을수 있대 (Pm)
티스토리에 게시글 예약이라는 기능이 있더라!!
계속 수정해서 하루하루마다 적어놓고 예약발행을 일요일로 해놓는 방법을 사용해야겠다.
'멀티캠퍼스 JAVA 백엔드 부트캠프 > 정리' 카테고리의 다른 글
멀티캠퍼스 백엔드 개발자 취업캠프(Java) 입과 6주차 정리 (0) | 2023.03.13 |
---|---|
멀티캠퍼스 백엔드 개발자 취업캠프(Java) 입과 5주차 정리 (0) | 2023.03.05 |
멀티캠퍼스 백엔드 개발자 취업캠프(Java) 입과 3주차 정리 (0) | 2023.02.21 |
멀티캠퍼스 백엔드 개발자 취업캠프(Java) 입과 2주차 정리 (1) | 2023.02.14 |
멀티캠퍼스 백엔드 개발자 취업캠프(Java) 입과 1주차 정리 (0) | 2023.02.08 |