우리가 하는 프로젝트에서는 굳이 싱글턴으로 할필요 없음
사용양이 많을수록 싱글턴이 유리
싱글턴은 나 자체를 변수로 가지고 있음 private으로
객체 취득용& 생성용 메소드 만들어줘야함
// 객체 취득용, 생성용 메소드
public static SingletonTest getInstance() {
// 객체 존재 여부 확인
if (instance == null) { // 객체 없으면...
instance = new SingletonTest();
}
// 겍체 주소 반환
return instance;
}
모의주식
service 부분만
package com.goodee.test.service;
import java.util.Scanner;
public class StockService {
String[] corp = {"샘성", "까까오", "웹플릭스"};
int[] price = {100, 80, 150};
float[] updown = {0, 0, 0};
int[] stock = {0, 0, 0};
int money = 500;
int day = 1;
Scanner sc = new Scanner(System.in);
boolean rFlag = true;
float buyP = 0.01f;
float sellP = 0.04f;
public void run() {
while(rFlag) {
marketShow();
System.out.println("메뉴를 입력하여 주세요.");
System.out.println("1.구매 2.판매 3.다음날 9.종료");
switch(sc.nextLine()) {
case "1" : buyStock();
break;
case "2" : sellStock();
break;
case "3" : nextTime();
break;
case "9" : System.out.println("종료합니다.");
rFlag = false;
break;
default : System.out.println("잘못 입력하셨습니다.");
}
}
}
public void marketShow() {
System.out.println("---------------------");
System.out.println(day + "일 시세. 보유금 :" + money + "원");
System.out.println("---------------------");
System.out.println("종목명\t금액\t등락률");
System.out.println("---------------------");
for(int i = 0 ; i < corp.length ; i++) {
System.out.println(corp[i] + "\t" + price[i] + "\t" + updown[i] + "%");
}
System.out.println("---------------------");
}
public void updown() {
for(int i = 0 ; i < corp.length ; i++) {
float num = ((float) Math.floor(Math.random() * 101) + -50) / 10;
price[i] = (int) (price[i] + Math.round(price[i] * num / 100));
if(price[i] < 0) {
price[i] = 0;
}
updown[i] = num;
}
}
public void nextTime() {
day++;
updown();
}
public void buyStock() {
System.out.println("---------------------------");
System.out.println(day + "일 시세. 보유금 :" + money + "원");
System.out.println("---------------------------");
System.out.println("번호\t종목명\t금액\t보유수량");
System.out.println("---------------------------");
for(int i = 0 ; i < corp.length ; i++) {
System.out.println(i + "\t" + corp[i] + "\t" + price[i] + "\t" + stock[i] + "주");
}
System.out.println("--------------------------");
System.out.println("구매하고자 하는 종목의 번호를 입력하세요.[종료: 9]");
int num = Integer.parseInt(sc.nextLine());
if(num >= corp.length && num != 9) {
System.out.println("잘못입력하셨습니다.");
} else if(num != 9) {
if(money >= price[num] + price[num] * buyP) {
stock[num]++;
money -= price[num] + price[num] * buyP;
} else {
System.out.println("금액이 부족합니다.");
}
}
}
public void sellStock() {
System.out.println("---------------------------");
System.out.println(day + "일 시세. 보유금 :" + money + "원");
System.out.println("---------------------------");
System.out.println("번호\t종목명\t금액\t보유수량");
System.out.println("---------------------------");
for(int i = 0 ; i < corp.length ; i++) {
System.out.println(i + "\t" + corp[i] + "\t" + price[i] + "\t" + stock[i] + "주");
}
System.out.println("--------------------------");
System.out.println("판매하고자 하는 종목의 번호를 입력하세요.[종료: 9]");
int num = Integer.parseInt(sc.nextLine());
if(num >= corp.length && num != 9) {
System.out.println("잘못입력하셨습니다.");
} else if(num != 9) {
if(stock[num] == 0) {
System.out.println("해당주식을 보유하지 않았습니다.");
} else {
stock[num]--;
money += price[num] - price[num] * sellP;
}
}
}
}
((float) Math.floor(Math.random() * 101) -50) /10 을 하면 -5%~ 5% 사이가 됨
0.0 ~ 0.99 *101
00 ~ 100.99 -50
-50 ~ + 50 /10
-5.0 ~ + 5.0
오라클!!!!
DB할때 목표로 강사님이 생각하는거!!!
이 과정 수료할때까지 실습문제로 쿼리 100문제 풀기 (강사님이 내는건 3-40문제, 나머지는 우리가 낸다고)
자바랑 다른건, DB는 시간을 투자한만큼 실력이 늘어난데
회사 갈때마다 DB가 다르니까 많이 짜본 사람이 잘 짠다.
https://www.oracle.com/database/technologies/
c가 붙으면은 클라우드 기능도 같이
https://www.oracle.com/database/technologies/xe-prior-release-downloads.html
우리는 11g로 쓴데
위에 URL
Oracle SQL 설치
with JDK는 자바 포함되어있는거
우리는 Windows 32-bit/64-bit로 깔음
테이블들이 모인게, 스키마
스키마 모인게, 데이터베이스
RDBMS(Relation Database) 데이터들끼리 관계를 가지고 있다 이 관계로 데이터를 뽑을 수 있다, 중복된 데이터가 적음, 데이터 효과적으로 관리
nosql, 빅데이터...
빅데이터를 가장 잘 쓰는 CJ어떻게 잘 쓰는지 예시편의점에서 기저귀 - 맥주
DDL 데이터 정의 언어로 관계형 데이터베이스의 속성, 관계, 인덱스, 파일 위치 등 데이터베이스 고유의 특성을 포함한 구조를 정의DML 데이터베이스 사용자 또는 응용 프로그램 소프트웨어가 컴퓨터 데이터베이스에 대해 데이터 검색, 등록, 삭제, 갱신을 위한 데이터베이스 언어DCL 권한 부여, 권한 삭제, 연결 등 데이터베이스에서 데이터에 대한 엑세스를 제어하기 위한 데이터베이스 언어(조작과 관련)
SQL Developer
보고서 필요없음 닫아버리기
테스트 누른 후 상태가 성공이라고 떠야한데 => 접속
접속되면 위의 아이콘 처럼 뜸
사용자 생성
SCOTT 데이터로 연습할거기 떄문에 이름 SCOTT
DDL - CREATE(생성), ALTER(수정), DROP(제거)
DCL - GRANT(할등), REVOKE(해제), COMMIT(적용), ROLLBACK(취소)
부여된 롤, 시스템 권한 => 모든 권한
=> 적용
HR 계정 비번 주기 1234 체크박스 해지
Local_SYS 접속해지
새로만들기
구글 드라이브 SCOTT 파일 다운받아서 넣기
왼쪽 드롭다운박스에서 SCOTT으로 연결
F5누르면 자동 실행
새로고침 하면 테이블이 생김
Local_SOCTT 로 가서
ctrl + 엔터로 실행
F5는 전체실행
Ansi-DB 이거를 바탕으로 만든게
Oracle 유료 --- Tibero(Oracle 따라서 만든거, 티맥스소프트에서 만듬, 티맥스는 톰캣가지고 따라만든 제우스도 있음)
MS-SQL 유료 --- Sybase(점점 공공기관에서 사라지는 추세)
MySQL 무료데이터베이스 서비스, 문제는 MySQL가 Oracle로 합병 -> 무료, 유료 버전이 생김, 구글, 트위터가 MySQL기반이였는데 Oracle에서 업데이트를 안 해줌 그래서 구글이 데이터베이스를 바꾸려고 하는데 그게 MariaDB
SQLite
PostgreSQL
------------------------Firebase------------------
NoSQL
MongoDB
Oracle NoSQL
SELECT문: 데이터를 조회한다.
SELECT 컬럼 : 보여질 데이터를 선택한다
FROM 데이터(테이블) : 데이터를 가져온다 (복사본 가져오는거임, 원본 영향 x)
WHERE 조건(선택사항) : 데이터를 걸려낸다
ORDER BY 값 정렬기준, ... (선택사항) : 데이터를 정렬한다
실행순서
FROM -> WHERE -> ORDER BY -> SELECT 단, SELECT에 순차함수가 존재할 경우 FROM -> WHERE -> SELECT -> ORDER BY
VIEW : 데이터를 조회한 결과. 원본 데이터의 복사본과 같음.데이터 취득 이후 원본데이터와는 관계 없음
WHERE
BETWEEN A AND B
IN
NOT IN
LIKE
https://www.w3schools.com/sql/sql_like.asp
SQL LIKE Operator
W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.
www.w3schools.com
-- emp 데이터 전체보여짐
SELECT * FROM EMP;
-- emp 데이터 중 EMPNO, ENAME, JOB 컬럼만 보여짐
SELECT EMPNO, ENAME, JOB FROM EMP;
-- AS 컬럼이름이 변경되어 보여짐
SELECT EMPNO AS AAAA, ENAME, JOB FROM EMP;
SELECT EMPNO AS 사번, ENAME, JOB FROM EMP;
-- AS 뒤 뛰어쓰기 할 경우 "" 쓰기
-- "" : 구문
-- '' : 문자열
SELECT EMPNO AS "사번 번호", ENAME, JOB FROM EMP;
-- 조건 WHERE = 같다, ! 다르다
SELECT EMPNO AS "사번 번호", ENAME, JOB, SAL FROM EMP WHERE SAL = 1250;
SELECT EMPNO AS "사번 번호", ENAME, JOB, SAL FROM EMP WHERE SAL != 1250;
SELECT EMPNO AS "사번 번호", ENAME, JOB, SAL FROM EMP WHERE SAL >= 1000 AND SAL <=1500;
-- BETWEEN A AND B : 값이 A이상 B이하인 경우
SELECT EMPNO AS "사번 번호", ENAME, JOB, SAL FROM EMP WHERE SAL BETWEEN 1000 AND 1500;
--사원 중 급여가 800이거나 3000이거나 5000인 사원의 사원명, 급여를 출력하시오
SELECT ENAME, SAL FROM EMP WHERE SAL = 800 OR SAL = 3000 OR SAL = 5000;
--값 IN (값1, 값2, ...) : 값이 값1이거나 값2이거나... 인것
SELECT ENAME, SAL FROM EMP WHERE SAL IN (800,3000,5000);
--값 NOT IN (값1, 값2, ...) : 값이 값1이거나 값2이거나... 이지 않은것
SELECT ENAME, SAL FROM EMP WHERE SAL NOT IN (800,3000,5000);
-- 문자열
SELECT ENAME FROM EMP WHERE ENAME = 'SMITH';
-- 이름에 S가 들어가는 사원을 구하시오
-- 값 LIKE 형식 : 값의 내용이 형식에 부합하면 가져옴
-- 형식에서의 % : 해당 위치에 내용이 있을수도 없을수도 있음
-- 형식에서의 _ : 해당 위치에 한글자가 뭐든 존재해야함
SELECT ENAME FROM EMP WHERE ENAME LIKE '%S%';
-- T앞에는 뭐든 있을 수 있으며, T 뒤에은 반드시 한글자( _ 언더바)
SELECT ENAME FROM EMP WHERE ENAME LIKE '%T_';
-- 사원 중 이름이 A로 시작하며, 중간에 A가 들어가는 사원을 구하시오
SELECT ENAME FROM EMP WHERE ENAME LIKE 'A%A%';
SELECT ENAME FROM EMP WHERE ENAME NOT LIKE 'A%A%';
-- ;를 해줘야 문장이 끝남
'TIL > academy' 카테고리의 다른 글
국비 TIL(Today I Learned) 20220705 오라클 집계함수, HAVING, 순차함수, 서브 쿼리 (0) | 2022.07.05 |
---|---|
국비 TIL(Today I Learned) 20220704 오라클 ORDER BY, DUAL, 사칙연산, CASE, DECODE (0) | 2022.07.04 |
국비 TIL(Today I Learned) 20220628 Bean, try ~ catch, Scanner (0) | 2022.06.29 |
국비 TIL(Today I Learned) 20220603 회원가입 폼 만들기 (0) | 2022.06.03 |
국비 TIL(Today I Learned) 20220602 게시판 만들기 (0) | 2022.06.02 |