Giter Club home page Giter Club logo

daily's People

Watchers

이현석 avatar

daily's Issues

bitcamp 자바 기초특강 day02 22.12.22

1교시
package day02;
/*SCANNER!
스캐너는 자바에서 입력을 처리해주는 대표적인 클래스이다.
하지만, 스캐너 클래스는 우리가 모든 클래스를 실행시킬때 필수는 아니기때문에
기본적으로 수입을 우리가 해야한다(import?)
자바에서 기본형 데이터타입 8가지를 클래스로 포장한 "포장"클래스(wrapper class)나
모든 자바클래스의 조상클래스인 java.lang.Object 외의 클래스를 사용할 때에는
같은 패키지 안에 있지 않으면 반드시 수입을 해야 한다.
외부 클래스를 수입하는 방법은
import패키지이름.클래스이름; 을
public class ~~~~ 위에 적어주면 된다.
ex:
*/
import java.util.Scanner;
public class Ex01Scanner {

public static void main(String[] args) {
	Scanner scanner; //S대문자 클래스 s소문자 변수
	scanner = new Scanner(System.in);

// 키보드 정수입력 받기
// 이때에는 Scanner클래스 변수의 nextInt()
System.out.println("정수를 입력해주세요.");
// 뭘입력할지 미리 적어놔줘야함
int number = scanner.nextInt();
System.out.println("사용자가 입력한 정수: "+number);

// 2. 실수 입력 받기
// nextDouble()을 사용하면 된다.
System.out.println("실수를 입력해주세요.");
double userDouble = scanner.nextDouble();

	System.out.println("사용자가 입력한 실수: "+ userDouble);

// 3. String 입력받기
// nextLine()으로 입력받으면 된다.
// 단.nextLine()을 사용할 떄에는 한가지 주의할 점이 있는데
// 만약 nextLine()을 사용하기 전에 nextInt(), nextDouble()등과 같이
// 숫자를 입력을 받았으면, 반드시 nextLine()을 한번 적어서
// 버퍼메모리를 비워주어야 한다. enter = \n으로 하나의 문자야
System.out.println("이름을 입력해주세요.");
scanner.nextLine();
String name = scanner.nextLine();

	System.out.println("사용자가 입력한 이름: [" + name+ "]" );
	
	//		Scanner 클래스 변수를 초기화해보자! > 어디서 데이터를 읽어올지 지정해주어야 초기화가 가능하다

// scanner 클래스변수와 같이 어디에선가 데이터를 읽어오는 클래스 변수들은 출처에서
// 넘어오는 데이터를 곧장 읽어오는 것이 아니라 출처에서 넘어온 데이터를 버퍼 메모리 공간에
// 일단 저장하고 그 저장된 데이터를 클래스 변수가 읽어오는 형태이다.
// 따라서 더이상 읽어올 필요가 없을 때에는 버퍼 메모리와의 연결을 닫아주는 것이 좋다.

	scanner.close();

package day02;

import java.util.Scanner;
public class Ex02Gradebook2 {

public static void main(String[] args) {
	Scanner scanner; //S대문자 클래스 s소문자 변수
	scanner = new Scanner(System.in);
	System.out.println("학생번호를 입력해주세요.");
	int number = scanner.nextInt();
	System.out.println("학생번호: "+number);
	System.out.println("학생의 이름을 입력해주세요.");
	scanner.nextLine();
	String name = scanner.nextLine();
	System.out.println("학생 이름: [" + name+ "]" );
	
	System.out.println("국어점수를 입력해주세요.");
	int korean = scanner.nextInt();
	System.out.println("국어점수: "+korean);
	
	System.out.println("영어점수를 입력해주세요.");
	int english = scanner.nextInt();
	System.out.println("영어점수: "+english);
	
	System.out.println("수학점수를 입력해주세요.");
	int math = scanner.nextInt();
	System.out.println("수학점수: "+math);
	System.out.println("학생번호: " + number);
	System.out.println("학생이름: " + name);
	System.out.println("국어점수: " + korean);
	System.out.println("영어점수: " + english);
	System.out.println("수학점수: " + math);
	int sum = korean + english + math;
	double average = (double)sum/3;
	System.out.println("총점: " + (korean+english+math));
	System.out.println("평균점수: " + average);
	scanner.close();
	}

	int sum = (korean+english+math);
	System.out.println("총점: "+(sum)+"입니다");
	double average = sum/3;
	System.out.println("평균점수: "+ (sum/3) + "입니다");
	scanner.close();
	}

}
03
package day02;
/*자바콘솔창에 출력을 하는 3가지 방법

  • 자바콘솔창에 출력을 할 때에는
    1. print()
    1. println()
    1. printf()
  • 각각이 어떤 차이점을 갖고있는지 직접체험해봅시다.

*/
public class Ex03Print {

public static void main(String[] args) {

// 1.print()
// print()는 괄호 안의 내용을 출력한다.
// 만약 다음 출력할 내용이 있으면 출력된내용 오른쪽칸부터 출력이 시작된다. 이어서 나온다는 뜻이다
System.out.print("abc");
System.out.print("DEF"); //결과값은 abcDEF의 한줄이다
// 2.println()
// println은 "print a line"의 줄임말로써 한줄을 출력하라는뜻이다.
// 괄호안의 내용을 출력하고 다음출력위치를 다음줄! 의 첫칸!으로 이동시킨다.
//

	System.out.println("Abc");
	System.out.println("dEF");

// abcDEFAbc 현재까지의 결과값
// dEF
// 3.printf()
// printf는 "print in format"의 줄임말로써 괄호안의 내용을
// 지정된 형식에 맞추어 출력하고 다음출력위치는 출력된 내용 오른쪽칸이 된다.
//
System.out.printf("%d", 3);
System.out.printf("%s", "DEF");
// 4. 이스케이프 문자
// 이스케이프문자란 \와 조합되서 특수한문장기호나 문자를 나타내는 값이다.
// 비록 적을때는 \와 조합되서 두글자로 낭지만 실제론 한개의 문자로 취급이 된다.
// 4-A \n 은 개행문자도 하며 강제로 줄을 바꾸는 문자이다. "\n *** \n" 처럼 따옴표 안에 넣어야한다
System.out.print("\nabc\n");
System.out.print("DEF\n");
// 4-B \t
// \t는 탭 공백으로써, 스페이스 1개보다 큰 공백을 뜻한다
System.out.println("abc\tDEF");
// 4-C. '
// '은 char값의 시작과 끝을 알리는 뜻의 따옴표가 아닌 문장부호로써의 따옴표문자 그자체를 뜻한다.
// 잘안쓴다.. "'" = '''이므로 ""는 많이쓴다. String값의 시작과 끝을 알리는 뜻의 쌍따옴표x
// 문장부호로써의 쌍따옴표문자 그자체를 뜻한다.
System.out.println(''');
System.out.println(""오늘 할일을 내일로 미루지마"");
// 4-D. \자체
System.out.println("\>ㅁ</");
}

}

04
//printf
// printf()는 내가 원하는 값을 특정 형식에 맞추어 출력할 때 사용되는 메소드이다.

public class Ex04Printf {

public static void main(String[] args) {
	System.out.println("1. 10진법 정수('d'ecimal)");
	
	int number = 473;
	//1-A. 10진법 정수를 그대로 출력해라 
	System.out.printf("1-A. [%d]\n", number);
	//1-B. 10진법 정수를 오른쪽 정렬 5자리로 맞추어 출력해라
	System.out.printf("1-B [%5d]\n", number);
	//1-C. 10진법 정수를 오른쪽정렬 2자리로 맞추어 출력해라
	//만약 출력할 내용이 지정된 자릿수보다 많으면 자릿수 지정은 무시가된다.
	System.out.printf("1-C [%1d]\n", number);

// //1-D. 10진법 정수를 왼쪽정렬 5자리로맞추어 출력 오른쪽 %5d, 왼쪽 %-5d
System.out.printf("1-D [%-5d]\n", number);
//1-E. 10진법 정수를 오른쪽정렬 5자리로 ㅏㅈ추되 왼쪽에 빈공간이 있을시 0으로 채워출력
System.out.printf("1-D [%05d]\n", number);
System.out.println("2. tlftn('f'loat)");
double d = 12.345;
// 2-A 실수를 그대로 출력해라
System.out.printf("2-A [%f]\n", d);
// 2-B 실수를 오른쪽 정렬 10자리로 맞추어 출력해라
System.out.printf("2-B [%10f]\n", d); //[%010f]으로하면 앞뒤에 0을채움
// 2-C 실수를 오른쪽 정렬 10자리로 맞추고 소숫점은 두번째자리까지 출력해라
System.out.printf("2-C [%10.2f]\n", d); //[%010f]으로하면 앞뒤에 0을채움
System.out.println("\n---------------\n");
System.out.println("3. 스트링('s'tring)");
String str = "abcdEFGH";
// 3-A String 을 그대로 출력해라
System.out.printf("3-A. [%s]\n", str);
System.out.printf("3-B. [%S]\n", str);
// 3-B String을 모두 대문자로 출력해라
System.out.printf("3-C. [%10S]\n", str);
// 3-C String을 모두 대문자로 오른쪽 정렬 10자리로 맞추어 출력해라
// 주의사항 1. 존재하지않는 %문자를 사용하면 에러가 뜸. ex. ("%v\n", 12);
// 2. %문자와 출력할 값의 데이터타입이 다르면 에러가 발생된다.
// 3. 우리가 필요에 따라서는 다양한 여러개의 %문자를 조합해서 쓸 수 있다. 이하 예시
System.out.printf("%d %f %s\n", 1, 1.1, "1.2");
// 4. 만약 %문자의 갯수보다 출력할 값의 갯수가 더 많으면? > 그냥 가능한 %문자만 조합해줌 밑의경우 4, 5탈락
System.out.printf("%d %f %s\n", 1, 1.1, "1.2", 4, 5);
// 5. 만약 %문자의 갯수보다 출력할 값의 갯수가 더 적으면?에러남
// System.out.printf("%d %d %d %f %s\n", 1, 2);
// 6. 만약 %문자를 뜻하는 %가 아닌 백분율의 %가 필요하다면?
System.out.printf("성공률: %d%%\n", 99);

	System.out.println("\n---------------\n");
}

}

//사용자로부터 번호 이름 국어 영어 수학점수순으로 입력을 받아서 ㅏ음과 같으 녛ㅇ시그오 출력되는 프로그램을 작성

//번호:0#번 이름:###
//국어:0##점 영어:0##점 수학:0##점
//총점:0##점 평균:0##.##점

05 내답

import java.util.Scanner;
public class Ex05Gradebook03 {

public static void main(String[] args) {
	Scanner scanner = new Scanner(System.in);//S대문자 클래스 s소문자 변수
			
	System.out.println("학생의 번호를 입력해주세요.");
	int number = scanner.nextInt();
	System.out.println("이름을 입력해주세요.");
	scanner.nextLine();
	String name = scanner.nextLine();		
	System.out.println("국어점수를 입력해주세요.");
	int korean = scanner.nextInt();
	System.out.println("영어점수를 입력해주세요.");
	int english = scanner.nextInt();
	System.out.println("수학점수를 입력해주세요.");
	int math = scanner.nextInt();
	int sum = (korean + english + math);
	double avg = (korean + english + math)/3;
	System.out.printf("번호: %02d번", number);
	System.out.printf("\t이름: %s \n", name);
	System.out.printf("국어: %03d점 ", korean);
	System.out.printf("\t영어: %03d점 ", english);
	System.out.printf("\t수학: %03d점 \n", math);
	System.out.printf("총점: %03d점 ", sum);
	System.out.printf("\t평균점수: %06.2f점 \n", avg);
	scanner.close();

//모범답안
public static void main(String[] args) {
final int SUBJECT_SIZE = 3;
Scanner scanner = new Scanner(System.in);//S대문자 클래스 s소문자 변수

	System.out.println("학생의 번호를 입력해주세요.");
	System.out.print("> ");
	int number = scanner.nextInt();
	
	System.out.println("학생의 이름을 입력해주세요.");
	System.out.print("> ");
	scanner.nextLine();
	String name = scanner.nextLine();		

	System.out.println("학생의 국어점수를 입력해주세요.");
	System.out.print("> ");
	int korean = scanner.nextInt();

	System.out.println("학생의 영어점수를 입력해주세요.");
	System.out.print("> ");
	int english = scanner.nextInt();
	
	System.out.println("학생의 수학점수를 입력해주세요.");
	System.out.print("> ");
	int math = scanner.nextInt();
	
	int sum = korean + english + math;
	
	double avg = (double)sum / SUBJECT_SIZE;
	
	System.out.printf("번호: %02d번 이름: %s\n", number, name); //반드시 d가 들가야함 이름은 자릿수 지정이 없으므로 걍 %s로 
	System.out.printf("국어: %03d점 영어: %03d점 수학: %03d점\n", korean, english, math);
	System.out.printf("총점: %03d점 평균: %06.2f점\n", sum, avg);
	scanner.close();

하드코딩의 뜻은 값을 고정시켜 놓는다는 거다 · 즉 소프트코딩이란 · 값이 고정되지 않고 가변적인 것을 말한다.
위의 평균점수계산에서의 3과 과목수에 맞게 3으로 나온것 전자가 하드 후자가 소프트
장점 유지보수 쉬움
단점 난이도 어려움

12.28 리눅스 day03

3일차 ## [ctrl shift s 즉시 스크린샷후 범위지정으로 클립보드에 넣음 아주좋은기능]
교재 8장은 단축키와 기능에 대한 설명으로 혼자서 실천해보도록 합니다.

@@@@@3일차@@@@@@
1byte = 2^8
2byte = 2^16
4byte = 2^32
8byte = 2^64

int = 4byte
long = 8byte

계산기
calc | bc

빠져나올때 quit
df -h
디스크프리

du -sh /etc
du -sh /### 형태

지금 얼마나 쓰고있는지

who alt f6

dpkg -l | grep rdate 조회
apt -y install rdate 설치
apt show rdate 설치된 패키지 정보확인
apt remove rdate 삭제
rdate만 바꾸면 된다

dpkg -l | grep apache2
apt list --installed | apache2
apt remove -y //package name
apt install -y
apt show

해당 잠긴 캐시 파일을 삭제하고 다시 패키지를 업데이트합니다.

$sudo rm /var/lib/apt/lists/lock
$sudo rm /var/cache/apt/archives/lock
$sudo rm /var/lib/dpkg/lcok*

$sudo dpkg --configure -a
$sudo apt update

혹은 재부팅

에라가 났을때 순서

  1. 메세지 카피 영어로나옴 ㅠㅠ 보다보면 익숙해짐 노트정리할때 에러메시지를 정리해두는게 좋다. 오답노트형식으로 많지않다. 20개정도면 해결됨
  2. 대소문자 오타 공백 다 관련있는걸 알게된다.
  3. 환경이 꼬여서 그럴수있으니 로그아웃후로그인을 해보는것도 좋다.
  4. 그래도 안됨 재부팅
  5. 다시 검색, 나랑 같은 환경을 찾아야한다.
  6. 그래도 안되면 선배한테 가라

빈거

vi index.html



hi 암 짱구

root@j:~# sqlite3
SQLite version 3.37.2 2022-01-06 13:25:41
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite> .open mydb
sqlite> .table
sqlite> create table Score(name, kor, eng);
sqlite> insert into Score values('이강인', 60, 90);
sqlite> insert into Score values('조규성', 80, 70);
sqlite> insert into Score values('백승호', 99, 95);
sqlite> select * from Score;
이강인|60|90
조규성|80|70
백승호|99|95
sqlite> update Score set kor=33 where name='조규성';
sqlite> select * from Score;
이강인|60|90
조규성|33|70
백승호|99|95
sqlite> delete from Score where name='이강인';
sqlite> select * from Score;
조규성|33|70
백승호|99|95
sqlite> .mode col
sqlite> .header on
sqlite> select * from Score;
name kor eng


조규성 33 70
백승호 99 95
sqlite>

215p 221p 참고

.찍고 쓰는것은 특정db에서 쓰는 고유기능
표준 ex update read 등은 표준으로 여러 db에서 범용성있게 사용된다.

CRUD 가 중요하다 Create(insert) Read(select) Update(동) Delete(동)

  1. DML (Data manipulation language) CRUD ** @@
    DB에서 데이터를 조작하는 명령어. 즉 우리가 가장 많이 사용하는 SELECT, INSERT, UPDATE, DELETE 등이 해당된다.

  2. DDL (Data definition language)
    DB를 정의하는 명령어. 대표적으로 CREATE, DROP(테이블삭제), ALTER(수정), TRUNCATE(자르다) 가 해당된다.

  3. DCL (Data Control language)
    DB에 데이터를 제어하기 위한 명령어. COMMIT(실제로 집어넣는것), ROLLBACK, GRANT(권한부여), REVOKE(권한뺏기) 등이 해당된다.

리눅스 설치
기능 운용(아파치)

특정 폴더에 문서작성해서 html페이지 만듦

이후엔 도메인등록으로 인터넷에 올린다.
거의 유료임

  1. linux 기설치- 원본이미지 보관필요
  2. package설치 기본설정 (아직안배움)해야 쓸만해짐 후 보관 다시

순서
/boot 폴더 500m
/(root) 그냥 폴더에 20G =C
swap 2기가
홈에10g
나머지 17.5g backup에

$hostname
df -h = 구성요소(파티션정보)
dpkg -l | nl
dpkg -l | wc -l
nl /etc/passwd 사용자정보
sudo useradd -m -d /home/jj -s /bin/bash jj 유저추가 home의 jj로 위치
sudo passwd jj

sudo useradd -m -d /home/ace -s /bin/bash ace
sudo passwd ace

sudo ufw start/stop/restart/status
sudo service ssh status
sudo service httpd status

dpkg -l| grep apache2
sudo apt -y install apache2

tzselect
sudo vi /etc/default/locale

들어가서 ko_KR
sudo passwd root
new password:
Retype new password:
passwd: password 성공적으로 바꼈음
j@aa:~$

sudo -i
su -i

루트 비번 jj으로 바꿨음?
whoami
exit
su -
패스워드:

whoami

ctrl shift s 즉시 스크린샷후 범위지정으로 클립보드에 넣음 아주좋은기능

물리적 장치에 논리적디렉토리를 연결하는걸 마운트라고함 mount
df -h 파티션정보

fdisk 파티션나누기
지우고 수정하고 추가하고 나누고함
부팅페이지 113p

apt -y install gcc g++ default-jdk lynx sendmail tomcat9 tree glibc-doc mysql-server

rpm -qa | grep apache2
yum -ivh apache2
rpm -ivh apache2

man cp

cp -ih /etc/aa . .ㅇㅁ

도움말
cp --help
info cp
man cp

whereis cp
which cp
whatis printf 명령어중 printf가 있는것만 뽑아옴 = man -f printf

sudo apt -y install mandoc
makewhatis

man -k http

whatis printf man -f printf
apropos printf man -k printf printf가 아무데나 있기만하면 뽑아옴

설치확인
gcc --version
g++ --version
javac --version
이중 for문
구구단 2단부터 9단까지 어제했던거 또하기

set -o noclobber
덮어쓰기 금지

ls -f /lib
-f 파일 종류보기
ls -fl /dev

i와 j는 표개념으로
i는 세로 j는 가로로
이중 for문 활용연습

cd ~/d3
cp /etc/services s
nl s

grep 찾아줌
grep http s
grep ftp s
grep domain s
grep mail s

dpkg -l > pkg1 저장
nl pkg1
grep mysql pkg1 mysql의 pkg1뽑

dpkg -l | grep mysql 파이프를 통해서 grep mysql의 내용을 dpkg -l에 보내준다는 느낌
ps -ef | grep mysql

who | grep kim => 김씨는 로그인을 하였나?
grep kbs /etc/passwd -> 뭐가나오면 kbs씨는 있고 없으면 희소식
grep root /etc/passwd

date > a1
97 cal > c1
98 echo "hahaha" >> c1
99 nl c1의 결과값
리다이렉션 재지향 하나는 보내고 하나는 다른 반절을 나머지로
cat < c1
nl c1
1 12월 2022
2 일 월 화 수 목 금 토
3 1 2 3
4 4 5 6 7 8 9 10
5 11 12 13 14 15 16 17
6 18 19 20 21 22 23 24
7 25 26 27 28 29 30 31
8
9 hahaha

내일 29일 사용자 & 권한 & mysql관리

RECAP
우분투다운로드및 대충 버추얼박스등이 완료되있다가정했을때
현재로서는 램 2기가, 용량 50기가로 지정후 다른건 지정하지않는다.
네트워크에서 포트포워딩설정을
내부에선 별다른 설정을 건드리지않고
파티션을 분배한다.

순서(중요하진않음)
/boot 폴더 500m
/(root) 그냥 폴더에 20G =C
swap 2기가
홈에10g
나머지 17.5g backup에

후에 putty 연결은
putty configuration에서 host name(or ipaddress)에 127.0.0.1로 입력 후
saved session 에서 이름을 지정하고 저장후 오픈을 눌러 연결시킨다.
이후 입력해뒀던 아이디와 비밀번호를 입력하고 들어가서
해왔던걸 하면 된다.
필요한 플러그인? 확장기능?

apt -y install gcc g++ default-jdk lynx sendmail tomcat9 tree glibc-doc mysql-server apache2

자바 1주차

1주차의 내용은 전반적인 자바의 구성요소등이 있었다.

oopl에 대한 이해와 개념정리 그리고 앞으로 진행될 수업의 개괄적인 설명등이 있었다.

강사님도 열성적이신 분이셔서 내가 잘하기만 하고 따라가기만 하면

뭔가 되있을거 같긴했다.

아직 잘 모르겠다.
192.168.0.175 공유피씨

\192.168.0.175
error 계정이다를때는 자격증명을 요구할수도있다.
일에는 표준화가 중요하다
application == 응용프로그램
와서프린트체크 \192.168.0.175 공유폴더체크
Win + R = 실행
Win + E = 탐색기

매주 금요일 조변경 + 시험
주관식 객관식 병용

스터디는 당분간 예습X 복습Only
못한거 위주로 학습

.java 메모장작성

쳐보면서 모르는거 프린터 옆에 공백에 적어두기
Object Modeling의 과정
1. 현실 세계의 존재하는 것을 객체로 표현한다.
2. 객체들을 추상화라는 과정에서 속성과 행동들을 추출한다.
3. 속성들의 Model을 만들어 내는 것을 Static Modeling이라 부르고
행동들의 Model을 만들어 내는 것을 Dynamic Modeling이라 부른다.
4. 객체에서 추출한 속성과 행동에 대하여 공통적이고 일반적인 개념을 Class로 만들어낸다.
여기까지가 Object Modeling이라 한다.
5. Object Modeling한 Class를 사용하기 위하여 다양한 Instance를 생성한다.
-> OOP에서 Message는 객체간 data를 전달하거나 받는 통신 수단이다. Message는 OOPL에서 Method라고 부른다.

  1. 시스템을 개발할때
    모델링 == 기획
    시스템 구축시 구현전 결정하는 모든 활동
    구축할 시스템 정의
    요구사항정의
    구체적인계획[분석,설계]
    결과물 : 모델[in 전산에선 document]을 토대로 구현작업에 들어감
    표기법 : UML 유니파이드 모델링 랭귀지 모델만드는 표기법. ==로테이션

  2. 구현
    system 실제구현
    소스코드 컴파일 디버깅
    결과물 코드를 포함한 시스템
    프로그래밍언어는 자바등 언어가 있으나 어디까지나 수단임을 상기할것.
    구현하는 사람 코더 != 타이피스트

  3. 절차 요구사항 정의 분석 설계 구현
    OOP-> 객체지향프로그래밍 // OOPL객체지향프로그래밍랭귀지
    객체지향의 원리

  4. Encapsulation 캡슐화
    (1)정보 은닉화 ▶ 높은 응집도, 낮은 결합도를 유지할 수 있도록 설계,
    데이터와 코드의 형태를 외부로부터 알 수 없게한다.
    데이터의 구조와 역할, 기능을 하나의 캡슐 형태로 만든다.
    한 곳에서 변화가 일어나도 다른 곳에 미치는 사이드 이펙트를 최소화시킨다.
    즉, 객체 내부의 어떤 동작에 대한 구현이 어떻게 되어 있는지 감춘다.

  5. Abstraction 추상화 우리는 보통 알고는 있지만 정확하게 표현하기 힘든 것들을 중요한 부분이나 특징점을 잡아 설명하고는 한다.
    이것을 '추상적으로 표현한다' 즉 '추상화한다' 라고 한다.
    하는 이유?
    (1)추상화를 통해 잘 설계했다면 여러개의 클래스를 정의했을 때, 중복 코드가 현저히 줄어든다.
    (2)코드가 간결해지기 때문에 생산성 증가, 가독성 증가, 에러 감소, 유지 보수시 시간 단축 등의 효과!
    (3)잘 만들어진 슈퍼 클래스 덕분에 코드의 재사용성이 증가한다.

  6. Modularity 모듈화
    거대한 문제를 작은 조각의 문제로 나누어 다루기 쉽도록 하는 과정
    여기서, 작게 나누어진 각 부분을 모듈이라고 함
    각 모듈은 논리적 또는 기능적으로 분리되어 격리되고 독립적인 일을 수행
    (1) Unity (한가지 일만 수행)
    (2) Smallness (간단명료)
    (3) Simplicity (단순성)
    (4) Independency (독립성)

  7. Hierarchy 계층구조 = 부모자식관계로 구현 or 트리구조로 나타낼 수 있다.

객체지향의 개념
Object = 상태(State) 와 행동(Behavior) 을 가지는 것을 말함,
알고 있는 것들(상태)과 할 수 있는 것들(행동)을 각각의 변수와 메서드로 나타낼 수 있어야 한다.
Class = 여러 객체들의 공통된 점을 모아서 하나로 표현한 것이며, 그 상태와 행위를 표현하는 대상이다.
///Bean class = Object Modeling한 Class, 현실세계를 표현한 Class. main Method가 없다.
polymorphism(다형성) = 하나의 객체가 여러 가지 타입을 가질 수 있는 것을 의미함.
자바에서는 이러한 다형성을 부모 클래스 타입의 참조 변수로 자식 클래스 타입의 인스턴스를 참조할 수 있도록 하여 구현하고 있음
Relationship = 두 개 이상의 엔티티 형에서 데이터를 상호 참조하는 관계
(1)연관화(association)
공통된 의미(semantic)를 서로 연관된 집단으로 표현하는 방법으로 링크(link)와 그 의미가 유사
객체들의 물리적, 또는 개념적 연결을 두 개 이상의 객체와 클래스로 표현
즉, 연관화는 관련되지 않은 클래스들간의 의미적 연결
(2)분류화(classification)
공통된 속성에 의하여 정의된 객체 및 클래스에 있어 구성원들의 인스턴스
즉, 분류화는 동일한 형의 특성을 갖는 객체들이 모여 클래스를 구성하는 것
여기서, 클래스는 객체들의 본질에 대한 추상화
(3)집단화(aggregation)
서로 관련 있는 여러 개의 객체를 묶어 한 개의 상위 객체 생성
여러 개의 속성을 묶어 사용자 정의형의 엔티티를 만드는 수단으로 사용
한 객체에서 하나 이상의 객체는 사용자 표정의 형이 될 때 복합 객체(composite object)
즉, 복합 객체의 종속 성분을 모델링하기 위해 사용되며,
이들 복합 성분 클래스 관계를 통해 복합 속성 계층(composite attribute hierarchy)을 형성
(4)일반화(generalization)
일반화는 객체들에 있어 공통적인 성질들을 상위 객체로 정의하고,
특수화(specialization)된 객체들을 하위의 부분형(subtype) 객체로 정의
(5)특수화(specialization)
일반화와 개념과 같으나, 클래스를 보는 시점에 있어 상위의 클래스에서 하위의 클래스를 보는 관점(특수화의 역은 일반화)
하위 개념으로 내려 갈수록 인스턴스는 특수화
클래스로 모델화되는 실세계 객체들을 겹치지 않는 서브 클래스로 나누거나 상이한 실세계 상황으로 나누기 위해 사용

자바를 설치할때
java 개발환경구축
=>JDK
JAVA의 특징 7가지✅

  1. 객체 지향 언어
  2. 인터프리터 언어
  3. 독립적인 플랫폼
    // 프로그램은 어디서 기원하고 출발하는가? 카톡은 메신저라는 기능에서 플랫폼화 전략이 발전했다.
    // 자바는 어느 OS에서나 작동한다.
  4. 자동 메모리 관리
  5. 멀티 쓰레딩 지원
  6. 동적이다
  7. 안전하고 강력하다

최종 사용자 (End user)
최종 사용자는 궁극적으로 제품을 사용하는 사용자가 되는 사람을 의미한다. (사용자입장)
JRE만 있으면 됨

개발자입장;
JRE+JDK
하나의앱을 만들고 -> 다른 운영체제에 가동시키려면 다르게 제작해야한다.
for windows
for linux

hwp와 os는 상호 고려대상이 아니다. =독립적이다.
JRE 자바 런타임 인바이런먼트
자바는 클래스를 만들때 os에 독립적으로 기능한다.
JRE라는 클래스를만들어서 컴퓨터와 소통하게한다
그 작동을 컴파일이라고 한다.
.java를 만들어 실행을 시키는 툴이 JDK (java development tool kit) ==자바플랫폼

os에 독립적인 이유는 두가지 툴인 jdk와 jre는 컴퓨터와 개발자간의 의사소통을위해 설치하고
자바 플랫폼 독립성을 가능하게 하는 것은 자바 가상기계와 바이트 코드 때문이다.
Hello.java 소스를 컴파일 하여 Hello.class 파일을 만드는 과정을 보면,
바이트 코드는 자바 가상 기계에서만 실행되는 기계어로 어떤 CPU와도 관계없는 바이너리코드이다.
자바 컴파일러는 자바 소스 프로그램을 컴파일하여 바이트 코드로 된 클래스 파일을 생성한다.
이 클래스 파일은 어떤 운영체제를 탑재하든 CPU의 종류가 무엇인든 간에 JVM만 있으면 바로 실행이 가능하다.
JDK는 자바 클래스 파일을 디어셈블 하여 바이트 구조를 볼 수 있는 도구를 제공한다.
binary code 또는 이진 코드는 텍스트, 컴퓨터 프로세서 명령 또는 그 밖의 2심볼 시스템을 사용하는 데이터를 대표하며
대개 이진 숫자 체계의 0과 1을 의미한다. 이진 코드는 이진 숫자 패턴을 각 문자, 명령 등으로 할당한다.
JVM : Java Virtual Machine의 줄임말. 직역하면 '자바를 실행하기 위한 가상 기계(컴퓨터)'

오픈소스는 도큐먼트가 제공된다.
오픈소스 오픈소스 프로젝트를 공개하고 운영하는 것은 단순히 소스 코드만을 공개하는 것에 그치지 않고,
같은 문제로 고민하고 있는 외부 개발자들과 소통하고 더 나은 소프트웨어를 만들기 위해 노력하는 모든 활동을 의미합니다.
j2se javaplatform
MSI = microsoft installer

레포트
1.OOP-> 객체지향프로그래밍
객체란 리얼월드의 개념을 컴퓨터세계에 가져오기위해 각각의 개념에 추상화와 클래스구분등 과정을 통해서 독립된 객체들로 구성하는 프로그래밍을 말한다.
절차적 프로그래밍이 주가 되던 과거에 C와 코볼, 포트란같은 언어들이 있었으나, 현대사회의 소프트웨어 발전규모와 성장속도들로 인해 생긴 코드의 복잡성과 유지보수등의
어려움이 문제가 되었다. 이런 문제의 대안으로 객체지향프로그래밍이 등장하고 프로그래밍과 언어의 패러다임이 바뀌면서 기존 언어인 C언어등에도 후술할 상속, 캡슐화등이 포함된 C++언어와
자바, 파이썬등과같이 HLL에 가까운 언어들도 등장하게 되었으며 과학발전과 함께 증가하는 프로그래밍수요에 맞게 낮아진 접근성으로 빠른 소프트웨어 발전에 이바지하게 되었다.
처음 객체지향을 이해할때 가장 쉽게 다가온 비유법은 레고나 인체를 비유로 든것이었는데, 요구, 해당하는 기능에 맞는 객체들을 따로 클래스로 구분지어 합친다는 개념으로
새로 레고블럭을 조립할때나, 인체의 성장과 변화 같은 이벤트에도 거대한 문제를 작은 조각으로 나누어 해결하는 모듈화와 데이터구조 역할, 기능을 하나의 캡슐형태로 만들어
한곳의 변화가 다른곳에 미치는 영향이 적게끔하며 동시에 보안에도 도움을 주는 캡슐화등을 바탕으로 하여 유지보수가 원활하고 그로인해오는 비용문제에 대한 고민도 덜수있다.
또한, 객체에 나누어져 행동하는 개념은 리얼월드에서도 존재하는 개념이라 나눠서 생각해보면 이해에 어렵지않으며, 물론 그 장점을 얻고자 소모되는 초기비용과 시간은
절차적 프로그래밍에 비하면 단점으로 보일수 있으나, 앞서 설명한 큰 장점들로 인해서 현재의 개발 패러다임은 객체지향프로그래밍이 큰 부분을 차지하게 되었다.

  1. Object(객체)
    객체는 세상(리얼월드, 디지털월드)에 존재하는 모든대상을 말한다. 프로그램 영역에서는 사용되는 데이터 또는 식별자에 의해 참조되는 공간을 의미하며,
    값을 저장 할 변수와 작업을 수행 할 메소드를 서로 연관된 것들끼리 묶어서 만든 것을 객체라고 할 수 있다.
    속성(property)과 동작(behavior)으로 구분되며, 동작을 돼지로 예를들자면 돼지 객체의 특정행동 혹은 따르는 절차, 그에 맞는 돼지만의 방법,
    돼지라는 객체의 특정 목적을 위한 이용자적인 시야에서의 인간이나 돼지자체의 기능과 활동등으로 설명되며, 속성은 객체의 특징(feature)과 상태(state)를 말한다.
    돼지라는 객체가 가지고있는 특징으로 잡식성과 육류로의 다양한 활용, 상태로는 병듦, 배부름등 다양한 상태가 존재하고 그에 맞는 다양한 방식들을
    컴퓨터세계에 옮겨와 프로그래밍을 통하여 돼지라는 객체를 활용할 수있다. 활용하는 방법에서는 Class라는 객체를 정의하고 모델링하는 설계도가 존재한다면 그 설계도의 부품들을 객체 object로 볼 수 있다.

  2. Class
    Class는 다양하게 활용되는데 객체를 특정기능이나 요구에 맞도록 정의해놓은 틀 또는 설계도같은 의미로 활용되며 모든 객처들의 생산처로 볼 수 있다. 이 과정에서 추상화를 통한 객체 모델링이 이루어진다.
    클래스는 객체의 상태를 나타내는 필드(Field)와 객체의 행동을 나타내는 메소드로 구분된다. 메소드의 객체간 의사소통기능등을 활용해 실행하기위한 명령문이라는 의미로 활용할 수 있다.
    그러므로 객체간 서로 관련된 매개 변수들을 정의하고, 정의한 작업을 수행하는 함수등의 기능을 Class에 함께 정의하여
    변수와 함수들을 따로 작성하지 않고 원활하게 작성할 수 있도록 만들었으며, 변수를 매번 새로 선언하는 낭비와 불편함을 없게 한다.

  3. Abstraction 추상화
    알고는 있지만 정확하게 표현하기 힘든 것들을 중요한 부분이나 특징점을 잡아 설명하는데 이것을 '추상적으로 표현한다' 즉 '추상화한다' 라고 한다.
    프로그래밍에서 추상화를 하는 이유는 여러가지 장점이 있기 때문인데 첫째로 추상화를 통해 잘 설계했다면 여러개의 클래스를 정의했을 때, 중복 코드가 현저히 줄어든다.
    또한 코드가 간결해지기 때문에 생산성이 증가하게 되고 증가하는 프로그래머간 협업과정에서의 가독성 증가와, 에러 감소, 코드의 유지 보수시 시간 단축 등의 효과가 있다.
    잘 만들어진 슈퍼 클래스 덕분에 코드의 재사용성이 증가하고 일반화, 특수화, 상속등의 상황에서도 효과적인 이미지화로 객체의 특정범주를 정하기 용이해진다.

  4. Generalization 일반화 / Inheritance(상속)
    일반화는 기존의 객체들에 있어 공통적인 클래스 즉 성질들을 상위 객체로 정의하고, 특수화(specialization)된 객체들을 하위의 부분형(subtype) 객체로 정의한다.
    쉽게말하면 바나나, 사과, 딸기등의 공통적인 개념인 과일로 일반화하여 상위객체로 정의하고, 과일의 한 종류인 바나나, 사과, 딸기를 과일의 한 종류로 특수화한다.
    여러 개체들이 가진 공통특성을 부각시켜 하나의 개념이나 법칙으로 성립시키는 과정이라고 할 수 있다.
    이렇게 해서 얻을수있는 이점은 일일이 사과 바나나 딸기등을 기억하고있거나 새로운 과일의 한종류가 들어왔을때 추가해서 매번 추가되는 과일의 상황마다 같은 질문과 절차를 밟는게 아닌,
    과일이라는 범주를 정해놨으니 범주의 내에 있는 전체 과일을 다룰 수 있는 수단을 얻을 수 있다는 점이다. 프로그래밍적인 시각으로는 계속해서 코드를 수정하고 유연하게 대처하기 어려워진다는 난점을 해결할 수 있다.
    Inheritance 상속은 일반화와 유사하다. is a 혹은 has a 관계로 설명하는데 apple is a fruit, banana is a fruit, student is a person처럼 특정 객체가 상위범주에 포함되는 것이 반드시 참인 것을 말한다.
    따라서 상위객체가 지닌 메쏘드나 속성, 기능을 재사용, 활용할 수 있고 이를 상속으로 정의한다.
    허나 모든 사람이 학생이 아니고 모든 과일이 사과나 바나나가 아니듯, 코드를 짤때 하위범주에 속한것이 무조건 상위객체에 통용되는것은 아니므로 주의한다.

  5. 특수화(specialization)
    일반화와 개념과 같으나, 클래스를 보는 시점에 있어 상위의 클래스범위에서 하위의 클래스를 보는 관점이다.
    하위 개념으로 내려 갈수록 Instance 인스턴스(클래스의 정의를 통해서 만들어진 객체)는 더 개별적 특징이 도드라지며 특수화된다.
    클래스로 모델화되는 리얼월드 객체들을 겹치지 않는 서브 클래스로 나누거나 각자 다른 리얼월드의 상황으로 나누기 위해 사용한다.

  6. Realization
    실제화 혹은 현실화라고도 하며 리얼월드에서의 특정 행동을 디지털월드로 옮기거나 혹은 유사한 행동을 구현할때 이미 존재하고 있는 특정 객체의 행동에 대한 구현을 말한다.
    은행에 가서의 현금인출과 계좌이체등의 실질적으로 존재하는 행동을 인터넷뱅킹에서 몇가지의 버튼으로 본인인증과 금액지정등의 과정을 거치는 것으로 이해할 수 있다.

  7. 연관화(association)
    공통된 의미(semantic)를 서로 연관된 집단으로 표현하는 방법으로 링크(link)와 그 의미가 유사하다.
    객체들의 물리적, 또는 개념적 연결을 두 개 이상의 객체와 클래스로 표현 즉, 연관화는 관련되지 않은 클래스들간의 의미적 연결로 일반화, 특수화와 구분되는 특징이다.

  8. dependency
    다양한 클래스에서의 객체의 위치를 생각할 때, 변경이 되는 코드들은 함께 입력을 하고, 변경이 되지 않는 경우의 코드들은 별개로 입력을 하게 된다.
    특정 포인트에 초점을 맞추면 서로 의존하는 방향에 따라서 입력을 하게 되고 클라이언트의 요청을 받는 컨트롤러 객체, 비즈니스 상에서의 서비스객체등 종류별로 분류할 수 있는데, 이러한 객체들은 독립적으로 기능을 수행함이 아닌 서로 의존하여 응용프로그램 즉 application의 기능을 구현하게 되는데 이 성격을 dependency 의존성이라 한다.

  9. polymorphism(다형성) = 하나의 객체가 여러 가지 타입을 가질 수 있는 것을 의미한다. 학생 이현석, 개발자 이현석, 아들 이현석, 친구 이현석처럼 이현석이라는 한 객체는 다양한 성질을 가질 수 있다.
    따라서 객체지향 프로그래밍에서는 이현석이라는 부모클래스 타입 객체의 다형성을 활용하여 참조 변수로 자식 클래스 타입의 다른 타입의 이현석을 참조하도록 하여 구현하고 있다.

  10. Encapsulation 캡슐화
    Class의 내부변수와 메소드를 하나로 패키징 하는 캡슐화는 정보 은닉화와 높은 응집도, 낮은 결합도를 유지할 수 있도록 설계함을 말한다. 데이터와 코드의 형태를 외부로부터 알 수 없게 캡슐약의 내부를 자세히 알아 볼수 없지만 분명히 약의 효과가 존재하듯, 데이터의 구조와 역할, 기능을 하나의 캡슐 형태로 만든다.
    따라서 외부에서 특정 변화가 일어나더라도 다른 곳에 미치는 사이드 이펙트를 최소화시킬 수 있으며, 객체 내부의 어떤 동작에 대한 구현이 어떻게 되어 있는지 감추고, 아무나 캡슐을 열어볼 수 없게끔 하므로 보안에도 어느정도 역할을 맡는다.
    자바의 경우에 접근 제어자를 통해서 캡슐화 은닉화를 구현해 객체 내부의 상태와 동작의 접근방법을 강제할 수 있다.

OOP-> 객체지향프로그래밍 // OOPL객체지향프로그래밍랭귀지
객체지향의 원리

  1. Encapsulation 캡슐화
    (1)정보 은닉화 ▶ 높은 응집도, 낮은 결합도를 유지할 수 있도록 설계,
    데이터와 코드의 형태를 외부로부터 알 수 없게한다.
    데이터의 구조와 역할, 기능을 하나의 캡슐 형태로 만든다.
    한 곳에서 변화가 일어나도 다른 곳에 미치는 사이드 이펙트를 최소화시킨다.
    즉, 객체 내부의 어떤 동작에 대한 구현이 어떻게 되어 있는지 감춘다.

  2. Abstraction 추상화 우리는 보통 알고는 있지만 정확하게 표현하기 힘든 것들을 중요한 부분이나 특징점을 잡아 설명하고는 한다.
    이것을 '추상적으로 표현한다' 즉 '추상화한다' 라고 한다.
    하는 이유?
    (1)추상화를 통해 잘 설계했다면 여러개의 클래스를 정의했을 때, 중복 코드가 현저히 줄어든다.
    (2)코드가 간결해지기 때문에 생산성 증가, 가독성 증가, 에러 감소, 유지 보수시 시간 단축 등의 효과!
    (3)잘 만들어진 슈퍼 클래스 덕분에 코드의 재사용성이 증가한다.

  3. Modularity 모듈화
    거대한 문제를 작은 조각의 문제로 나누어 다루기 쉽도록 하는 과정
    여기서, 작게 나누어진 각 부분을 모듈이라고 함
    각 모듈은 논리적 또는 기능적으로 분리되어 격리되고 독립적인 일을 수행
    (1) Unity (한가지 일만 수행)
    (2) Smallness (간단명료)
    (3) Simplicity (단순성)
    (4) Independency (독립성)

  4. Hierarchy 계층구조 = 부모자식관계로 구현 or 트리구조로 나타낼 수 있다.

객체지향의 개념
Object = 상태(State) 와 행동(Behavior) 을 가지는 것을 말함,
알고 있는 것들(상태)과 할 수 있는 것들(행동)을 각각의 변수와 메서드로 나타낼 수 있어야 한다.
Class = 여러 객체들의 공통된 점을 모아서 하나로 표현한 것이며, 그 상태와 행위를 표현하는 대상이다.
///Bean class = Object Modeling한 Class, 현실세계를 표현한 Class. main Method가 없다.
polymorphism(다형성) = 하나의 객체가 여러 가지 타입을 가질 수 있는 것을 의미함.
자바에서는 이러한 다형성을 부모 클래스 타입의 참조 변수로 자식 클래스 타입의 인스턴스를 참조할 수 있도록 하여 구현하고 있음
Relationship = 두 개 이상의 엔티티 형에서 데이터를 상호 참조하는 관계
(1)연관화(association)
공통된 의미(semantic)를 서로 연관된 집단으로 표현하는 방법으로 링크(link)와 그 의미가 유사
객체들의 물리적, 또는 개념적 연결을 두 개 이상의 객체와 클래스로 표현
즉, 연관화는 관련되지 않은 클래스들간의 의미적 연결
(2)분류화(classification)
공통된 속성에 의하여 정의된 객체 및 클래스에 있어 구성원들의 인스턴스
즉, 분류화는 동일한 형의 특성을 갖는 객체들이 모여 클래스를 구성하는 것
여기서, 클래스는 객체들의 본질에 대한 추상화
(3)집단화(aggregation)
서로 관련 있는 여러 개의 객체를 묶어 한 개의 상위 객체 생성
여러 개의 속성을 묶어 사용자 정의형의 엔티티를 만드는 수단으로 사용
한 객체에서 하나 이상의 객체는 사용자 표정의 형이 될 때 복합 객체(composite object)
즉, 복합 객체의 종속 성분을 모델링하기 위해 사용되며,
이들 복합 성분 클래스 관계를 통해 복합 속성 계층(composite attribute hierarchy)을 형성
(4)일반화(generalization)
일반화는 객체들에 있어 공통적인 성질들을 상위 객체로 정의하고,
특수화(specialization)된 객체들을 하위의 부분형(subtype) 객체로 정의
(5)특수화(specialization)
일반화와 개념과 같으나, 클래스를 보는 시점에 있어 상위의 클래스에서 하위의 클래스를 보는 관점(특수화의 역은 일반화)
하위 개념으로 내려 갈수록 인스턴스는 특수화
클래스로 모델화되는 실세계 객체들을 겹치지 않는 서브 클래스로 나누거나 상이한 실세계 상황으로 나누기 위해 사용

자바 4일차
강사님 풀이도에는 return; 으로 else의 사용이 필요없어지게 코딩하심

데이터 유효성 검증, validation
숫자를 입력하라는 요청에 범위 초과한 숫자나 문자열의 입력을 방지-> 나아가 프로그램에 에러발생을 최소화 하고자 하는일
과제물 체크리스트 문옆에 그 전날에 받은 다음날과제 체크리스트 작성
늦어도 괜찮다 메꾸기만 한다면
근데 난 제때 하고싶음

Example4예제는 BreakContinueLabel에 참고사항으로 존재한다
카피&페이스트를 할수도있지만 왜작동하는지는 이해해라

객체지향프로그래밍 정리

클래스생성 및 관계도 모델링 구상
비둘기 돌고래 코끼리 티비 전화기 비행기

생물>동물 클래스
비둘기 돌고래 코끼리

무생물 기계 클래스
티비 전화기 비행기

자바3주차 With SQL

dbms = 포스트잇 with 산더미같은 문서
종류가많타

다형성이 적용이 안되면 복잡하다
디펜던트가아닌 표준화된방식
structure query language
구조적 구성된질의?언어
JDBC
java.sql 추캡해둔거임
이틀동안 sql사용법배움
2.5일간
JDBC(Java Database Connectivity)는 자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API이다.

미국교수님논문 sql
db는 이런식으ㅡ로 db화하면 좋타
논문이훌륭햇설
종이=규격화

첫제품화오라클
1호가머리에박힌다.
우린오라클쓸거임

SQL 1일차
structured query language
논리다

수업진행은 오라클dbms를 이용해서 진행할예정이고
Oracle Database 19c

RDBMS(Oracle 10g)
gui
HR -> 과제물

id scott
pw tiger

사용자 권한
롤:
CONNECT RESOURCE DBA제외
시스템 권한 직접 부여:
CREATE DATABASE LINK CREATE MATERIALIZED VIEW CREATE PROCEDURE
CREATE PUBLIC SYNONYM CREATE ROLE CREATE SEQUENCE
CREATE SYNONYM CREATE TABLE CREATE TRIGGER
CREATE TYPE CREATE VIEW

콘솔에서
id scott
pw tiger 입력해도 커서무반응임 치고 엔터
"SCOTT은 오라클 주식회사의 초대 프로그래머였던 BRUCE SCOTT에서 따왔고,
TIGER는 그가 기르던 고양이의 이름이다."

quit 치면 꺼짐
exit

in sql 테이블 = 매트릭스구조 인스턴스
가로줄 -> ROW/RECORD RECORD가 좀더 빈번함 정보 담고있음
세로줄 -> Column : data성질(DATA TYPE공부필요)
sql은 rdbms의 표준명령어 레코드수가 많을수록고칠게많다
R = Relation

01서울,02부산,03대전,04대구,05광주식으로 써주면 번호만참조해서 쓸수있다.
편하겟다! 까치발?
클래스 & db모델링
Entity 오브젝트
ERD Entity(Table) Relationship Diagram
HDBMS = 하이라키 데이터 베이스 매니지먼트 시스템?
ORDBMS = 오브젝트
RDBMS 돈때문에 많이쓴다.
NOSQL=?
DDL Data definition language
DML Data manipulating language
DCL Data Control language 어드민역할 고로 우린 안다룸
TCL Transaction Control language == save Commit / 취소 Rollback
로테이션정리 -> sql대소문자구분x
대문자 -> keyword
소문자 -> identifier
C/N Column name
T/N table name
[ ] 대괄호표시 -> o ~more / 있어도o, 없어도o
drop table t/n; 잘못모델링했다는얘기라 안쓸거임

교재27p 데이터타입

오라클제공하는 가상테이블은 DUAL
데이트등의 기본정보들은 OS설치시의 나라를 따라간다.

    ID NAME                               SALARY TITLE                          IN_DATE  DEPT_NAME

     1 김사장                                100 사장                           04/07/19 개발부
     2 홍길동                               1000 부사장                         04/07/19 영업부
     3 홍길순                              10000 사원                           23/01/16
	 
	 홍길순의 사원이나 날짜는 지정을 하지 않았으므로 디폴트값인 사원과 오늘의 날짜가 나오고 부서명은 아예 작성을 하지 않았기 때문에 Null값이 출력됨

업데이트
update t/n
set /c/n = value [,c/n = value] <<로 바꿔줘
where 조건 <<이름위치 부서위치 업데이트도 하나는 반드시바꿔야함

delete[from] t/n
where 조건

update emp_test
set TITLE='사장', salary='2000', dept_name='대기발령'
WHERE name ='홍길순';

update emp_test
set dept_name='대기발령'
WHERE name ='홍길순';
name에 홍길순이라는 이름의 직책을 대기발령으로 update-바꿔 달라는 뜻

update emp_test
set title='평사원'

위처럼 WHERE가 지정이 안되있는 경우 전부 해당된다. 아주 위험할듯

update emp_test
set dept_name='대기발령'
WHERE salary >=1500;
임금 1500이하인 사람들의 직책을 대기발령으로 놔달라는 뜻

update emp_test
set salary= salary+'500';
모든사람들 임금을 현재값에서 +500해달라

update emp_test
set dept_name= '대기발령'
where dept_name = (NULL);
null값인 사람들을 대기발령으로 놔줘

update emp_test
set dept_name= '대기발령'
/* where dept_name = ALL('',''); */
where dept_name is NULL;
null값은 이처럼 등호가 아닌( 등호일경우 계산으로 처리되어 null로 처리된다.)
is null or is not null로 표기한다.

update emp_test
set dept_name='관리부'
WHERE dept_name= '영업부';
영업부사람들을 관리부로 바꿔줭

null은 is null로 비교함
update emp_test
set dept_name='대기발령'
where dept_name is not null;
update emp_test
set dept_name='관리부'
WHERE dept_name= '영업부';

  1. 이름,부서,직책,입사일 조회(ALIAS 사용)
    as 혹은 띄어쓰기
    SELECT
    name 이름, dept_name 부서, title 직책, in_date 입사일 뒤에 한글로 바뀌게 된다. 저장하면 아마 다 바뀔듯
    from emp_test;

  2. 이름,직책,연봉,특별 상여금 조회(ALIAS 사용)
    (상여금은 연봉의 15%로 계산) *0.15

    QUERY 하나
    NULL은 연산에서 제외(?) NULL은 어떻게 추출되는지 확인

    QUERY 둘
    직책 NULL 인 경우 ==> 인사발령전
    연봉 NULL 인경우 ==> 0
    상여금 NULL 인경우 ==> 0 NVL( , )
    출력되도록 Query 변경
    SELECT
    name 이름, dept_name 부서, title 직책, salary 연봉, salary*0.15 특별상여금
    from emp_test;

  3. 이름,월급,일당,시급을 조회(ALIAS 사용)
    (일당 :30일, 시급 : 8시간 기준)
    SELECT
    name 이름, salary 연봉, salary/30 일당, (salary/30)/8
    from emp_test;

4.위의 QUERY문을 아래의 함수를 사용하여 정리 추출(ALIAS 사용)
==> 반올림함수 ROUND(VALUE, 반올림자리수)
==> 버림 함수 TRUNC (VALUE, 버림자리수)
SELECT
name 이름, salary 연봉, Round(salary/30, 2) 일당, trunc(salary/30/8, 1) 시급
from emp_test;

SELECT
name 이름, salary 연봉, Round(salary/30 일당, 2), trunc((salary/30)/8, 1)
from emp_test;
5. 위의 QUERY문(ROUND,TRUNC 사용한 것) 월급,일당,시급 NULL은 0 추출

SELECT
name 이름, salary 연봉, NVL(Round(salary/30, 2), 0) 일당, NVL2(trunc(salary/30/8, 0, 1), trunc(salary/30/8, 1),0) 시급
from emp_test;

SELECT
name, DECODE (title,
NULL, '<직급없음>', <직급없음>
'사장', '회사의아버지'
'부사장', '회사의어머니'
'직급있음', title
FROM emp_test;

ROUND(숫자 or 열이름, 반올림할 자리 값)
TRUNC(숫자 or 열이름, 반올림할 자리 값)
NVL(Round(salary/30, 2), 0)
NVL2(trunc(salary/30/8, 0, 1)

파일 몇개 첨부해서 보완하겠다.

사용중인 예제

1.OOP-> 객체지향프로그래밍
객체란 리얼월드의 개념을 컴퓨터세계에 가져오기위해 각각의 개념에 추상화와 클래스구분등 과정을 통해서 독립된 객체들로 구성하는 프로그래밍을 말한다.
절차적 프로그래밍이 주가 되던 과거에 C와 코볼, 포트란같은 언어들이 있었으나, 현대사회의 소프트웨어 발전규모와 성장속도들로 인해 생긴 코드의 복잡성과 유지보수등의
어려움이 문제가 되었다. 이런 문제의 대안으로 객체지향프로그래밍이 등장하고 프로그래밍과 언어의 패러다임이 바뀌면서 기존 언어인 C언어등에도 후술할 상속, 캡슐화등이 포함된 C++언어와
자바, 파이썬등과같이 HLL에 가까운 언어들도 등장하게 되었으며 과학발전과 함께 증가하는 프로그래밍수요에 맞게 낮아진 접근성으로 빠른 소프트웨어 발전에 이바지하게 되었다.
처음 객체지향을 이해할때 가장 쉽게 다가온 비유법은 레고나 인체를 비유로 든것이었는데, 요구, 해당하는 기능에 맞는 객체들을 따로 클래스로 구분지어 합친다는 개념으로
새로 레고블럭을 조립할때나, 인체의 성장과 변화 같은 이벤트에도 거대한 문제를 작은 조각으로 나누어 해결하는 모듈화와 데이터구조 역할, 기능을 하나의 캡슐형태로 만들어
한곳의 변화가 다른곳에 미치는 영향이 적게끔하며 동시에 보안에도 도움을 주는 캡슐화등을 바탕으로 하여 유지보수가 원활하고 그로인해오는 비용문제에 대한 고민도 덜수있다.
또한, 객체에 나누어져 행동하는 개념은 리얼월드에서도 존재하는 개념이라 나눠서 생각해보면 이해에 어렵지않으며, 물론 그 장점을 얻고자 소모되는 초기비용과 시간은
절차적 프로그래밍에 비하면 단점으로 보일수 있으나, 앞서 설명한 큰 장점들로 인해서 현재의 개발 패러다임은 객체지향프로그래밍이 큰 부분을 차지하게 되었다.

  1. Object(객체)
    객체는 세상(리얼월드, 디지털월드)에 존재하는 모든대상을 말한다. 프로그램 영역에서는 사용되는 데이터 또는 식별자에 의해 참조되는 공간을 의미하며,
    값을 저장 할 변수와 작업을 수행 할 메소드를 서로 연관된 것들끼리 묶어서 만든 것을 객체라고 할 수 있다.
    속성(property)과 동작(behavior)으로 구분되며, 동작을 돼지로 예를들자면 돼지 객체의 특정행동 혹은 따르는 절차, 그에 맞는 돼지만의 방법,
    돼지라는 객체의 특정 목적을 위한 이용자적인 시야에서의 인간이나 돼지자체의 기능과 활동등으로 설명되며, 속성은 객체의 특징(feature)과 상태(state)를 말한다.
    돼지라는 객체가 가지고있는 특징으로 잡식성과 육류로의 다양한 활용, 상태로는 병듦, 배부름등 다양한 상태가 존재하고 그에 맞는 다양한 방식들을
    컴퓨터세계에 옮겨와 프로그래밍을 통하여 돼지라는 객체를 활용할 수있다. 활용하는 방법에서는 Class라는 객체를 정의하고 모델링하는 설계도가 존재한다면 그 설계도의 부품들을 객체 object로 볼 수 있다.

  2. Class
    Class는 다양하게 활용되는데 객체를 특정기능이나 요구에 맞도록 정의해놓은 틀 또는 설계도같은 의미로 활용되며 모든 객처들의 생산처로 볼 수 있다. 이 과정에서 추상화를 통한 객체 모델링이 이루어진다.
    클래스는 객체의 상태를 나타내는 필드(Field)와 객체의 행동을 나타내는 메소드로 구분된다. 메소드의 객체간 의사소통기능등을 활용해 실행하기위한 명령문이라는 의미로 활용할 수 있다.
    그러므로 객체간 서로 관련된 매개 변수들을 정의하고, 정의한 작업을 수행하는 함수등의 기능을 Class에 함께 정의하여
    변수와 함수들을 따로 작성하지 않고 원활하게 작성할 수 있도록 만들었으며, 변수를 매번 새로 선언하는 낭비와 불편함을 없게 한다.

  3. Abstraction 추상화
    알고는 있지만 정확하게 표현하기 힘든 것들을 중요한 부분이나 특징점을 잡아 설명하는데 이것을 '추상적으로 표현한다' 즉 '추상화한다' 라고 한다.
    프로그래밍에서 추상화를 하는 이유는 여러가지 장점이 있기 때문인데 첫째로 추상화를 통해 잘 설계했다면 여러개의 클래스를 정의했을 때, 중복 코드가 현저히 줄어든다.
    또한 코드가 간결해지기 때문에 생산성이 증가하게 되고 증가하는 프로그래머간 협업과정에서의 가독성 증가와, 에러 감소, 코드의 유지 보수시 시간 단축 등의 효과가 있다.
    잘 만들어진 슈퍼 클래스 덕분에 코드의 재사용성이 증가하고 일반화, 특수화, 상속등의 상황에서도 효과적인 이미지화로 객체의 특정범주를 정하기 용이해진다.

  4. Generalization 일반화 / Inheritance(상속)
    일반화는 기존의 객체들에 있어 공통적인 클래스 즉 성질들을 상위 객체로 정의하고, 특수화(specialization)된 객체들을 하위의 부분형(subtype) 객체로 정의한다.
    쉽게말하면 바나나, 사과, 딸기등의 공통적인 개념인 과일로 일반화하여 상위객체로 정의하고, 과일의 한 종류인 바나나, 사과, 딸기를 과일의 한 종류로 특수화한다.
    여러 개체들이 가진 공통특성을 부각시켜 하나의 개념이나 법칙으로 성립시키는 과정이라고 할 수 있다.
    이렇게 해서 얻을수있는 이점은 일일이 사과 바나나 딸기등을 기억하고있거나 새로운 과일의 한종류가 들어왔을때 추가해서 매번 추가되는 과일의 상황마다 같은 질문과 절차를 밟는게 아닌,
    과일이라는 범주를 정해놨으니 범주의 내에 있는 전체 과일을 다룰 수 있는 수단을 얻을 수 있다는 점이다. 프로그래밍적인 시각으로는 계속해서 코드를 수정하고 유연하게 대처하기 어려워진다는 난점을 해결할 수 있다.
    Inheritance 상속은 일반화와 유사하다. is a 혹은 has a 관계로 설명하는데 apple is a fruit, banana is a fruit, student is a person처럼 특정 객체가 상위범주에 포함되는 것이 반드시 참인 것을 말한다.
    따라서 상위객체가 지닌 메쏘드나 속성, 기능을 재사용, 활용할 수 있고 이를 상속으로 정의한다.
    허나 모든 사람이 학생이 아니고 모든 과일이 사과나 바나나가 아니듯, 코드를 짤때 하위범주에 속한것이 무조건 상위객체에 통용되는것은 아니므로 주의한다.

  5. 특수화(specialization)
    일반화와 개념과 같으나, 클래스를 보는 시점에 있어 상위의 클래스범위에서 하위의 클래스를 보는 관점이다.
    하위 개념으로 내려 갈수록 Instance 인스턴스(클래스의 정의를 통해서 만들어진 객체)는 더 개별적 특징이 도드라지며 특수화된다.
    클래스로 모델화되는 리얼월드 객체들을 겹치지 않는 서브 클래스로 나누거나 각자 다른 리얼월드의 상황으로 나누기 위해 사용한다.

  6. Realization
    실제화 혹은 현실화라고도 하며 리얼월드에서의 특정 행동을 디지털월드로 옮기거나 혹은 유사한 행동을 구현할때 이미 존재하고 있는 특정 객체의 행동에 대한 구현을 말한다.
    은행에 가서의 현금인출과 계좌이체등의 실질적으로 존재하는 행동을 인터넷뱅킹에서 몇가지의 버튼으로 본인인증과 금액지정등의 과정을 거치는 것으로 이해할 수 있다.

  7. 연관화(association)
    공통된 의미(semantic)를 서로 연관된 집단으로 표현하는 방법으로 링크(link)와 그 의미가 유사하다.
    객체들의 물리적, 또는 개념적 연결을 두 개 이상의 객체와 클래스로 표현 즉, 연관화는 관련되지 않은 클래스들간의 의미적 연결로 일반화, 특수화와 구분되는 특징이다.

  8. dependency
    다양한 클래스에서의 객체의 위치를 생각할 때, 변경이 되는 코드들은 함께 입력을 하고, 변경이 되지 않는 경우의 코드들은 별개로 입력을 하게 된다.
    특정 포인트에 초점을 맞추면 서로 의존하는 방향에 따라서 입력을 하게 되고 클라이언트의 요청을 받는 컨트롤러 객체, 비즈니스 상에서의 서비스객체등 종류별로 분류할 수 있는데, 이러한 객체들은 독립적으로 기능을 수행함이 아닌 서로 의존하여 응용프로그램 즉 application의 기능을 구현하게 되는데 이 성격을 dependency 의존성이라 한다.

  9. polymorphism(다형성) = 하나의 객체가 여러 가지 타입을 가질 수 있는 것을 의미한다. 학생 이현석, 개발자 이현석, 아들 이현석, 친구 이현석처럼 이현석이라는 한 객체는 다양한 성질을 가질 수 있다.
    따라서 객체지향 프로그래밍에서는 이현석이라는 부모클래스 타입 객체의 다형성을 활용하여 참조 변수로 자식 클래스 타입의 다른 타입의 이현석을 참조하도록 하여 구현하고 있다.

  10. Encapsulation 캡슐화
    Class의 내부변수와 메소드를 하나로 패키징 하는 캡슐화는 정보 은닉화와 높은 응집도, 낮은 결합도를 유지할 수 있도록 설계함을 말한다. 데이터와 코드의 형태를 외부로부터 알 수 없게 캡슐약의 내부를 자세히 알아 볼수 없지만 분명히 약의 효과가 존재하듯, 데이터의 구조와 역할, 기능을 하나의 캡슐 형태로 만든다.
    따라서 외부에서 특정 변화가 일어나더라도 다른 곳에 미치는 사이드 이펙트를 최소화시킬 수 있으며, 객체 내부의 어떤 동작에 대한 구현이 어떻게 되어 있는지 감추고, 아무나 캡슐을 열어볼 수 없게끔 하므로 보안에도 어느정도 역할을 맡는다.
    자바의 경우에 접근 제어자를 통해서 캡슐화 은닉화를 구현해 객체 내부의 상태와 동작의 접근방법을 강제할 수 있다.

12.28 리눅스 4일차

4일차
OS(운영체제) |DB(데이터베이스) |W-P(프로그램, 프로그램툴),| 웹서버
windows |ms-sql | .NET(프레임워크) | IIS
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
Unix |DB2, Oracle(공통) | jsp, php |apache2
|infomix, syabase | |
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
Linux |oracle, mysql, | jsp, php |apache2, nginx
|mariadb, ... | |
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

dpkg Debian Package
ps -ef | grep bash

^a* a로 시작하는 모든것
con$ con으로 끝나는것

kill -9 [해당 프로세스넘버] // 윈도우의 작업관리자의 프로세스 작업끝내기같은 느낌이다.

작업관리자는 top
service mysql start

1 alias np='nl /etc/passwd'
2 alias c='clear'
3 alias h='history'
4 alias lh='ls -Alh'
5 alias ai='apt -y install'
mkdir /home/kbs
chown kbs.kbs /home/kbs
chmod 700 /home/kbs

후에 만들고나서 cd로 바꿔주고나서 선택가능함

ls ~al ~mbc
ls -al ~mbc
useradd -D
ls -al /etc/skel //skel = 스켈레톤 = 뼈대
finger mbc
ai finger //finger 명령어는 리눅스 계정 정보를 확인할 수 있는 명령어
apt install finger
alias ai='apt -y install' alias로 설정
ai finger
cat -5 /etc/passwd
tail -5 /etc/passwd
chfn mbc
tail /etc/passwd

nl /etc/shadow

DAEMON = 1분대기조

nl /etc/passwd : 개인정보도 추가되잇음
그룹화 : 특정인원들을 그룹화해 권한부여하는등의 행위

groupadd BOOK BOOK이라는 그룹을 만듦
nl /etc/group
usermod -G BOOK
usermod -G BOOK
nl /etc/group 그룹은 뭐가있고 누가 그룹에 들어있는지 확인

mkdir /BOSS
ll로 확인하면
root가 만들고 주인인
chown 권한넘김
chmod 770 /BOSS

vi /etc/group으로 수정되는듯
안되는게없넹

d = 파일분류 링크수 주인 그룹 크기 접근날짜 파일명
drwxr-xr-x 2 root root 4096 12월 28 19:33 update-motd.d/
drwxr-xr-x 2 root root 4096 3월 30 2022 update-notifier/
r = 4(readonly)
w = 2(write)
x = 1(excute)

touch a1
cal > a2
mkdir
ll
CS 공부하긴 해야함
전공자는 졸업일
자격증소지자는 취득일기준으로 경력을 계산할 수도

/etc/fstab
/dev/disk/by-uuid/139deb54-8cda-4795-a115-ec3b99d45ab3 /home ext4 defaults,usrquota

1k - 1m제한
5m소프트용량 유예 6m하드용량 절대제한 유예기간동안은 6m이용가능하나 그이후에는 안됨
용량단위는 블럭단위
갯수로도 되기는하나 우리는 일단 용량으로만 해봄

drwxr-xr-x 2 root root 4096 12월 29 14:44 y1/
drwxr-xr-x 2 root root 4096 12월 29 14:44 y2/
drwxr-xr-x 2 root root 4096 12월 29 14:44 y3/
drwxr-xr-x 2 root root 4096 12월 29 14:44 y4/
root@c2:~/d4#
others권한 t는 다른사용자가 만든무언가를 지우거나 변경할수없다. 루트만 건드릴수있다. sticky bit개념
rwt는 보호해주는 용도
rws는? s가 set user id 라는 의미로 일시적으로 루트의 권한을 부여받았다는 느낌으로 이해
=권한위임
chmod 4755

it4 계정 비번변경
it4로 or root 로
passwd it4

권한 찾기

find / -perm -4000 -exec ls -al {} ;

lsattr

np 있어서 편하다
pwconv
pwunconv

service mysql start
enter
create database myDB;

show databases;
use mysql
desc user;
drop mysql

alter user 'root'@'localhost' identified with mysql_native_password by 'jjj';
create user myace@localhost identified by '1';
grant all privileges on aceDB.* to myace@localhost;
flush privileges;

useradd ace
passwd ace

mysql 비번 jjj로 바꿈
에러해결
root@c2:~# mysql

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
root@c2:# service mysql stop
root@c2:
# mysql
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
루트가 아니면 권한이 없다고 나온다.
mysql -u myace -p1
select user();
use mysql
create database aceDB;
use aceDB;
create table Man(name char(20), age, int);
desc Man;

mysql> use aceDB;
Database changed
mysql> show tables;
Empty set (0.00 sec)

mysql> create table Man(name char(20), age int);
Query OK, 0 rows affected (0.05 sec)

mysql> desc Man;
+-------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| name | char(20) | YES | | NULL | |
| age | int | YES | | NULL | |
+-------+----------+------+-----+---------+-------+
2 rows in set (0.02 sec)

mysql> insert into Man values("김정은", 20);
Query OK, 1 row affected (0.01 sec)

mysql> insert into Man values("문재인", 40);
Query OK, 1 row affected (0.00 sec)

mysql> select "문재인" from Man;
+-----------+
| 문재인 |
+-----------+
| 문재인 |
| 문재인 |
+-----------+
2 rows in set (0.00 sec)

mysql> select * from Man;
+-----------+------+
| name | age |
+-----------+------+
| 김정은 | 20 |
| 문재인 | 40 |
+-----------+------+
2 rows in set (0.00 sec)

1주차 금요일 MagicEcole특강

금요일 특강 요약
전체적인 강의 분위기는 현재 IT업계의 상황과 실황
과거의 사례를 통한 미래관측

프론트엔드는 바쁘다 소비자/클라이언트 접점으로 인해 기술 변화속도가 빠르며
미적/편의성을 중요시하여 일정기능에 대한 소모속도가 다른 분야에 비해 빨라 새로운 기술도 빨리 들어오는편

백엔드는 상대적으로는 덜 바쁜 영역에 속하고, 눈에 보이지않는 것에 주안점을 두고 이벤트예측(특정일에 몰리는 클라이언트, 돌발상황)에 무게가 실린다

개발 + 비즈니스 융합 DX시대

GPU < TPU

코파일럿
스테이블 디퓨전
티쳐블 머신

그런 발전을 통해서 어떤 시장을 개척할수 있는가?
데이터댐
ai hub
근거중심에서 측정중심의 사회로 나아가고 있다.

막 들어온 신입이라면 연봉에 구애받지말고 당장 다음주에 무엇을 할지를 생각해라

디지털뉴딜시대
애플
사물인터넷 matter
web 3.0시대

이노베이션 아카데미의 러닝피라미드
모르는사람에게 자신이 아는것을 가르칠때 90퍼센트가량의 효율이 나온다.
열심히해서 성공해라

https://www.youtube.com/watch?v=IfmwwxRHBhg&ab_channel=%EC%9D%B4%EB%85%B8%EB%B2%A0%EC%9D%B4%EC%85%98%EC%95%84%EC%B9%B4%EB%8D%B0%EB%AF%B8
등 매직에꼴 최재규대표님 다른 강좌 한번 찾아보자

3-6 javascript, html and css lets go, ~ 3-8

=== 값이 일치함.
= color를 바꿔줌.

element의 style을 JS에서 변경하는걸 선호하지 않는다. 왜냐면 다른 언어들을 섞는 걸 선호하지 않기 때문이다. JS를 상호작용을 만들어 내는데 적합하다고 생각하고, HTML은 다른 선택사항이 없고, CSS는 JS파일에서도 할 수 있지만 sytle은 CSS에서 하는걸 선호한다.

step1. element를 찾아라.
step2. event를 listen해라.
step3. 그 event에 반응해라.

style에 적합한 도구는 CSS
animation에 적합한 도구는 JS
css파일에
h1 {
color: cornflowerblue;
}
.clicked {
color: tomato;
}
를 적고
js에서는 h1에 active class를 전달하는거다.
const h1 = document.querySelector("div.hello:first-child h1");
function handleTitleClick() {
if(h1.className === "clicked") {
h1.className = "";
} else {
h1.className = "clicked";
}
}
h1.addEventListener("click", handleTitleClick);
여기서 JS는 HTML을 변경할거고, CSS는 HTML을 바라보고 style을 변경한다.
근데 조금 문제가 있는 active는 우리가 지어준 이름이다. raw value라고 하는데, 이름을 바꾸다가 에러가 발생할 수도 있다. const로 지정해라.
function handleTitleClick() {
const clickedClass = "clicked";
if(h1.className === clickedClass) {
h1.className = "";
} else {
h1.className = clickedClass;
}
}
이렇게 작성하면 에러가 발생할 수 있는 부분을 축소한다.

그런데, html의 h1에 sexy-font라는 class name이 있었는데 js를 실행하니 교체되었다.
최초의 class name이 사라졌고.., sexy-font라는 class name을 간직하고 싶은데 이건 어떻게 해야하는가.
const clickedClass = "clicked sexy-font";에 추가하면 되긴 하는데 좋은 방법은 아니다. class를 추가할 때마다 js랑 css에서 업데이트를 계속 해야하니까.
우리가 해야하는건 js로 모든 class name을 변경하지 않는거다. 이 sexy-font를 삭제하지 않고 clicked class를 변경하고 싶다는거지

classList 우리가 class들의 목록으로 작업할수 있게끔 허용해준다.
className은 이전calss를 상관하지않고 모든걸 교체해 버린다.

classList를 이용하는건
js에서 건드리는건 HTML element가 가지고있는 또하나의 요소 사용하는 것이다.
= element의 class내용물을 조작하는 것을 허용한다는 뜻

contains은 우리가 명시한 class가 HTML element의 class에 포함되어 있는지 말해준다

toggle은 토큰이 존재하면 토큰제거
토큰존재 하지않으면 토큰 추가

ex)
toggle은 h1의 classList에 clicked class가 이미있는지 확인하여
만약있다면 toggle 이 clicked를 제거해준다
만약 class name이 존재하지 않는다면 toggle은 classname 추가해줌
이미 있는지 확인후 행동이 바뀌는 간단한 스위치느낌 = 있으면 제거 없으면 추가 꺼지면키고 키면 끄는 버튼 in 스맛폰

java 12.22

6
package day02;
/* 제어문 (Control Statement)
특정 코드 혹은 코드의 집합의 실행여부, 반복여부를 결정짓는 특수한 코드들이다.
제어문에는 조건문, 반복문이 있다.
조건문 특정조건을 만족시키면 코드실행
if, switch문이 있다.
반복문 특정조건을 만족하는동안 코드를 실행
while문과 for문이 있다.
switch를 제외한 각 제어문들은 "조건식"을 통해서 코드를 제어하게 된다.

조건식!이란 결과값이 true / false의 boolean 타입이 나오는 모든 코드를 조건식이라고 한다.

코드 블락 block 한개의 {중괄호} 사이를 코드블록이라고 한다.
제어문의 경우, 해당 제어문과 연결된 코드 블락의 실행/반복 여부를 결정하게 된다.
또한 변수의 유효범위 또한 코드 블락과 연결된다.

변수의 유효범위(Scope)란 해당 변수를 어디까지 호출할 수 있는지를 뜻하는 범위이다.
또한 해당 변수가 유효한 범위 안에서는 똑같은 이름의 변수는 선언할 수 없다.
변수의 유효범위는 해당 변수가 선언된 후부터, 그 변수가 속한 코드 블락이 끝나기 전까지이다.

조건문 01
if문이란 특정 조건식이 true가 나오면 연결된 코드 블락을 실행시키는 조건문이다.
if문은 다음과 같은 구조를 가진다.
if(조건식) { 띄어쓰기에 유의해야함
조건식이 true일때 실행할 코드들
}
들여쓰기 체크 = ctrl + shift + F / 단 코드가 에러가없어야함.
*/

public class Ex06If01 {

public static void main(String[] args) {
	int number = -3;
	if (number > 0) {
		String message = "양의 정수입니다.";
		System.out.println(message);
	}
	// 만약 number가 0보다 크면 양의 정수입니다, 가 출력되게 코드를 만들어보자

// System.out.println("프로그램 종료");

}

}

package day02;
/*조건문 01

  • if문 if else구조에서는 if문의 조건식이 true이면 if문에 연결된 코드블락이 실행되고
  • if문의 조건식이 false이면 else에 연결된 코드 블락이 실행되는 구조이다.
  • 당연히 else만 단독으로 올 수 없고, 또한 두개의 코드블락을 모두 실행시킬수도없다!
  • if else구조는 다음과 같이 되어있다.
  • if (조건식){
    조건식의 참일때 실행할 코드블락
    } else {
    조건식이 거짓일때 실행할 코드블락
    }
    */
    public class Ex07IfElse {
    public static void main(String[] args) {
    int number = 3;
    if(number>0) {
    System.out.println("number는 양의 정수입니다.");
    } else {
    System.out.println("number는 0이하입니다.");
    }
    }
    }

8
package day02;
/* 조건문 01
if문 03
if - elseIf구조
if else if 구조는 첫번째 조건식이 false가 나왓을때 다른 조건식을 체크하여 다음 코드블락실행여부를 결정하게됨
당연히 필요에 따라서는 우리가 필요한 갯수만큼의 else if 코드블락을 적어줄수있다.
그리고 최종적으로 if부터 else if까지의 모든 조건식이 false 가 나왔을 때를 대비하여
가장 마지막에 else 코드 블락도 만들어 줄 수 있다
단, else 코드 블락 이후에는 다른 else if 코드 블락이 들어올 수 없다. else 는 마지막이 되어야한다.
*/

public class Ex08IfElseIf {
public static void main(String[] args){
int number = 5;
String message;
if (number > 0 ){
System.out.println("양의 정수입니다.");
} else if(number == 0){
System.out.println("0입니다.");
} else {
System.out.println("음의 정수입니다.");
}

}

}

package day02;
//사용자로부터 나이를 입력받아서 5세미만 영유아, 13세이하 어린이 18세이하 청소년 19세이상 성인 이 출력되는 프로그램을 작성해보세용

import java.util.Scanner;
public class Ex09AgeCHecker {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("귀하의 나이를 입력해주세요.");
System.out.print("> ");
int age = scanner.nextInt();
if (age < 5) {
System.out.println("영유아입니다.");
} else if (age <= 13 ) {
System.out.println("어린이입니다.");
} else if (age <= 18 ) {
System.out.println("청소년입니다.");
} else if (age >= 19 ) {
System.out.println("성인입니다.");
} else {
System.out.println("숫자를 써주세요.");
}
scanner.close();
}
}

10
package day02;

import java.util.Scanner;
public class Ex10GradeChecker {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("귀하의 나이를 입력해주세요.");
System.out.print("> ");
int age = scanner.nextInt();
if (age < 5) {
System.out.println("영유아입니다.");
} else if (age <= 13 ) {
System.out.println("어린이입니다.");
} else if (age <= 18 ) {
System.out.println("청소년입니다.");
} else if (age >= 19 ) {
System.out.println("성인입니다.");
} else {
System.out.println("숫자를 써주세요.");
}
scanner.close();
}
}

package day02;
/*사용자로부터 키, 몸무게, 이름을 입력받아서
BMI값과 비만도를 출력하는 프로그램을 작성하시오.
BMI 계산 공식: 몸무게 kg / 키 m단위 / 키m단위
비만도 기준치
~19.5: 저체중
23 미만: 정상체중
25 미만: 과체중
25이상 : 비만
출력 양식
이름: [###] 키: [#.##]M 몸무게: [##.##]kg
BMI: [##.##] 비만도: [###]
*/
import java.util.Scanner;
public class Ex11BmiChecker {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("귀하의 키를 입력해주세요.");
System.out.print("> ");
double height = scanner.nextDouble();

    System.out.println("귀하의 몸무게를 입력해주세요.");
    System.out.print("> ");
    double weight = scanner.nextDouble();

    System.out.println("성함을 입력해주세요.");
    System.out.print("> ");
    scanner.nextLine();
    String name = scanner.nextLine();

    double bmi = weight / height / height;

    if (bmi < 19.5) {
        System.out.println("저체중");
    } else if (bmi < 23 ) {
        System.out.println("정상체중");
    } else if (bmi < 25 ) {
        System.out.println("과체중");
    } else if (bmi > 25 ) {
        System.out.println("비만");
    } else {
        System.out.println("숫자를 써주세요.");
    }
    System.out.printf("이름: [%s] 키: [%4.2f] 몸무게: [%5.2f]\n", name, height, weight);
    System.out.printf("BMI [%05f점] 비만도: [%s]\n", bmi);

    scanner.close();
}

}

import java.util.Scanner;
public class Ex11BmiChecker {
public static void main(String[] args) {
final int HEIGHTINMETER = 100;
Scanner scanner = new Scanner(System.in);
System.out.println("귀하의 키를 입력해주세요.");
System.out.print("> ");
double height = scanner.nextDouble();

    System.out.println("귀하의 몸무게를 입력해주세요.");
    System.out.print("> ");
    double weight = scanner.nextDouble();

    System.out.println("성함을 입력해주세요.");
    System.out.print("> ");
    scanner.nextLine();
    String name = scanner.nextLine();

    double bmi = weight / (height / HEIGHTINMETER ) / (height / HEIGHTINMETER );

    if (bmi < 19.5) {
        System.out.println("저체중");
        String obesity = "저체중";
    } else if (bmi < 23 ) {
        System.out.println("정상체중");
        String obesity = "정상체중";
    } else if (bmi < 25 ) {
        System.out.println("과체중");
        String obesity = "과체중";
    } else if (bmi > 25 ) {
        System.out.println("비만");
        String obesity = "비만";
    } else {
        System.out.println("숫자를 써주세요.");
    }
    System.out.println(obesity);
    String obesity = scanner.nextLine();
    System.out.printf("이름: [%s] 키: [%4.2f] 몸무게: [%5.2f]\n", name, height, weight);
    System.out.printf("BMI [%05.2f점] 비만도: [%s]\n", bmi, obesity);

    scanner.close();
}

}

@@@@@@@@최종 최종
package day03;
//사용자로부터 키 몸무게 이름 순으로 입력받아서
//BMI와 비만도를 예쁘게 출력하는 프로그램을 작성하시오
//기네스북에 따른 가장 키큰사람은 2.72미터
//기네스에 가장 무거운사람 635kg
//만약 사용자가 잘못된 값을 입력하면 추가적 입력없이 잘못된값이 입력되어 프로그램을
//종료합니다. 만 출력되게 코드작성
import java.util.Scanner;
public class Ex06BmiChecker02 {
public static void main(String[] args) {
final int HEIGHTINMETER = 100;
Scanner scanner = new Scanner(System.in);
System.out.println("귀하의 키를 입력해주세요.");
System.out.print("> ");
double height = scanner.nextDouble();
if (height >272){
System.out.println("잘못된 값이 입력되어 프로그램을 종료합니다");
} else {
System.out.println("귀하의 몸무게를 입력해주세요.");
System.out.print("> ");
double weight = scanner.nextDouble();
if (weight>635) {
System.out.println("잘못된 값이 입력되어 프로그램을 종료합니다");
} else {
System.out.println("성함을 입력해주세요.");
System.out.print("> ");
scanner.nextLine();
String name = scanner.nextLine();

            double bmi = weight / (height/HEIGHTINMETER) / (height/HEIGHTINMETER);
            String obesity = "";
            if(bmi < 19.5){
                obesity = "저체중";
            } else if (bmi < 23){
                obesity = "정상체중";
            } else if (bmi < 25){
                obesity = "과체중";
            }   else {
                obesity = "비만";
            }
            System.out.printf("이름: [%s] 키: [%.2f]M 몸무게: [%.2f]kg\n", name, height, weight);
            System.out.printf("BMI: [%.2f] 비만도: [%s]\n", bmi, obesity);

            scanner.close();
        }
    }
        }

}

4-1~ 4-4

div-> form 으로 바꾼 이유가 여기서 드러난다.

  1. 를 으로 바꾸지 않아도 의 maxlength 는 html 에서 도와주지만, 'required'라는 browser 의 기능을 쓸수없다 (코코아 클론코딩 참고)
  2. 으로 바꾸면, 엔터키를 누르건 버튼을 누르건 (의 기본값이 submit.) 무조건 'submit' 이 일어남.
    근거: console.log(loginInput.value) 가 실행이 안됨 + browser 가 새로고침을 한다.
  3. 우리의 목적: user's input 을 submit 했을때 그 value 를 당장 쓰고 싶다. (새로고침을 멈춘다)

function onLoginSubmit(event){
event.preventDefault(); // 브라우저가 기본 동작을 실행하지 못하게 막기 // event object는 preventDefault함수를 기본적으로 갖고 있음
console.log(event);
}

loginForm.addEventListener("submit", onLoginSubmit); // submit 이벤트가 발생한다면, onLoginSubmit함수를 실행시킨다는 의미 // JS는 onLoginSubmit함수 호출시 인자를 담아서 호출함. 해당 인자는 event object를 담은 정보들

★ 중요 ★
form을 submit하면 브라우저는 기본적으로 페이지를 새로고침 하도록 되어있다. << 우리가 원하는 것이 아님!
preventDefault() 함수를 추가함으로써 브라우저의 기본 동작을 막을 수 있다!!

이 preventDefault 함수는 EventListener 함수의 '첫 번째 argument' 안에 있는 함수이다. 첫 arument는 지금 막 벌어진 event들에 대한 정보를 갖고 있다.
JS는(기본적으로)argument를 담아서 함수를 호출하는데, 이 argument가 기본 정보들을 제공하고 있다. ex) 누가 submit주체인지, 몇 시에 submit을 했는지 등등 콘솔에 출력해보면 알 수 있음

4-3
addEventListener 안에 있는 함수는 직접 실행하지 않는다
브라우저가 실행시켜주고
브라우저에서 해당 이벤트에 대한 정보 즉, object를 가지게 된다.
addEventListener의 함수에서 object에 대한 자리만 할당해주면
해당 이벤트가 발생시킨 정보들에 대한 object들을 볼 수 있다!
이때 해당 이벤트가 가진 기본 Default값을 발생시키지 않기 하게 위해선 preventDefault를 이용하여 막을 수 있다!
4-4
const HIDDEN_CLASSNAME = 'hidden';
관습: string만 포함된 변수는 대문자로 쓴다 + 중요한 변수가 아니라 서.

'hello!' + username + nice to meet you!; 는
hello ${username} nice to meet you ; 와 같으며 후자의 방법 사용하자.

HTML의 어느 한 부분을 잡고 거기에 class 를 추가하거나 빼고 싶을 때는
classList.add.('classname')
classList.remove.('classname') 를 사용한다. 클래스를 마음대로 붙였다 뗄 수 있게 해준다. 위에서는 display:none;이 되어 있기 때문에 해당 html 태그(?)를 hide or show 할 수 있다.

이 강의에서 한 것.

  1. 클릭하면, 자동으로 새로고침 되어 정보가 날아가는 것을 막고(preventDefault();)
  2. loginForm을 감추고(hidden)
  3. hidden 됐던 A 문구가 나타나고(remove hidden)
  4. A 문구와 username을 합쳐서 완전한 문구를 완성한다.

1227 리눅스 day02

2일차 1교시
경로
/home/j14

ls

esc = normal mode
ioa = insert mode a i o
with mouse = visual mode
exmode = esc + .
34p 참고

hostname
j
[j14@j:$ uname
Linux
[j14@j:
$ uname -r
5.19.0-26-generic
[j14@j:~$ who
who | sort | nl

day 2
cd d2
cp /etc/wgetrc t

vi t
:% s/#//g 앞의 #을 공백으로 놔달라는 뜻
g = global
:% 문서전체
s = substitute(대체 바꾸다)

= 특정문자 지정

// = 공백의미
dd = 잘라내기
p = paste 붙여넣기
yy = 복사하기
##dd = 해당(##)줄만큼 잘라내기
u = undo 실행취소

:se nu => 넘버켜줘
:se nonu => 넘버지워줘
:## ->## 넘버 줄로 이동
:##p 그만큼 복사

해당넘버이동후 yy누르고 p 시 1줄씩 복사해줌

dw = 딜리트워드
yw = 복사

xp 잘라서 뒤에 붙여넣기 이므로 앞뒤바뀜
35p참고

대소문자변경 ~(출렁이);

J 줄합침 : (공백하나두고)

@@@@@@@@@@@@@@@@@@@2일차 2교시
ed -> ex -> vi -> vim
(라인에디터 당시 1줄씩)
i a o O 맨첫줄공백만들고 입력모드

[[맨첫줄//]]맨끝줄
ctrl r = redo
ctrl f
ctrl b
ctrl d
ctrl u 넘어간다.
:3,10 s/aa/AA
3~10줄에있는 aa를 AA로 바꿔줘
+g
:3,10 s/aa/AA/g
여러번 aa가나와도 다 AA로 바꿔줘

:1,$ s/aa/AA
1부터 끝($)까지 aa를 AA로 바꿔줘
sd d[[
18 You can use this file to change the default behaviour of wget or to
19 avoid having to type many many command-line options. This file does
20 not contain a comprehensive list of commands -- look at the manual
21 to find out what you can put into this file. You can find this here:
22 Or online here:
23 https://www.gnu.org/software/wget/manual/wget.htmlStartup-File
24
25 Wget initialization file can reside in /etc/wgetrc
26 (global, for all users) or $HOME/.wgetrc (for a single user).
27
-- VISUAL BLOCK --
서울 강남 역삼동
삼성
역삼
선릉

서울 강남 역삼동 -> 메모장
삼성
역삼
선릉
auto indent -> notepad++의 강력한 기능
in vi
:se ai set auto indent[
:w k2 k2로저장해줭
:saveas ## ##로 저장해줭(지금꺼 읎어짐)
:w ## ##으로 저장하고 여기에도잇음

:20, 50 w k3

비주얼모드
:set mouse=a 마우스설정
:set mouse=r 설정해제

vimtutor = 커맨드설명

@@@@@@@@@@@@@2일차 3교시@@@@@@@@@@@@@@@@

a=100

echo $SHELL

nl /etc/shells

sh
ksh = AIX IBM,UNIX HP-UX, SUN-Solaris
csh = 보기힘듬
bash = 리눅스채택 가장강력함
zsh

aa
프로그래밍되잇어 고치기어려운 프로그램을
펌웨어firmware -> os없다
os는 고치거나 변형하거나 유지보수가가능하다.

	 (bash)

kernal < shell < app
(os) (error)

| nl = > 몇줄인지 알랴줌

(파이프)

NA = ##
export YOU
you = 전역
NA 지역
export 로 변수를 선언하면
하위디렉토리에도 적용이 됨 (수출됨)

alt + . 햇던명령다시
. .profile = source .profile
주소는 가변한다
복사나 링크참조에 따라서

하드링크
소프트링크

리눅스에서 쉘스크립트를 윈도우의 bat처럼 간단하게? 만들수있다

c = 캐릭터
b = block
51p 상단

ELF= EXE
nl k.c
#include <stdio.h>
main()

k라는파일 실행
./k

하드링크? == 레퍼런스변수(참조형) 데이터 이동의 필요 x, 복사x, 비용최적 ex원본의 사본 (파일만 가능)
소프트링크 = 심볼릭링크 ex바로가기아이콘
-> =

ftp

? + enter 하면 사용가능커맨드나옴
cp /etc/se
cp /etc/services k
alias lh='ls -Alh'
lh 하면
리눅스내부에서 압축하고 풀기
기능에따라 확장자입력이 필요한경우있음
gzip k
gunzip k

xz k
lh
unxz k

파일정보를 용량보기편하게 수정해서 보는 기능

파일목록 도식화 보기 tree -d

tar cfz m.tar.gz /etc/mysql
ll
lhtar xfz m.tar.gz

ls
ls etc/mysql
ls etc/mysql/

cp -r /etc/mail .

etc폴더안에 mail폴더를 내부디렉토리까지 복사하고 현재 내 최상위폴더 .에
cp -r /etc/mail . 2>/dev/null 오류메시지치우는 용도
ls 상태확인
tar cfz e.tar.gz /etc/mail
ls
tar cfz e.tar.gz
tar cfz e.tar.gz mail/
tree -d
ls

sudo service ssh start
ps -ef | grep ssh
sudo service ssh start
sudo useradd jj -m -d /home/jj -s /bin/bash

우분투 메뉴보이기
호스트키 + home

bitcamp 자바 기초특강 day01 22.12.21

첫번째시간 = 컴퓨터 프로그래밍 역사
두번째시간 = 이클립스실행 & 주석처리와 sout을 이용한 입력방식배우기
컨트롤 쉬프트 s = 모든파일 동시저장

  • 자바 명명규칙 = Naming Convention
    자바에서 각종 이름(객체명?)을 만들 때에는 여러가지 규칙을 지켜주는 것을 권장한다.
  1. 공통규칙
    1-a. 자바는 대소문자를 엄격하게 구분한다.
    1-A. 이름에는 _를 제외한 특수문자는 사용할 수 없다.
    1-B. 이름의 중간이나 끝에 숫자가 올수 있지만 숫자로 이름을 시작할수는 없다.
    1-C. 자바에서는 내부적으로 사용하는 50개의 중요한 단어들이 있다.
    해당 단어들로는 이름을 지어줄 수 없다.
    이클립스에서는 이런 중요 단어들이 자주색으로 표시가 된다.(다크모드는 주황색인듯)
    만약 여러분들이 지은 이름이 자주색으로 표시 되면 변형을 하거나 동의어를 사용하면 됩니다!

  2. 낙타등 표기법과 뱀 표기법
    2-A 낙타등 표기법(Camel Back Notation)이란 어떠한 이름이 여러 단어로 이루어져 있을 경우,
    2번째 단어부터는 각 단어의 첫글자를 대문자로 적어서, 단어간의 구분을 쉽게하는
    표기법이다.
    2-B 뱀 표기법(Snake Notation)
    만약 모든 글자를 대문자로 적어야 하는 경우, 단어간의 구분을 위해서
    단어사이에 _를 넣는 표기법이다.

  3. 각종 개념에 대한 명명규칙
    3-A. 클래스
    클래스는 대문자로 시작하고 낙타등 표기법을 사용하는 명사로 이름을 지어준다.
    3-B. 패키지.
    패키지는 소무자로 시작하고 해당 패키지 안에 들어간 클래스들의 종류를 설명하는
    한단어의 명사로 이름을 지어준다.
    3-C. 메소드.
    메소드는 소문자로 시작하고 낙타등 표기법을 사용하는 "동사"로 이름을 지어준다.ex.println
    메소드의 경우, 프로그래밍의 규칙상 반드시 이름 뒤에 ()가 붙는다.
    3-D. 변수.
    변수는 소문자로 시작하고 낙타등 표기법을 사용하는 "명사"로 이름을 지어준다.
    MemberController = 클래스 memberclass = 변수
    3-E. 상수.
    상수는 뱀 표기법을 사용하는 명사로 이름을 지어준다.

  4. how to use 변수
    package day01;
    /* 변수(Variable)

  • 변수란, 값을 여러번 덮어 씌울 수 있는 저장공간을 뜻한다.

  • 변수는 우리가 사용하기 위해서는 선언과 초기화 라는 과정을 거쳐야 한다.

  • 선언: 해당 변수가 어떤 종류의 값을 저장할 수 있고, 해당 공간의 이름이 무엇인지를

  • 지정하는 코드.

  • 선언은 다음과 같은 코드로 이루어진다

  • 데이터타입 변수명;

  • 데이터 타입: 해당 공간에 저장할 값의 종류

  • 변수명: 소문자로 시작하고 낙타등 표기법을 사용하는 명사

  • 초기화: 변수를 선언하고 나서 값을 처음 저장하는 것.

  • 초기화는 다음과 같은 코드로 이루어진다.

  • 변수명 = 값;

  • 저장하지않으면 무엇인지 대화가 안통하므로 실행안됨
    */
    public class Ex04Variable {

    public static void main(String[] args) {
    // int 데이터타입의 변수 number를 선언해보자
    int number; //노란줄은 경고(옐로카드)같은것으로 실행은 가능함 빨간줄은 컴파일 자체가 안됨
    //변수 number에 10을 저장해보자
    number = 10;
    // number 에 현재 저장된 값을 화면에 출력해보자
    System.out.println(number);
    //변수 number에 25를 저장해보자
    number = 25;
    // number에 현재 저장된 값을 화면에 출력해보자
    System.out.println(number);
    }

}
// 상수(Constant)
/* 상수란 한번 값을 저장하고 나서는

  • 값을 새로 저장할 수 없는 공간을 상수라고 한다.
  • 상수도 변수처럼 선언과 초기화를 거쳐야 한다.
  • 상수의 선언 방법:
  • final 데이터타입 상수이름;
  • 상수의 초기화 방법;
  • 상수이름 = 값;
    */

public class Ex05Constant {

public static void main(String[] args) {
	// int 데이터타입 상수 NUMBER를 선언해보자
	final int NUMBER;
	// NUMBER에 5를 저장해보자
	NUMBER = 5;
	// 출력해보자
	System.out.println(NUMBER);
	// 변환시도해보자

// NUMBER = 123;
// System.out.println(NUMBER); //안된다.
// NUMBER = 5; 같은값 재지정도 안된다
// 컴퓨터는 값을 저장할 때 기존 값과 같다고 해서
// 저장을 하지 않는다 라는것을 하지않는다.
}
}

/* 자료형(Data Type)

  • 자료형이란 해당 공간에 저장될 값의 종류를 뜻한다.
  • 자료형에는 크게 기본형과 참조형 2가지 종류가 있다.
  • 기본형 데이터타입(Primitive Types)
  • 기본형 데이터타입은 우리가 저장할 값을 2진법으로 변환하여
  • 해당 공간에 직접 저장을 한다.
  • 기본형 데이터 타입에는 정수형, 실수형, 문자형, 논리형 4가지 종류가 있고
  • 정수형에는 byte, short, int, long
  • 실수형에는 float 32bit, double 64bit
  • 문자형에는 char 캐릭터 쓸일 없음
  • 논리형에는 boolean = true false
  • 총 8가지가 있다.
  • 참조형 데이터타입(Reference Type)
  • 참조형 데이터타입은 실제 값은 별개의 공간에 저장이 되고
  • 변수/상수 공간에는 실제 값이 저장된 공간의 주소값만 저장이 되서
  • 우리가 실제 값을 확인하기 위해서는 저장된 주소값을 '참조'해서 별개의 공간을
  • 확인하는 데이터타입이 된다.
  • 참조형 데이터타입에는 클래스형, 인터페이스형, 배열형 3가지가 있다.
  • 일종의 주석
    */

/* 기본형 데이터 타입

  • 예전에는 컴퓨터의 리소스(저장공간과 RAM, CPU 연산등)가 제한적이었기 때문에

  • 변수/상수의 데이터타입을 결정할때, 해당 공간이 다룰 값의 범위에 맞처서

  • 필요한 만큼의 데이터타입을 써주는 것이 중요하였지만

  • 이제는 리소스가 매우 풍부하기 때문에

  • 굳이 데이터타입을 정확히 맞춰줄 필요가 없다.

  • 기본적으로 정수는 +-20억 내외면 int를 그 이상은 long을,

  • 실수는 double을

  • 한번에 하나의 글자만 저장 가능한 char는 아예 사용을 하지 않고,

  • boolean 데이터타입은 제어문이라는 곳에서만 사용이 된다.
    // 형변환(Type Casting)
    /* 형 변환이란, 특정 데이터타입의 값을 다른 데이터타입의 값으로 변환하는 것을

  • 형변환이라고 한다!

  • 형 변환에는 암시적 형변환과 명시적 형변환이 있다.

  • 암시적 형변환(Implicit Type Casting)

  • 암시적 형변환은 우리가 별도의 코드를 적지 않더라도

  • 특정 데이터 타입으로 값의 종류가 변환되는 것을 뜻한다.

  • 암시적 형변환은 데이터손실의 가능성이 없을 때에만 가능하다.

  • 대표적으로 더 작은 데이터타입의 값을 더 큰 데이터타입으로 변환하거나

  • 정수형값을 실수형값으로 변환할 때는 암시적 형변환이 발생된다. 3 => 3.0

  • 명시적 형변환(Explicit Type Casting): 암시적 형변환과 반대

  • 명시적 형변환은 우리가 별도로 코드를 적어야

  • 특정 데이터타입으로 값의 종류가 변환되는 것을 뜻한다.

  • 명시적 형변환은 데이터 손실이 발생할 수 있다면 반드시 명시적 형변환을 해야 한다.

  • 대표적으로 더 큰 데이터타입의 값을 더 작은 데이터타입으로 변환하거나

  • 실수형 값을 정수형값으로 변환할 때는 명시적 형변환이 요구된다. 3.0 => 3

  • 명시적 형변환은

  • (바꿀 데이터타입)값; 으로 코드를 적어주어야 발생된다.
    */
    -08
    public class Ex08TypeCasting {

    public static void main(String[] args) {
    // 암시적 형변환
    // byte 데이터타입의 변수 myByte 선언하고 5로 초기화해보자.
    byte myByte = 5; //0000 0101
    //int 데이터타입의 변수 myInt를 선언하고 myByte의 현재값으로 초기화해보자
    int myInt = myByte; //0000 0000 0000 0000 0000 0000 0000 0101
    // double 데이터타입의 변수 myDouble을 선언하고 myInt의 현재값으로 초기화해보자
    double myDouble = myInt;
    //myByte, myInt, myDouble 현재값을 출력해보자
    System.out.println(myByte); // 2진법기준으론 비트수가 다르므로 다른 숫자라고 인식한다
    System.out.println(myInt); // 5, 5 로 같아보인다.
    System.out.println(myDouble);

// 명시적 형변환
// myByte에 myInt의 현재 값을 저장해보자
myByte = (byte)myInt;
//값이크므로 줄이는 절차를 밟아야 실행됨
//myInt에 myDouble의 현재 값을 저장해보자
myInt = (int)myDouble;
//int 는 정수, float 는 실수
}

09
/*연산자(operator)란 수학적 기호에 프로그래밍적 기능을 정의해서

  • 해당 기호를 적어주면 특정기능이 실행되는 특수한 기호들을 뜻한다.

  • == && 같은거 배우나봄 ==의 경우 왼쪽것을 오른쪽에 저장해줘같은 기능이다.

  • 연산자에는 산술, 할당, 비교, 논리, 비트 5가지 연산자가 있다.

  • 비트연산은 안배움(난도높음 잘안씀 < 자바기준, 속도가 중요한분야 ex. 네트워크, 이미지처리)

  • 산술 연산자란 2가지의 값에대한 +, -, *, /, %연산을 한다

  • +: 왼쪽값에서 오른쪽값 더한 결과값

  • -: 왼쪽값에서 오른쪽값 뺀 결과값

  • *: 왼쪽값에서 오른쪽값을 곱한 결과값
    /: 왼쪽값에서 오른쪽값 나눈 몫을 구함
    %: 왼쪽값 오른쪽값 나누고 남은 나머지
    산술연산의 경우 더 작은 데이터 타입과 더 큰 데이터 타입을 연산하면
    결과값은 더 큰 데이터타입이 된다.
    정수형과 실수형을 연산하면 결과값은 실수형이 된다. 3 < 3.0 /// byte < int < double 순
    */
    public class Ex09Operator01 {

    public static void main(String[] args) {
    // 정수형 끼리의 산술연산
    int myNum1 = 5;
    int myNum2 = 7;
    System.out.println(myNum1 + myNum2);
    System.out.println(myNum1 - myNum2);
    System.out.println(myNum1 * myNum2);
    System.out.println(myNum1 / myNum2);
    System.out.println(myNum1 % myNum2);

// 정수형과 실수형의 연산
double myDouble = 7.0;
System.out.println(myNum1 + myDouble);
System.out.println(myNum1 - myDouble);
System.out.println(myNum1 * myDouble);
System.out.println(myNum1 / myDouble);
System.out.println(myNum1 % myDouble);
/* string
string은 한번에 여러개의 문자를 처리하는 데이터타입으로써,
흔히 "문자열"이라고 부른다.
string에 여러개의 문자를 저장할 때에는 문자들을 ""로 감싸서 저장한다.
string타입의 변수 mySring에 abc라는 글자 3개를 저장해보자
*/
String myString = "abc";
// 화면에 myString의 현재값을 출력해보자
System.out.println(myString);
// string의 경우 더하기 연산이 가능하다! 2+3 = 23처럼 연결해서만!
System.out.println(myString+"123");
// abc123으로 출력된다!
// myString + 숫자 123?
System.out.println(myString+123);
// 같은 결과값
// 다음중 결과가 다른것은?
System.out.println(123+456);
System.out.println((int)123.0+456);
System.out.println((int)123.0+456.0);
System.out.println("123"+456);
}

}
10.
/* 연산자02
할당 연산자
할당 연산자는 오른쪽의 값을 연산한 결과값을 왼쪽 공간에 저장한다. 우변의값을 좌변의변수에 대입
=: 오른쪽 값을 왼쪽 공간에 저장해라
+=: 왼쪽 공간의 현재 값에 오른쪽 값을 더한 결과값을 다시 왼쪽 공간에 저장해라
-=:왼쪽 공간의 현재 값에 오른쪽 값을 뺀 결과값을 다시 왼쪽 공간에 저장해라
*=:왼쪽 공간의 현재 값에 오른쪽 값을 곱한 결과값을 다시 왼쪽 공간에 저장해라
/=:왼쪽 공간의 현재 값에 오른쪽 값을 나눈 몫을 다시 왼쪽 공간에 저장해라
%=:왼쪽 공간의 현재 값에 오른쪽 값을 나눈 나머지를 다시 왼쪽 공간에 저장해라
*/
public class Ex10Operator02 {

public static void main(String[] args) {
	//1. = 오른쪽값을! 왼쪽int에 저장해라!
	int myInt = 4;
	System.out.println("myInt의 현재 값: " + myInt);
	//2. += 7; 4+7
	myInt += 7;
	System.out.println("myInt의 현재 값: " + myInt );
	//3. -= 2; 11-2
	myInt -= 2;
	System.out.println("myInt의 현재 값: " + myInt );
	//4. *= 9*4= 36
	myInt *= 4;
	System.out.println("myInt의 현재 값: " + myInt);
	//5. /= 36 / 6 = 6 
	myInt /= 6;
	System.out.println("myInt의 현재 값: " + myInt);
	//6. %= 6을 4로 나누고 나머지인 = 2
	myInt %= 4;
	System.out.println("myInt의 현재 값: " + myInt);

/*
증감 연산자는 해당 연산자가 달려있는 공간의 값을 1 '증'가시키거나 '감'소시키는 연산자이다
단, 해당 공간의 앞, 뒤에 따라서 의미가 달라진다.
앞에 붙어있는 경우 전위 증강연산자라고 하고 가장 먼저 실행되는 코드 그룹에 속한다.
뒤에 붙어있는 경우 후위 증감연산자라고 하고, 가장 마지막에 실행되는 코드 그룹에 속한다.

	myInt의 현재값을 화면에 출력해보자 마지막값은 6을 4로나눈 나머지인 2이다

*/
System.out.println("myInt: " + myInt);
System.out.println("++myInt: " + ++myInt);
// 위 코드를 풀어쓰면 다음과 같다.
// 1. ++myInt가 실행되서 myInt의 값이 2에서 3으로 1 증가된다. ++, -- 1씩 증감
// 2. "++myInt: " 이라는 스트링값에 + 연산자가 실행되면서 - 오른쪽값을 왼쪽에 더하라
// myInt의 현재 값인 3이 연결되서 결과적으로 "++myInt: 3"이라는 스트링 값이 만들어진다.
// 3. System.out.println()이 위의 2번에서 만들어진 "++myInt: 3"이라는 스트링 값을 화면에 출력한다;
System.out.println("myInt: " + myInt);
// 후위증감연산자는 그에 반해서 가장 마지막에 실행되는 그룹에 속하게 되므로,
System.out.println("myInt--: " + myInt--);
// 1. 위의 한줄의 코드는 풀어쓰면, "myInt--: "뒤에 myInt의 현재 값인 3이 연결되서
// "myInt--: 3" 이라는 string값이 만들어진다.
// 2. System.out.println()dl 1번에서 만들어진 "myInt--: 3"이라는 결과값을 화면에 출력한다
// 3. myInt--가 실행되서 myInt의 값이 1을뺀 3에서 2로 나온다.
System.out.println("myInt: "+ myInt);

	//번외, 당연히 String도 +=가 가능하다.
	String myString = "";
	System.out.println("myString: " + myString);
	//빈공간으로 대체?
	
	myString += "*";
	System.out.println("myString: " + myString);
	myString += "*";
	System.out.println("myString: " + myString);
	
	
}

}

1226 리눅스

수업간 기본 프로그램으로는
리눅스 notepad++
putty
글꼴
d2-coding

$who = j14 password = 1
j31~j40 = 예비id

who | sort | nl 정렬
whoami = 내번호
date = 오늘 시간 utc기준
cal 달력
wall * 단톡방
1명이 다 클라이언트
mesg
history
강사 ip : 192.168.0.175
9:3018:10
점심 : 13:20
14:10 ?
write ### ###= idnumber

^c = ctrl + c
talk j*
talk j1
ctrl l = clear
hostname = j
mail j* =
cc 는 참조 = 다른사람추가가능

메일창에서 ctrl +z 나가짐
mkdir /ace == permision denied 권한없음 호스트가 아니라그런가봄 일반사용자는
ls /aa == 폴더못찾겟다함
useradd kbs == permission denied 권한없음

일반사용자는 안되는게 많다
반정도는 일반사용자로서 리눅스 사용하는방법 (설치안해도 가능한)
설치시 관리자권한 (Super user) = windows administrator
3일차에 설치하고 root 권한 가질것임
그전엔 친숙해져야함

외울라 하지말고, 손에 익혀야함

일반 로그인시
useradd j14 = already exists
서버는 탈착식가능

파이썬
python3

MYsql

sqlite3
.open adb -?
select man ---- db내용 가져옴
create table man(name, age); => 이름(str) "*", 숫자 그대로 세미콜론마무리;
방향키 위버튼 전에 작성한내용 순서대로나옴
.q 입력시 sqlite3 에서 나옴
테이블에서 넣은것 지우는법? insert !=

손흥민|30
이강인|22
창에서 오른쪽클릭하면 붙여넣기
드래그하면 자동복사후 다른데서 ctrl v

echo $HOME
echo ~
~ = wave, tilde, 출렁이 (집이라는 뜻)
cd ~j40
이제 폴더부터 파일이 더 큰 개념이라 인식하고
디렉토리도 파일의 한 종류다.
everything is file

=====================
에디터
cd /usr
cd usr
ls / c드라이브로가서 표준디렉토리로 갔다~

위치 까먹엇을때
cd -> 집 위치로
pwd 명령어는 현재 작업 중인 디렉터리의 절대 경로를 출력

windows
C:\Users\bitcamp>cd c:/

c:>mkdir dd

c:>cd dd

c:\dd>mkdir d1 d2 d3

c:\dd>rmdir d1 d2 d3

c:\dd>

cls

점하나 . 현재위치
점둘 .. 상위디렉토리 리눅스도 동일함
in windows 슬러쉬 역슬러쉬 동일

mkdir d1
cd d1

mkdir d2
cd d2 // cd= change directory
mkdir d3 && cd d3 2개명령 동시처리

ls -a
cd .
cd ..

rm -rf dl -하위디렉토리 다지우는듯
j14@j:~$ ls -a
. adb .bash_logout .cache .profile .sqlite_history
.. .bash_history .bashrc d1 .python_history

mkdir d1; cd d1 세미콜론은 엔터와 같은효과

ls
rm a* a로 시작하는것 지우기
rm [b-g]* b~g로 시작하는것 지우기 remove?
rm ^[xy]*

ls
rm -f [^xy]* xy는 빼고 -f(강제로)지워라

log = history

j14@j:~/d1/d1/d1$ alias c='clear'

j14@j:~/d1/d1/d1$ alias h='history'

@@@@@@@@@@@@@@@@2교시@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@2교시@@@@@@@@@@@@@@@@@@@@@@@@

/etc$ ls
ls /bin
파일리스트
초록색이 실행파일 ex: nftables.conf

tree -d = 하위디렉토리 리스트 트리로출력
bin = 바이너리
sbin = 슈퍼바이너리
dev = 디바이스 devise

ls -F /etc
ls -F /dev
ls -Fl /etc = 길게나옴
c는 캐릭터디바이스
b블락디바이스
etc 설정파일이 모여있음
.conf = configuration

ls /etc -F
ls /lib -Fl
.so 쉐어드오브젝트?
same in windows === .dll = 다이나믹링크라이브러리
공통점 라이브러리가 모여있음

usr 프로그램파일

du /usr -sh // -sh는 합쳐서 보여달라는뜻
du -sh == 내가지금 얼마를쓰고있는지 보여줌
ls -alRS / 대충 화려한거

/etc$ ls
ls /bin
파일리스트
초록색이 실행파일 ex: nftables.conf

tree -d = 하위디렉토리 리스트 트리로출력
bin = 바이너리
sbin = 슈퍼바이너리
dev = 디바이스 devise

ls -F /etc
ls -F /dev
ls -Fl /etc = 길게나옴
c는 캐릭터디바이스
b블락디바이스
etc 설정파일이 모여있음
.conf = configuration

ls /etc -F
ls /lib -Fl
.so 쉐어드오브젝트?
same in windows === .dll = 다이나믹링크라이브러리
공통점 라이브러리가 모여있음

usr 프로그램파일

du /usr -sh // -sh는 합쳐서 보여달라는뜻
du -sh == 내가지금 얼마를쓰고있는지 보여줌
ls -alRS / 대충 화려한거
cal > c1 c1에 cal 저장이라는 뜻 달력저장in c1
nl c1 = > c1보여주세용
tac c1 -> 달력 뒤집기

dpkg -l | more
dpkg -l | less

나오는건 q || ctrl + c
dpkg -l > 다보여줘
dpkg enter + space 아래로 계쏙보여줌
q로 빠져나옴

파이프는 명령결과를 뒤로 보내줌
dpkg -l | nl |
who => 시스템에 누가있는지
who | nl => 누가 몇줄로 있는지

cal | nl => 달력이 몇줄인지

cal | sort | nl
who | sort | nl | mail -s [email protected]

dpkg -l

ps -ef | nl

head w1
tail w1

head -3 wl = 위로 3
tail -3 wl 밑에서 3 컷

logname
arch
hostname
w
uname = unix name ->
uname -r 버전넘버
df -h
drwxr

alias c='clear'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias h='history'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'

ls -l = ls long 길게보여주세용
ls -a 다보여주세요

명령어
ls : 리스트, 디렉토리 내 파일을 다 보여줌
ls -l : 용량, 파일명 등 상세정보 파악 가능
ls -al : 숨긴 파일도 볼 수 있음

mv : 정보를 바꾸는 것, 파일 위치 및 이름 등 변경 가능
mkdir : 디렉토리를 만드는 것, 새로운 폴더 생성

cp : 파일 복사
pwd : 현재 파일 경로

rm : 삭제
폴더는 지워질 수 없음
rm -rf 폴더명 => 폴더 삭제 가능
(정말 강력한 명령이므로 사용에 유의해야 함)

top : 내 컴퓨터의 현재 돌아가는 프로세스 등을 보여줌
htop => top의 가시성 좋은 버전
q로 종료시킴

ps => 세세한 정보를 보고 싶을 때

df : 디스크 정보를 보여줌
du : 디스크 용량 사용하는 용도로 사용

find : 현재 폴더에 들어있는 모든 파일들 검색하는 것
find | grep 찾고자 하는 것
=> 이런 식으로 찾음

man : 메뉴얼을 보여줌

which : 환경변수를 이해할 때 중요하게 작용함.
which a => a의 위치를 반환해줌

tail : 파일의 밑의 일부를 볼 수 있음
tail -f : 어떤 파일의 모니터링이 가능해짐
추후 로그 등을 일시적으로 확인할 때 좋은듯?

| : 어떤 명령어의 결과에 대해 2차적으로 처리하고 싶을 때 사용
명령어 | 서브 명령어

'>' : 리다이렉션, 표준 출력으로 발생한 결과를 파일로 저장

apt-get : 필요한 패키지, 프로그램을 설치할 수 있는 패키지 관리 도구
nohup : 내 스크립트가 터미널을 끄더라도 계속 실행시키고 싶을 때 &와 함게 백그라운드로 실행
screen : nohup을 통해 백그라운드로 가버린 프로세스는 다시 볼 수 없지만 Screen을 띄어서실행하면 해당 세션 복원 가능

리눅스의 이해
권한
d : Directory
r : readable
w : writable
x : executable

0부터 7까지 이진법으로 권한 부여 변경 가능

sudo : 일시적으로 root의 권한을 위임받을 수 있는 방법
시스템의 중요한 부분을 변경하거나 업데이트 해야할 때 사용

$PATH : 프로그램을 실행할 때 자동으로 참조하는 절대경로의 모음
왼쪽으로 갈수록 위선순위가 높음. 발견 즉시 바로 실행

셸 스크립트 기본
셸 쓰는 이유? 반복하기 귀찮으니까!

셔뱅(Shabang) : #!
셸 스크립트 시작 시 맨 처음에 기입
스크립트를 해석하는 인터프리터를 지정하는 것임.

변수(Variable)
선언 : VAR
사용 : $VAR
특수한 경우 : ${VAR}
매개변수 $0, $1, ... $*, $@

조건, 비교 연산자
if then ~ elif then ~ fi
정수 : -eq, -ne, -gt, lt, -ge, le
문자열 : ==, !=, -z, -n
정수와 문자열의 비교 방법이 다름

반복문
while, for
break, continue, exit 존재

@@@@@@3교시

지워진다는개념은 없고 링크를 끊는개념이라
포렌식이 가능하다

cd
rm -rf d1 d11
mkdir d1 && cd d1pwd
mkdir d10 d20 d30
ls rmdir d10 d20 d30ls mkdir k{1..50}
ls
touch a{1..10}
rm a*

cp /etc/b* .
cp /etc/* . 2>/dev/null

ls

stdin 0 표준입력
stdout 1 표준출력
stderr 2 표준에러

2>/dev/null 표준에러를 꺾어서 dev/null로 보낸다(쓰레기통에 버렸다) ex재지향
->표준 에러를 날려서 깔끔하게 보기
지금수준에 난이도가 있는 얘기

rm -i a*

j14@j:/d1$ rm -i a*
rm: remove regular file 'adduser.conf'? n
rm: remove regular file 'adduser.conf.dpkg-save'? n
rm: remove regular empty file 'aliases'? n
j14@j:
/d1$ rm -i b*
rm: remove regular file 'bash.bashrc'? n
rm: remove regular file 'bash_completion'? n
rm: remove regular file 'bindresvport.blacklist'? n
j14@j:~/d1$ rm -f [k-z]*

cp -r /etc/s* . 디렉토리까지 복사해달라는 뜻 s로 시작하는것만?
rm -rf s*
-rf 디렉토리까지 다 지우라는 뜻

cp /bin/date //date파일 ?폴더 복사해달라는
ls
./date ./da2

cp /bin/date da2 date를 복사하면서 da2로 이름을 바꾼다는 뜻
ll 리스트를 디테일한 정보까지 보여줌
apt install rename
-> rename apt을 깔아주세용

mv a2 AA20
a2를 AA20으로 이름바꿔줘
기능은 초록색
폴더는 짙은 파란색

mkdir /usr/
외부경로에 만드는 방법은

현재로서는
mkdir /tmp/lhs100 으로 만듦
남의껀 못지움 = 보호받는중

cp /etc/magic k1

cp -i /etc/magic k1 -i는 물어본다. 바꿀건지 말건지

@@@@@@@@@4교시@@@@@@@@@
코딩 in vi
&& and = 앞이 참이면 뒤도 실행

i a o == insert =입력가능상태

커서위에두고 dd 숫자입력하고 dd시 해당렬부터 밑에 {숫자}까지 지워짐

!!
esc+.
alt+. 이전명령어 다시실행
/w 쓰기 = 저장
/q 종료
/wq 저장종료
:set number = :se nu
:nonu = no number

', " 차이
'그녀가 말했다. "사랑한다고"'
항상 esc 실행모드
:se nu
:w
:q
:wq
:x

입력모드
i, o, a 미세한 차이 존재

ls 를 생활화 (검사필수)
기계는 잘못이 없다. 니가 잘못했다.

c언어 컴파일
$vi a.c

$gcc a.c -o a
$./a

c++ 컴파일
vi aa.cpp

$g++ -o aa aa.cpp
$./aa

java 컴파일
$vi j.java

$javac j.java
$java j

우분투 리눅스 초기설정법

초기 상태

//생성한 아이디로 로그인

//root 변경 후 사용(권장x) - 변경 방법 : su - or sudo -i

#whoami -> 루트로 로그인 확인 //이하 #생략

script Linux-Set -> 실행한 명령어 exit 하면 /home에 파일로 저장됨 (?)

//명령어 커스텀---------------------------------------------------

alias ai='apt -y install'

alias h='history'

alias c='clear'

alias lh='ls -Alh'

vi ~/.bash_aliases -> 세션 종료 후에도 사용할 커스텀 명령어 저장


alias ai='apt -y install'

alias h='history'

alias c='clear'

alias lh='ls -Alh'

:wq


//초기 설정---------------------------------------------------

date -> 현재 날짜, 시간(EN기준으로 되어있음)

timedatectl set-timezone Asia/Seoul -> date 시간 한국시간으로 설정

date

cal -> 캘린더 출력(초기에 깔려있지 않음)

ai ncal

cal

ai language-pack-ko gcc g++ default-jdk apache2 mysql-server tomcat9 sqlite sendmail mailutils tree lynx glibc-doc mandoc rdate quota -> 미리 설치 걸어 놓기

locale -> 언어 설정 확인

nl /etc/default/locale -> 언어 설정된 파일 확인

vi /etc/default/locale


#LANG=en_EN.UTF-8 -> 이곳은 주석처리

LANG=ko_KR.UTF-8

:wq


update-locale LANG=ko_KR.UTF-8 -> 설치된 언어 파일 update

locale -> 변경 안될 시 새로운 터미널에서 확인

cd /adasdasd -> 오류메세지로 한글 출력 확인

. ~/.profile -> 다시 로그인한 효과

vi ~/.vimrc -> vi 간단 설정


se nu ai ci si ts=4 sw=4 ruler title showmatch

syntax on

hi comment ctermfg=red

:wq


cp .vimrc /etc/skel/ -> 사용자가 만들어질 때마다 vimrc복사

//사용자 추가---------------------------------------------------​

useradd -D -> useradd했을 때 default값

useradd -D -s /bin/bash -> useradd했을 때 default값 변경

vi /etc/login.defs


약 13줄 공백 줄(없으면 만들기)

CREATE_HOME yes //유저 생성 시 자동으로 home에 디렉토리 생성

:wq


useradd ace -> 위 CREATE_HOME 설정 없을 시 useradd -m -d /home/ace ace

passwd ace -> ace의 비밀번호 설정

ls /home/ -> ace디렉토리 생성 확인

nl /etc/passwd -> ace계정 확인

hostname

df -h -> 디스크 정보 확인

//group 사용---------------------------------------------------

groupadd NC -> NC라는 group 생성

useradd nc1 -G NC -> nc1사용자를 추가하고 NC그룹에 추가

useradd nc2 -G NC

useradd nc3 -G NC

useradd nc4 -G NC

useradd nc5 -G NC

passwd nc1 -> nc1의 비밀번호 설정

passwd nc2

passwd nc3

passwd nc4

passwd nc5

nl /etc/passwd

nl /etc/group -> 생성된 그룹 확인

//C언어, C++, JAVA 코딩 및 컴파일 해보기---------------------------------------------------

mkdir dd

cd dd

vi a.c


//41페이지 참고 코딩

:wq


gcc a.c -> a.out파일 생성

./a.out -> a.out 파일 실행

gcc a.c -o a -> -o는 output file의미

echo $PATH -> 경로 확인

PATH =$PATH:. -> 경로에 자신을 추가하여 './'생략 가능

a.out

a

vi b.c++


//41페이지 참고 코딩

:wq


g++ b.cpp -o b

./b

vi j.java


//41페이지 참고 코딩

:wq


javac j.java

java j

//mysql 사용---------------------------------------------------

service mysql start

mysql -> 비밀번호 없이 바로 mysql에 루트계정으로 접속

select user(); -> 루트계정인지 확인

//215쪽

use mysql -> 마스터db인 mysql사용(root계정으로 제어)

alter user 'root'@'localhost' identified by 'jj'; -> root의 비밀번호를 'jj' 설정

create user myace@localhost identified by 'a'; -> myace 계정을 생성하고 비밀번호 'a'로 설정

grant all privileges on acedb.* to myace@localhost; -> myace에게 acedb에 관한 모든 권한을 준다

flush privileges -> 변경된 내용들을 DB에 적용하는 명령어

//새로운 터미널 & ace로 로그인 진행

mysql -u myace -p

비밀번호 입력: 1

select user()

use mysql -> 루트가 아니기 때문에 마스터db접근 불가

show databases; -> 데이터베이스 목록 조회

create database acedb; -> acedb 데이터베이스 생성

use acedb; -> acedb 제어 시작

//sql문

create table A(su int);

insert into A values(40);

insert into A values(30);

flush privileges

quit

//다시 루트 계정의 터미널로

service apache2 start

cd /var/www/html

nl index.html -> index.html 파일 확인

mv index.html old.html -> index.html이름을 old.html로 변경

vi index.html


안녕하세요 반갑습니다.

:wq


// quota 동작해보기---------------------------------------------------

quota -> quota:용량 제한,동작x

repquota -a -> 동작x (quota 실행 안했음.)

vi /etc/fstab


약 12줄 맨 오른쪽 부분

/home ext4 defaluts 0 1

↓밑에걸로 수정

/home ext4 defaults,usrquota 0 1

:wq


mount -o remount /home ->

quotaon -avug -> quota 켜보기

quotaoff -avug -> quota 꺼보기

quotacheck -avugm -> quota 상태 체크

ls /home/ -> aquota.user 만들어졌으면 정상

quotaon -avug

repquota -a -> quota내용 확인

edquota -u nc1 -> nc1의 용량 제한


soft 5000

hard 6000

저장 -> ctl+x -> enter


repquota -a

edquota -p nc1 nc2 nc3 -> n1을 n2,n3에게 복사

repquota -a

//nc1 로그인

quota

cp -r /etc -> /etc용량이 제한된 용량 초과

du -sh ~ -> 5.9M로 한정됨

//nc5 로그인

quota

cp -r /etc -> 정상적으로 카피

du -sh ~ -> 복사됨

비트캠프 기초특강 day03 JAVA

@@@@@@@01
package day03;
import java.util.Scanner;
public class Ex01GradeCheckerAnswer {
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
System.out.println("점수를 입력해주세요.");
System.out.println("> ");
int score = scanner.nextInt();
if (score >=90){
System.out.println("Awesome");
} else if (score >=80 ) {
System.out.println("Better");
} else if (score >= 70) {
System.out.println("Concentrate");
} else if (score >= 60) {
System.out.println("Danger");
} else {
System.out.println("Fall");
}
scanner.close();
}
}

@@@@@@@@02
package day03;
import java.util.Scanner;
public class Ex02BmiCheckerAnswer {
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
System.out.println("키를 M단위로 입력해주세요");
System.out.println("> ");
double height = scanner.nextDouble();

    System.out.println("몸무게를 kg단위로 입력해주세요.");
    System.out.println("> ");
    double weight = scanner.nextDouble();

    System.out.println("이름을 입력해주세요.");
    System.out.println("> ");
    scanner.nextLine();
    String name = scanner.nextLine();

    double bmi = weight / height / height;
    String obesity = "";
    if(bmi < 19.5){
        obesity = "저체중";
        } else if (bmi < 23){
        obesity = "정상체중";
        } else if (bmi < 25){
        obesity = "과체중";
        }   else {
        obesity = "비만";
    }
        System.out.printf("이름: [%s] 키: [%.2f]M 몸무게: [%.2f]kg\n", name, height, weight);
        System.out.printf("BMI: [%.2f] 비만도: [%s]\n", bmi, obesity);

    scanner.close();
}

}

@@@@@@03
중첩 if문[nested if]이란 하나의 if코드 블럭안에
새로운 if-else 구조가 나오는 것을 말한다.
만약 우리가 어떤 특정결과의 값을 먼저 확인하고
그후에 추가적인 코드 작업이 필요하면 중첩 if문을 사용하게 된다.
또한 if문 뿐만이 아니라, 우리가 나중에 배우게 될 다른 제어문들도
종류와 상관 없이 중첩이 가능하다.

*/
public class Ex03NestedIf {
public static void main(String[] args){
int number = -16;
if(number > 0){
System.out.println("양의 정수입니다.");

        if(number < 10){
            System.out.println("한자리 숫자입니다.");
        } else if (number < 100) {
            System.out.println("두자리 숫자입니다.");
        } else {
            System.out.println("세자리 이상입니다.");
        }

    } else{
        System.out.println("양의 정수가 아닙니다.");

        if(number == 0){
            System.out.println("제로.");
        } else {
            System.out.println("음의 정수 입니다.");
        }
    }
}

}

@@@@@@04

package day03;
/* 사용자로부터 성별, 나이, 신체등급을 입력받아서
신체등급 기준
1~3 현역
4 공익
그외 면제가 출력되는 프로그램
성별은 1남자 2여자판단
여자일 경우에는 "여성에게는 병역의 의무가 부여되지 않습니다."
로 별다른 입력없이 프로그램이 종료되어야 한다.
남자이지만 미성년자일 경우 "미성년자에게는 아직 신체등급이 존재하지 않습니다"가 출력
별다른 입력없이 프로그램이 종료되어야한다

*/
import java.util.Scanner;
public class Ex04ArmyChecker {
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
System.out.println("성별을 입력해주세요. 남자면 1 여자는 2를 입력해주세요");
System.out.println("> ");
int gender = scanner.nextInt();
if(gender == 2 ){
System.out.println("여성은 병역의 의무를 지지않습니다.");

    }
    else{
        System.out.println("남성이시군요");
        System.out.println("나이를 입력해주세요");
        int age = scanner.nextInt();
        if(age < 19){
            System.out.println("미성년자에게는 신체검사가 아직 진행되지 않았습니다.");
        } else if (age > 35) {
            System.out.println("thank you for your service");
        } else {
            System.out.println("신체등급을 작성해주세요");
            System.out.println("> ");
            int bodyGrade = scanner.nextInt();
            if (bodyGrade == 4){
                System.out.println("공익입니다");
            } else if (bodyGrade < 4) {
                System.out.println("국방의 의무 축하해");
                System.out.println("국방부 https://www.mnd.go.kr 확인해주세요" );
            } else {
                System.out.println("전시보충역 & 면제입니다");
                System.out.println("국방부 https://www.mnd.go.kr 확인해주세요");
            }
            ;

        }
    }
    scanner.close();
}

}

내가 하려던건 잘못된숫자가 입력됐을때 다시 입력창을 띄우고 입력받아서 결과에 따른 진행을 하고자했음

// 중첩 if문을 사용하여 올바른 결과일때에만 추가적인 코드진행을 하고 그외는
// 경고메시지를 출력함, 이 방법은 올바른값의범위가 연속적일때 주로 사용이 된다.

자바 2주차

데이터소스 데이터타겟
br부터 다시
readLine(); 스트링채로 줄전체읽음
슬립풀 런
라이프사이클(생애주기)
쓰레드 장점 단점
자원공유, 데이터도 공유/로 인한 동기화문제-> 데이터신뢰성이 떨어짐

하나씩 슬립풀들어갓다가 나오면서 실행 육안으로는 차이가잇는데
버퍼나 내부적수행에서의 절차로인해 교차가아닌듯보인다 관리못함
싱크로나이즈드로 수행-> 느려지는대신에 하나씩들어오므로 충돌과 공유로인한 문제없어짐. 지금까지는
자바 6일차부터

용어 정리 및 수업 내용=====================================================================================================

command line argument : 명령행 매개변수
validation check : 유효성 검사, 입력값에 대한 검증으로 보안 향상
System.out(0) : 실행중인 프로세스를 종료하는 매서드
signature : 프로그래밍에서는 기본형태, 예를 들어 메서드의 기본형태 등을 signature로 표현

**this,this()
클래스 자기자신을 나타내며 this.을 통해 필드 값을 참조 가능하고, this()를 통해 자기 자신의 생성자를 호출할 수 있다.
추가로 다형성을 이용해 다양한 생성자 메서드를 this(arg)를 통해 사용할 수 있다. 여태까지 사용되었던 필드, 메서드는 모두 뒤에 this or super이 생략되어있다.

**super,super()
클래스가 상속받는 상위 클래스의 주소를 담은 reference변수로 부모에 있는 필드, 메서드를 바로 사용하거나 생성자를 호출할 때 사용한다.

**package
윈도우의 폴더, 리눅스의 디렉토리의 개념으로 자신의 위치가 어디인지 package를 표현하여 class끼리 통신할 수 있도록 길을 만들어주는 역할을 하기도 함.
패키지명은 오픈소스일 경우 오픈소스를 제공하는 사이트의 도메인을 거꾸로 하여 package를 표현한다. ex) bit.com => com.bit.java

**has a 관계 vs is a 관계
is a 관계는 상위클래스를 상속하여 사용하는 형태로, 상위클래스에 정의된 메서드를 오버라이딩, 오버로딩 등을 통해 영향을 행사할 수 있어 연관성이 강하다고 할 수 있다.
has a 관계는 내 클래스 필드에 다른 클래스의 인스턴스를 생성하여 /ex)A클래스의 인스턴스 생성/ 사용하는 방법으로 A의 형태의 인스턴스를 내 클래스에서 자유롭게 사용할 수 있지만
A클래스의 인스턴스일 뿐 A클래스에 직접적으로 영향을 줄 수는 없기 때문에 has a 관계라고 표현하며, 연관성이 약하다고 말할 수 있다.

**Access modifier
public : 어디에 위치하든 모두 접근할 수 있음.
protected : 같은 패키지 혹은 상속 관계의 신뢰를 가지고 있을 경우에만 접근 허용.
default : 같은 패키지에서의 신뢰를 가지고 있을 경우에만 접근 허용.
private : 외부에서 절대 접근 불가, 자기 자신(클래스 내부)에서만 접근 가능 => get,set을 통해 값을 출력, 세팅할 수 있음.
응용 : 생성자를 private로 설정하면 아무도 Instance를 생성하지 못하게 된다. 하지만 setInstance() 메서드를 선언하여 Instance를 클래스 내부에서 만들어서 return할 수 있는데
이 때 조건 등을 붙여서 자신의 접근 권한을 자신이 커스텀하여 사용할 수 있게 한다.

**static, final
서로 다른 상태를 갖게하기 위한 구현 수단
static : 인스턴스에서 일정한, 동일한 값으로 사용되어 메모리의 낭비가 발생하게 된다. 이 때 메모리에 고정된 크기를 할당하여 공유하게 함으로써 메모리 낭비를 줄이고 객체가 서로 다른
상태를 갖게 함. 컴파일 실행시 static 부분을 먼저 적재하고, JRE에서는 static에 있는 main을 가장 먼저 호출하기 때문에 main은 꼭 static이어야 한다.
method의 경우 필드 값의 변동 등 상태의 변화가 일어나지 않는 단순 행위에 해당하면 static으로 선언하여 사용한다.

final :

  • Field에 사용 : 마지막 값, 한번 초기화 하면 값 변경 불가 (PI = 3.14)
  • Method에 사용 : 오버라이딩 불가
  • Class에 사용 : 상속 받기, 상속하기 불가

금일 용어 정리 및 수업 내용
레퍼런스타입간의 형변환!
Parent 타입 변수 p 를 선언하여 Child 클래스의 인스턴스 전달
Parent p; // 슈퍼클래스 타입 참조 변수 p 선언
p = c; // 서브클래스의 인스턴스 주소를 슈퍼클래스타입 변수에 전달
// => Child 타입 -> Parent 타입으로 변환됨(업캐스팅)
// => 업캐스팅은 자동 형변환이 가능하므로 형변환 연산자 생략 가능

	// Parent 타입 변수 p 를 통해 접근 가능한 메서드 : 1개
	p.parentPrn(); // 상속받은 메서드는 호출 가능
	//		p.childPrn(); // 오류 발생. 서브클래스에서 정의한 메서드는 호출 불가능

스태틱할시 인스턴스화를 시킬수가 없다

널포인트

퓨어
순수 가상 함수는 인터페이스(Interface)를 자식 클래스에게 전달하기 위해 사용하는 함수입니다
퓨어 가상함수 : 순수 가상함수를 가지고 있는 함수는 추상 클래스이며 인스턴스(메모리 할당)을 받을 수 없는 객체이다. ex) virtual void OutPut(void) = 0;

사용용도

  1. 자식 클래스에게 상속만 제공하는 인터페이스 용도 클래스
  2. 순수 가상함수를 이용할 경우, 순수가상함수는 일단 테이블에서 제외 되므로(정의가 안되어있으므로) 자식클래스의 함수로 접근하는 속도면에서도 빠르다.
    implements 임플먼츠
    abstracts 업스트랙트 method와 class로 존재하며
    abstract method 는 구체적일 필요가 없는 것이며 하위클래스에서 구체적으로 재정의 해야하는 강제성을 갖는 메소드다.
    abstract class 는 구체적이지 않은 abstract method 가 정의된 클래스로 일반화의 관계중 공통적 일반적행위와 속성을 공유 목적으로 정의된 클래스이다.
    abstract class는 instance 생성할 수 없다 대단히 중요한 사실
    메소드 시그니처만 존재할테니 반드시 니가 오버라이딩을 해라 == final과 반대의미
    사고를 방지하고자 인스턴스 생성이 안된다고 받아들이자.
    참조하지않는걸 gc가 제거한다.
    리소스떄문에!
    힙메모리 힙사이즈

CBV(Call By Value를 줄여부르도록 하겠습니당.) 는 기본적으로 대상에 주소값을 가지지 않는 것으로

값을 할당받는 형태로 사용됩니다. 예를 들어 int, float, double, byte 등 primitive type에 해당됩니다.
스트링클래스로 문자합치기 스트링버퍼로 합치기 예시
//String.class 이용 문자열 생성
String s1 = "홍";
String s2 = "길";
String s3 = "동";
String s4 = new String("짱");
s1 = s1+s2;
s1 = s1+s3;
s1 = s1+s4;

//동적인StringBuffer / StringBuiler 사용 문자열 생성
StringBuffer sb = new StringBuffer("홍");
//StringBuilder sb = new StringBuilder("홍");
sb.append(s2);
sb.append(s3);
sb.append(s4);//수정

String name = "012ABCdef";
String hi = new String("Hi !");
String gd = new String("길동!");
String s1 = hi.concat(name); //concat?
System.out.println(s1);//s1인데 왜 HI랑 name둘다나오지? CONCATENATE 사슬같이 잇다. 병합하다
s1 = hi.concat(gd); //이러면 그냥 hi 길동만 나온다 mutable하다~
System.out.println(s1);

String s2 = s1.substring(1); //substring은 문자열 중 특정 부분부터을 뽑아낼 경우에 사용
System.out.println(s2);//7=in RW 8번부터 뽑아주세용=> ABCdef

int a = name.indexOf("ABC"); //IndexOf는 문자열에서 특정 단어가 있는지를 찾고 있을 경우 위치값을 리턴하는 내장 함수이다.
System.out.println(a);//결과값 3 왜지? 위치값은 0부터 시작하기 때문에 0 이상값이 나오면 결과가 리턴이 되고, -1인 경우 해당 값이 없을 경우이다.
System.out.println(name.substring(a));//ABCdef 왜지?

int b = name.indexOf("ABC");
System.out.println(b);//결과값 3 아마 b에 속한값이 3이라? 이건또 왜지?
System.out.println(name.substring(b));//ABCdef ABC부터 찾는건가? b가 ABC니까 ABC부터 쭉 찾아줌
System.out.println(name.substring(b,5));//AB

equals(obj안에 )
== 주소값 비교
String과 Integer클래스에서는 equals()메서드가 이미 재정의 되어 있으므로 이를 이용하여 Student클래스의 equals()메서드를 오버라이딩 해보자.
우선 String과 Integer클래스에서 어떻게 equals가 작동하는지 알아보자.

public static void main(String[] args) {
String str1 = "abc";
String str2 = "abc";

    System.out.println(str1.equals(str2));


    Integer num1 = 100;
    Integer num2 = 100;

    System.out.println(num1.equals(num2));

}

/*출력결과
true
true
*/

CBR(Call By Reference를 편의상 줄여부릅니다.) 는 대상을 선언했을 때, 주소값이 부여됩니다.

그래서 어떠한 객체를 불러왔을 때는 그 주소값을 불러온다고 봅니다.

이에는 Class, Object(객체)가 해당됩니다.

str1과 str2는 그 내용은 같지만 인스턴스의 주소가 다르다. 하지만 equals메서드를 이용해 비교하면 동일하다는 결과가 나온다. 이를 통해 String형에서의 equals()는 두 대상의 내용이 같으면 같다고 판단한다는 것을 알 수 있다.

메소드오버라이딩
메소드 오버로딩

근거는 폴리모피즘
1개체 다양한 활용

퓨어
순수 가상 함수는 인터페이스(Interface)를 자식 클래스에게 전달하기 위해 사용하는 함수입니다
퓨어 가상함수 : 순수 가상함수를 가지고 있는 함수는 추상 클래스이며 인스턴스(메모리 할당)을 받을 수 없는 객체이다. ex) virtual void OutPut(void) = 0;

사용용도

  1. 자식 클래스에게 상속만 제공하는 인터페이스 용도 클래스
  2. 순수 가상함수를 이용할 경우, 순수가상함수는 일단 테이블에서 제외 되므로(정의가 안되어있으므로) 자식클래스의 함수로 접근하는 속도면에서도 빠르다.
    임플먼츠
    업스트랙트

CBV(Call By Value를 줄여부르도록 하겠습니당.) 는 기본적으로 대상에 주소값을 가지지 않는 것으로

값을 할당받는 형태로 사용됩니다. 예를 들어 int, float, double, byte 등 primitive type에 해당됩니다.

equals(obj안에 )
== 주소값 비교
String과 Integer클래스에서는 equals()메서드가 이미 재정의 되어 있으므로 이를 이용하여 Student클래스의 equals()메서드를 오버라이딩 해보자.
우선 String과 Integer클래스에서 어떻게 equals가 작동하는지 알아보자.

public static void main(String[] args) {
String str1 = "abc";
String str2 = "abc";

    System.out.println(str1.equals(str2));


    Integer num1 = 100;
    Integer num2 = 100;

    System.out.println(num1.equals(num2));

}

/*출력결과
true
true
*/

CBR(Call By Reference를 편의상 줄여부릅니다.) 는 대상을 선언했을 때, 주소값이 부여됩니다.

그래서 어떠한 객체를 불러왔을 때는 그 주소값을 불러온다고 봅니다.

이에는 Class, Object(객체)가 해당됩니다.

str1과 str2는 그 내용은 같지만 인스턴스의 주소가 다르다. 하지만 equals메서드를 이용해 비교하면 동일하다는 결과가 나온다. 이를 통해 String형에서의 equals()는 두 대상의 내용이 같으면 같다고 판단한다는 것을 알 수 있다.
인코딩 디코딩

package : 현재 class의 위치, 다른 패키지의 위치를 참조할 때 참조 값으로 사용
import : 다른 패키지에 있는 class를 사용하기 위해 import '패키지위치'를 통해 사용
garbage : 선언된 후 참조되지 않는 메모리에 적재된 사용하지 않는 공간
garbage collector : JRE에서 참조되지 않는 garbage를 자동으로 처리하는 역할을 수행하며 메모리에 적재된 것을 적절히 해제하는 작업을 수행한다.
null : 아무것도 참조하지 않음을 나타냄
mutable : 가변, 어떠한 값의 변화를 적재된 메모리를 통해 적용
immutable : 불변, 어떠한 값의 변화가 일어나면 메모리 자체에 접근하여 변경을 수행하지 않음.(해당하는 메모리와의 연결을 끊고 변경된 값이 메모리에 적재되어 그 메모리와의 연결을 생성)

**abstract
class, method에 사용되며 추상 메서드로 선언된 메소드는 반드시 Overriding을 통해 사용해야 한다.(method Overriding 을 사용하여 Polymorphism을 지원한다.)
method가 abstract로 선언되면 해당 클래스는 abstract으로 선언해 줘야하며 그 이유는 해당 클래스를 직접 인스턴스로 만들어 사용하게 될 시 추상 메소드에 접근하여 사용하는 실수가
발생할 수 있기 때문에 class도 추상화 한다.

**Interface(pure abstract class, 모든 메서드가 abstract로 선언된 형태)
Interface에서 선언된 모든 메서드는 abstract메서드이며 implements를 이용해 Interface의 내용을 구체화하여 사용할 수 있는 환경을 제공해준다.
implements를 이용해 선언하고, 내부에서 오버라이딩하여 사용 가능.
Field 선언시 public final static(앞에 내용이 없더라도 생략되어있을 뿐), Method 선언시 public abstract(Field와 마찬가지로 생략되어있을 뿐)

**객체지향 개념 복습 및 UML
Generalization : 자식이 부모를 상속받으며 조금 더 일반화 된 내용을 가지게 되며 이를 일반화라고 한다.
class A extends B 의 형태로 사용되며 UML은 A -> B(A가 B보다 위에서 표기)이다.

Realization : implement를 사용해 추상화된 메서드들을 현재 클래스에서 재정의하고 사용할 수 있도록 하는 것으로 추상화된 메서드를 구체적으로 실체화한다는 개념이다.
class A implements C 의 형태로 사용되며 UML은 A --> B(A가 B보다 위에서 표기)이다.

Dependency : 메서드에서 다른 클래스의 메서드를 사용하기 위해 인스턴스를 생성하고 메서드가 끝나면 인스턴스를 해제하는 형태로 얕은 관계를 가진다.
class의 method안에 A a = new A()를 선언하여 사용한다. UML은 A --> B(A와 B를 일자로 표기)이다.

Assositation : 필드에 인스턴스를 선언하여 메서드 내부에서 쉽게 사용할 수 있도록 미리 선언하는 방식으로 메서드의 종료와 상관없이 계속해서 인스턴스의 클래스와 관계를 유지한다.
class의 Field안에 A a = new A()를 선언하여 사용한다. UML은 A -> B(A와 B를 일자로 표기)이다.

**equals method
'=='을 사용할 시 변수에 저장된 값을 비교하지만 reference변수의 경우 값이 같아도 가르키는 메모리 위치가 다르기 때문에 false가 나올수 밖에 없다.
그렇기에 reference변수의 상태 정보(Field 값)을 비교하기 위해 equlas라는 매서드를 사용한다.

**Object class
Object클래스는 모든 클래스의 최상위 클래스이다. 그래서 모든 클래스가 만들어질 때 Object클래스를 상속받게되며 이는 생략되어 보이지 않는다.
Object에 정의된 메서드들(toString(), equlas)는 모든 상황을 통제하도록 만들어지지 않아서 사용하기 위해서는 class에서 Overrinding하는 과정이 필요하다.

오늘의 용어 정리 및 수업 내용

로컬변수를 초기화해라
디폴트를 믿지말고 코딩을해라
인핸스드 포문
public class SelfWorkEF{
public static void main(String args[]){
int[] numbers = {1,5,2,3,5,1,3,2,451,23};
for(int i : numbers){
System.out.print(i);
}
}
}

벡터
Vector란 Collection 프레임워크의 일부이며 java.util 패키지에 소속되어 있습니다
ArrayList와 동일한 구조를 가지며 배열의 크기가 늘어나고, 줄어듬에 따라서 자동으로 크기가 조절이 됩니다
Vector의 특이한 점이라면 항상 동기화되어있고 Collection 프레임워크에 없는 메서드들을 사용이 가능합니다
하지만 동기화라는 특징이 있어 스레드가 아닌 환경에서는 거의 사용이 되지 않습니다
그리고 항상 동기화되므로 스레드 환경에서의 안정성은 높지만 ArrayList와 비교하여 추가, 검색, 삭제의 성능은 떨어지는 단점이 있습니다

스택구조와 큐구조
스택은 동전쌓기로 선입후출
넣을때 push, 뺄때 pop, peek
큐구조는 터널구조로 선입선출
넣을때 value, 뺄때 poll, peek

업캐스팅 다운캐스팅
좀더 큰 자료형의 범위에는 자동적으로 up캐스팅되어 포함됨
Animal a = new Dog();

Dog a = (Dog)a;
캘린더는 추상화클래스였다
날짜는 계속해서 바뀌니 자기들이 저장해주겠다 이런의미

쓰는 표기법도 진화를 시켜야할때가 됐는데..
Prob printSeason = new Prob();
= new Prob().printSeason();
이라는데 정확히 적은지 모르겠다.

public class SelfWorkEF{
public static void main(String args[]){
int[] numbers = {1,5,2,3,5,1,3,2,451,23};
for(int i : numbers){
System.out.print(i);
}
}
}
오토박싱 오토언박싱
박싱 : 기본 타입 데이터에 대응하는 Wrapper 클래스로 만드는 동작
언박싱 : Wrapper 클래스에서 기본 타입으로 변환
public void add15(int intValue,double doubleValue,boolean boo){
//==> Autoboxing 기능 이해 :: Method add14() 비교
Integer i = intValue; //내부적수행 ==>Integer i = new Integer(intValue);
Double d = doubleValue; //내부적수행 ==>Double d = new Double(doubleValue);
Boolean b = boo; //내부적수행 ==>Boolean b = new Boolean(boo);

exception도 컨트롤 해야한다.
예외처리라 한다.
이를테면 프로그래밍상 컴파일에서는 문제없이 정상적으로 수행되고
실행중에 발생하는 오류사항을 대체로 예외로 지정합니다.
배열접근 정수를 0으로 나누는 경우
런타임 에러, 네트워크에러에 해당하는 상황에 프로그램 구동상 문제가없는 범위내에서
에러를 대처하는 방법은 try catch문으로 해결할수있다.
try는 해당수행내용이고 catch문은 그상황에서 일어나는 문제에대한 메시지를 출력?하는 방법인데
catch문은 다중으로 지정할 수 있으며
이렇게 다중으로 catch문을 지정할때 하위하이라키항목일수록 위로, 상위하이라키 항목일수록 아래로 내려서
세부적인 설명을 받을 수 있게끔 해야한다.

//try {
////예외발생할 가능성이 있는 문장
// }catch(Exception1 e1) {
// //Exception1이 발생했을 경우, 이를 처리하지 위한 문장적는다.
// //보통 이곳에 예외메세지를 출력하고 로그로 남김.
// }catch(Exception2 e2) {
// //Exception2이 발생했을 경우, 이를 처리하지 위한 문장적는다.
// }catch(ExceptionN eN) {
// //ExceptionN이 발생했을 경우, 이를 처리하지 위한 문장적는다.
// }finally{
////예외발생여부에 관계없이 항상 수행되어야 하는 문장적는다.
// }

에러노트를 만들자...
throws란? 한마디로 하자면 "자신을 호출하는 메소드에 예외처리의 책임을 넘긴다" JRE에서 해당파트에 throw하고
다시 그 파트에서 jre로 throw하면 끝낸다.
한가지 예외상황에 대해 각각 불러오는 곳에서 다른 방법으로 예외처리를 하고싶을때 사용

@@@@@@@@@@콜바이밸류
Call by Value와 Call by Reference는 함수의 호출 방식을 의미한다.

  • 값에 의한 전달 - Call by Value
    메소드를 호출할 때 단순히 값을 전달하는 형태 자바의경우기본형변수의 호출을 가리켜 Call by Value라 하고,
    메모리의 접근에 사용되는 주소 값을 전달하는 형태의 인스턴스호출을 가리켜 Call by Reference라 한다.
    즉, 이 둘을 구분하는 기준은 함수의 인자로 전달되는 대상이다.

@@@@@@@@@@콜바이레퍼런스

encoding : 암호화를 의미하며 어떠한 정보를 정해진 규칙에 따라 변화하는 것
decoding : 암호화와 반대되는 개념을 가지며 암호화된 정보를 정해직 규칙에 따라 복호화하여 변화시키는 것을 말한다.
software적 객체 : API를 보면 현실세계의 다양한 기능들을 추상화한 형태이다. 이를 바탕으로 소프트웨어적 기능을 활용할 수 있도록 하는데 이것이 software적 객체이다.
ascii code : 7비트를 가지고 알파벳, 공백, 쉼표, 특수문자 등을 표현하는 문자체계이다. 출력 못하는 33개와 출력 가능한 문자 95개로 이루어진다.
Deprecated Method : Static Method, Instance Method, Concrete Method, 와 함께 나누어지는 기준이며, 이전 버전에서 사용하였고, 현재도 사용 가능하지만
편의성을 갖는 발전되 메서드가 생성되어 사용되지 않는 메서드.
Generic() : 데이터 형식에 의존하지 않고, 하나의 값이 여러 다른 데이터 타입들을 가질 수 있도록 하는 방법으로 로 표현하며
E는 element를 뜻한다. E의 값에 따라 해당 Collector가 어떤 데이터타입을 가지고, 리턴할지 결정하여 묵시적, 명시적 형변환을 해야하는 번거로움을 줄인다.
Collection : 데이터의 집합, 그룹을 의미하며 다양한 형태로 데이터를 정의하고, 다룰 수 있다. 쉽게 말해 자료구조라고 말할 수 있다.
Exception : 예외는 개발자들의 실수로 인해 발생하는 오류로 try/catch, Throws를 이용해 예외에 대한 대비를 할 수 있다.
stackTrace : 예외가 발생한 지점까지 추적하는 기술로, 예외 발생 지점까지의 메모리를 탐색하여 stack형태로 출력하게 된다.

**생성자 추가 내용
생성자를 정의하지 않으면 default로 기본 생성자를 만들어준다. 하지만 생성자를 하나라도 정의해 놓는다면 default 생성자는 생성되지 않고
정의해놓은 생성자를 사용해야 한다. => 오류를 발생하지 않기위해 기본생성자를 선언하는 습관이 필요.

**information hidding 응용

  1. 추상화 class를 선언한 후 getInstance()를 사용해 현재 class에서 오버라이딩하여 생성 후 인스턴스 반환 ex) Calender/ Calender클래스에서
    내부에서 자체적으로 오버라이딩하여 현재 시간을 생성할 때마다 초기화 해야하기 때문에 사용한다.
  2. 생성자를 private로 선언한 후 getInstance()메서드 정의하여 사용.

**wrapper 클래스
8가지 기본 자료형을 객체로서, reference하여 사용하기 위해 각 클래스의 이름으로 클래스를 만들어 인스턴스를 생성할 수 있도록 한다.
ex) Integer k = new Integer(int i);

**Collections
다양한 데이터 타입을 capcity에 수용하고, 가변적인 메모리크기를 할당하기 위해 사용하는 자료구조 형태
genelic을 사용해 자료형을 정의해주고 사용하며 편의성이 더욱 증대되었다.

  1. Vector, ArrayList, Stack => index를 이용해 자료 관리
  2. Map => Key,Value 를 이용해 자료관리
  3. Set => 중복을 제한하고 index를 이용해 자료 관리

**예외처리
예외처리를 통해 오류 상황을 확인하고, 인지할 수 있도록 하여 오류 대응이 쉽게 하여 보안성이 높은 프로그래밍을 지향해야 한다.
자바 클래스들의 최상위 클래스는 Object, Exception들의 최상위 클래스는 Exception이다.
예외처리를 throw 해줄 때 stack구조로 표현한다. => StackTrace() - debuging에 사용
catch문에 포함된 클래스는 Object미만의 상속관계부터 사용 가능하다. ex) Object -> Throwable -> Exception -> RuntimeException -> ~~~
finally에 해당하는 내용은 return으로 종료된 후에도 실행되도록 함.(System.exit(0)은 프로세스 종료이므로 수행x
catch문은 else if와 같이 다중으로 사용 가능하며 맨 위에 설정된 Exception 종류는 최하위 Exception클래스여야 하며 밑에 정의될 수록 상위클래스로 정의해야 한다.throws
throws는 호출한 쪽으로 예외를 던져 자신이 오류를 처리하는 것을 회피한다.

**checked Exception vs unchecked Exception
checked Exception : 개발자가 처리할 수 없는 예외 처리로 컴파일 단계에서 확인 가능하며, 반드시 throws,try/catch로 예외처리를 해야한다.
========> RuntimeException을 상속받지 않는 Exception클래스는 모두 unchecked Exception이라고 볼 수 있다.
ex) NullPointException, IndexOutOfBoundException, 등등

unchecked Exception : 개발자가 처리할 수 있는, 실수로 발생한 예외로 충분히 예상가능한 예외이다. 그래서 예외처리가 없더라도 default로 프로그램에서
에러메세지를 출력해주며 예외처리가 강제되지 않는다.
ex) IOException, SQLException 등
========> RuntimeException을 상속받지 않는 Exception클래스는 모두 unchecked Exception이라고 볼 수 있다.

오늘의 용어 정리 및 수업 내용

사용자정의예외이유
스로이유

안쓰는이유 흔하지않음

이너클래스 들어갊으로해서생성없이멤버됏으니그냥쓸수잇음
안드로이드에서 이벤트처리함

이너멤버 클래스안으로들어감
이너로컬 메서드안으로들어감

이너어나니머스(중요)

인 인풋
아웃 아웃풋

flush()는 현재 버퍼에 저장되어 있는 내용을 클라이언트로 전송하고 버퍼를 비운다. (JSP)
API에 의하면

OutputStream에 속한 flush()는
Flushes this output stream and forces any buffered output bytes to be written out.
출력 스트림과 버퍼된 출력 바이트를 강제로 쓰게 한다.

그리고 buffer가 다 차기 전에 프로그램을 종료하면 buffer에 들어있는 내용은 파일에 쓰여지지 않는다.
그 때 flush()를 호출하면 buffer의 내용이 파일에 쓰여진다.

flush()를 검색하다보니 같이 나오는 메소드가 바로 close()
flush()와 close()를 같이 쓰는데,
사실 close 함수가 내부적으로 flush함수를 호출한다고 한다.

사용자가 원할 때 버퍼를 비워주는 것으로 버퍼를 비우는 것은 IO에서는 출력하는 것 이겠고, 네트워크에서는 버퍼의 내용을
클라이언트나 서버로 보내는 것이겠지. 여기서 사용자가 원할 때라는 말이 포인트인 것 같다.

for (int j=2;j<primeArray.length ;j++ )
{

		if(primeArray[j]==prime)
		{	
			
			continue;
		}
		else{
			for(int k=j*2;k<primeArray.length;k+=j){
			k = j*2 
			
				//k+=j 인 이유 : j=2, k=4 ,6 ,8 ,10 ,12, 14, 16, 18 배수가 더 한 횟수니까~
				primeArray[k]=prime;
				//System.out.println(j); => j에 0값을 넣으면 에러가 나는 이유
			} // k-for
		}//if

parsing : 어떤 일정한 문법을 토대로 나열된 데이터를 가공하기 쉬운 상태로 바꾸는 것( ex)CSV를 기준으로 문자열을 나누는 작업)

throw : 예외를 발생시키는 keyword, throw new Exception의 형태로 사용, 보통 throw로 예외를 발생시키고 throws를 통해 예외처리를 넘기는게 일반적
유효성 검사를 exception을 활용해 사용할 수 있다.

Inner member class : A class안에 B class를 선언하는 형태로 B클래스는 상속, 실체화, 의존, has a 관계를 가질 수 없다. 클래스 내부에서 B클래스를 인스턴스 생성없이
직접 참조 가능하다. 표기법 - A$B.class

Inner Local class : A class의 메소드 안에 B class를 선언하여 사용하는 것으로 메소드안에 지역변수처럼 취급하며 사용한다.
표기법 - A$1B.class

Inner anonymous class : 클래스의 이름을 생략하고 사용하는 방법으로 일시적으로 한 번 사용하고 버리고, 재사용하지 않는다.
표기법 - %1.class(이름이 없고 넘버링만, 유령 클래스라고도 불림)
사용법 - new public class B extends A{~~~} => new A(){~~~} 클래스의 이름 축약, B의 인스턴스를 생성하고 있는 모양.

synchronized : multi-thread에 동기화를 제어하는 경우에 사용되는 keyword로 공유자원에 차례로 접근할 수 있도록 동기화 작업 필요

AWT(Abstract Window Toolkit) : 윈도우에서 GUI프로그래밍을 위한 도구, Java로 구현하지 않고 O/S의 컴포넌트를 그대로 사용(O/S에 종속)

process : 컴퓨터에서 실행되는 컴퓨터 프로그램. 여러 개의 프로세서를 사용하는 것을 멀티프로세싱, 스케줄링 작업으로서 표현되기도

Block : API를 호출한 쓰레드가 API의 호출한 작업이 끝날때 까지 다른 동작을 하지 않고 해당 작업에만 신경쓰도록 하는 것.
IOblock을 통해 단방향의 통신을 유지하도록 한다.

**char의 사용
char는 아스키코드에서 숫자로 처리되어 char에 숫자를 더하여 연산하는 행위가 가능하다.
ex) char c1 = '9';
int i1 = c1 - '0'; // 57 - 48 = 9

**InputStream, OutputStream
데이터를 받아들이는 행동을 추상화한 클래스가 InputStream, 데이터를 출력하는 행동을 추상화한 클래스가 OutputStream
byte단위로 데이터를 읽고 쓰는 행위를 하며 주로 파일, 이미지 등을 다룰때 사용된다. 각각 Input, Output을 사용하는 클래스들의
최상위 메서드 역할을 한다.

**Reader, Writer
InputStream, OutputStream과 동작은 유사하지만 문자 단위로 데이터를 읽고 쓰는 행위를 한다. 즉 byte단위로 문자를 읽으면
깨질수 있는 위험이 존재하는데 이를 방지하기 위해 Reader, Writer가 등장하였다.

**InputStreamReader, OutputStreamWriter
각각 Reader, Writer을 상속받고 있으며, 생성자의 인자 값을 InputStream, OutputStream으로 받아 두 클래스의 API를 모두 활용할 수 있도록
설계한 내용이다.
==> InputStreamReader isr = new InputStreamReader(InputStream in)
==> Reader isr = new InputStreamReader(InputStream in) - 다형성에 의해 가능

**Java io의 특징

  1. 단방향 model : 입력과 출력을 분리하여 한방향으로 진행된다는 특징을 가진다.
  2. FIFO : 제일 먼저 입력된 값은 버퍼에 FIFO형태로
  3. IOBlock : 단방향 통신을 유지하도록 Input이 발생할 때 Output이 간섭하지 못하도록 막는 작업을 말한다.

**StreamReader, StreamWriter => day8 I/O파트 코딩
.write() => 버퍼에 내용 입력
.read() => 파일을 읽어오는 작업
.flush() => 버퍼에 저장된 내용을 출력하는 작업
.close() => Stream과 버퍼의 연결을 끊는 작업

3-2 searching for elements , 3-3 events, 3-4 팥2 3-5

원하는 값을 불러오는 방법에는 여러가지 있다.

getElementById >> 하나의 값
getElementsByClassName >> 배열
getElementsByTagName . . . >> 배열

위에서 id 빼고는 배열을 가져오기 때문에 title.innerText 와 같은 방법은 사용할 수 없다.

Grab me3
처럼 Id를 가진 태그의 하위 태그를 선택하고 싶을 때 위의 방법으로는 한계가 있다.
이때 사용하는 게 querySelector/querySelectorAll

const title = document.querySelector(".hellos h1"); 와 같이 쓰면
.hellos h1 마치 css 선택자 처럼 원하는 요소를 선택 가능
console.log((title.innerText = "히힛")); 화면에 글자가 히힛으로 바뀐다

** 단 hello라는 class를 가진 h1태그가 여러개인 경우 querySelectorAll을 써야 한다.
선택자가 id인 경우엔 #hello
만약 요소를 특정하지 않고 선택자만 쓰는 경우

const title = document.querySelector(".hellos");

Grab me3

hello

라고 써도 grab me3와 hello 모두 선택됨
그리고 여기서 만약 업데이트를 하면

console.log((title.innerText = "히힛"));
결과는 grab me3, hello 둘 다 사라지고 히힛으로 대체된다.
☆★☆★☆★쿼리는 데이터베이스에게 특정한 데이터를 보여달라는 클라이언트(사용자)의 요청
3.3

  • 지금 js파일이 있기 때문에 js를 통해 html의 내용을 가져올 수 있는 거
  • document가 html이 js파일을 load하기 때문에 존재 → 그 다음에 browser가 우리가 document에 접근할 수 있게 해줌
  • element의 내부를 보고 싶으면 console.dir()
    기본적으로 object로 표시한 element를 보여줌(전부 js object임)
    그 element 중 앞에 on이 붙은 것들은 event임
  • event: 어떤 행위를 하는 것
    모든 event는 js가 listen할 수 있음
  • eventListener : event를 listen함 → js에게 무슨 event를 listen하고 싶은 지 알려줘야 함
  • title.addEventListener("click") : 누군가가 title을 click하는 것을 listen할 거임 → 무언가를 해줘야함

// 리터럴리 event를 listen함. 클릭이라적으면 클릭에 대한 이벤트가 생겻을때 무언가를 하게함
// 나대신 자스가 실행버튼을 눌러주게하는 방법은? ()괄혼데 어케쓰노?
// 팝업광고같은거에 써먹겟구나! 숫자를 세서 그순서대로 관심도를 나열한다거나?
유저가 타이틀을 클릭하면

const title = document.querySelector("div.hello:first-child h1");

function handleTitleClick(){
title.style.color = "blue";
}
title.addEventListener("click",handleTitleClick);
//click하면 handleTitleClick이라는 function이 동작하길 원함
//그래서 handle~ 함수에 () 를 안넣은 것임
//즉, js가 대신 실행시켜주길 바라는 것임!

  • function이 js에게 넘겨주고 유저가 title을 click할 경우에 js가 실행버튼을 대신 눌러주길 바라는 것임( 직접 handleTitleClick(); 이렇게 하는 것이 아니라)
  • 함수에서 () 이 두 괄호를 추가함으로써 실행버튼을 누를 수 있는 거임
  • 요약하면 페이지에서 엘리멘트찾고 엘리멘트에서 이벤트리스너를 추가하고 클릭 입력 엔터누르거나 할때 그런이벤트를 리슨하고 그것에 리액트를 하게끔 할것이다!

listen하고 싶은 event를 찾는 가장 좋은 방법은, 구글에 찾고 싶은 element의 이름, 예를들어 h1 html element mdn을 검색.
우리는 javascript의 element를 원하니, 링크에 Web APIs라는 문장이 포함된 페이지를 찾아. 왜냐면 이건 JS관점의 HTML Heading Element란 의미야.
너무 복잡하면 element를 console.dir로 출력해서 on~ 이라고 적혀있는걸 사용하면 됨.

title.title.onClick=handleTitleClick; = title.addEventListener("click", handleTitleClick); 이거슨 동일

function handleMouseEnter() {
title.innerText = "Mouse is here!"
}
function handleMouseLeave() {
title.innerText = "Mouse is gone!"
}
title.addEventListener("mouseenter", handleMouseEnter);
title.addEventListener("mouseleave", handleMouseLeave"

"title.onclick = handleMouseEnter;
title.addEventListener(“mouseenter” , handleMouseEnter);

위에 두 코드는 동일하나 addEventListener를 선호하는 이유는
removeEventListener을 통해서 event listener을 제거할수있기 때문이다.

document에서 body,head,title 은 중요해서 언제든
ex) document.body 로 가져올수있지만
div나 h1 등 element 들은 querySelector getElementById등으로 찾아야한다.
ex) document.querySelector(“h1”);

window는 기본제공
function handleWindowResize(){
document.body.style.backgroundColor = “tomato”;
}
function handleWindowCopy(){
alert(“copier”);
}

window.addEventListener(“resize”, handleWindowResize);
window.addEventListener(“copy”, handleWindowCopy);"
3-1~ 3-4까지의 개략적 코드
const h1 = document.querySelector("div.hello:first-child h1");
h1.style.color = "green"; //awesome!
h1.innerText = "Hellooooo its me";

function handleTitleClick(){
h1.innerText = "h1 was clicked!"
}
function handleMouseEnter(){
h1.innerText = "mouse is here!";
}
function handleMouseLeave(){
h1.innerText = "mouse is gone..";
}
function handleWindowResize(){
document.body.style.backgroundColor = "tomato";
}
function handleWindowCopy(){
alert("Copier!");
}
function handleWindowOffline(){
alert("SOS NO WIFI NOW!");
}
function handleWindowOnline(){
alert("systerm all green!");
}
// 옹ㅋㅋ 재밋당
h1.addEventListener("click", handleTitleClick);
h1.addEventListener("mouseenter", handleMouseEnter);
h1.addEventListener("mouseleave", handleMouseLeave);
window.addEventListener("resize", handleWindowResize);
window.addEventListener("copy", handleWindowCopy)
window.addEventListener("offline", handleWindowOffline);
window.addEventListener("online", handleWindowOnline);

221230 리눅스 5일차

자가진단법
재밌으면그대로간다.
그냥쳐보자...........
왼쪽에 코드 오른쪽에 코드치다보면 오류검정능력이늘어난다...
www . naver .com
호스트네임 도메인
(네임서버가하는일)

cmd ipconfig nslookup ## // 주소넣기

ip address ipv4
OOO.OOO.OOO.OOO
127.0.0.1

0255까지의 4개
2^8.2^8.2^8.2^8
255.255.255.255
42억9천만의 경우의 수가 있음
자세한것은 교재 154p 참고
2^8 -> 1byte
0
255 = 256 경우의 수
2^16 -> 2byte
65536
2^32 -> 4byte
4294967296
2^64 -> 8byte
18446744073709551616
2^128 -> 16byte
340,2823,6692,0938463463374607431768211456
3백40간 2천8백2십3구

DHCP 다이나믹호스트컨피규레이션프로토콜 == 유동ip 자동할당

LAN = Local Area Network
랜에서 외부로 나가려면 게이트웨이를 통과해야한다.
논리적으로 게이트웨이기능을 하는 장비가 Router 라우터 by시스코
내부통신 = 인터넷연결없어도 가능
외부통신 = 게이트웨이 + 라우터 필요

넷을 쪼개는것 == 서브넷마스크
공유기 = 소형라우터
MAC어드레스 = 랜카드 고유번호
NETWORK주소 0번 동네이장
Broadcast 255번 동네방송
netmask = 동네크기
2^10 = 1024 -1 0~1023 = 1024개조건

152p 154p 156p
ether 08:00:27:4e:1b:4f == MAC어드레스 (16진수임)
lo: 루프백

root@l:~# ifconfig
enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.2.15 netmask 255.255.255.0 broadcast 10.0.2.255
inet6 fe80::a00:27ff:fe4e:1b4f prefixlen 64 scopeid 0x20
ether 08:00:27:4e:1b:4f txqueuelen 1000 (Ethernet)
RX packets 419417 bytes 609911579 (609.9 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 72628 bytes 5523335 (5.5 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0 //내주소
inet6 ::1 prefixlen 128 scopeid 0x10
loop txqueuelen 1000 (Local Loopback)
RX packets 226 bytes 20708 (20.7 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 226 bytes 20708 (20.7 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

PORT STATE SERVICE
22/tcp open ssh
25/tcp open smtp
80/tcp open http
587/tcp open submission
3306/tcp open mysql
8080/tcp open http-proxy

nl /etc/resolv.conf

nameserver 127.0.0.53
nameserver 168.126.63.1
DNS 일종의 네비게이터
nslookup을 비롯한 다양한 기능은 203p부터

필수 => 네트워크 넷마스크
우분투 네트워크 관련 명령어로 검색해서 내용 추가

전달및 정리용

package day01;

public class User02 {
String name;
int javaLevel;
//constructor
public User02(){
System.out.println("Constructor Method");
name = "홍길동";
javaLevel = 0;
}
//method
//getter Method definition
public String getName(){
return name;
}

public int getJavaLevel(){
    return javaLevel;
}
//main method
public static void main(String[] args) {
    System.out.println("==========");
    User02 user = new User02();
    System.out.println("==========");

    System.out.println("name : "+user.getName());
    System.out.println("javaLevel: "+user.getJavaLevel);
}//end of main

}//end of class

public class User03 {
public User03(){ //왜 여기 괄호가 있어야만 시스템이라는 키워드를 호출할 수 있나?
System.out.println("나는 생성자");
name = "홍길동";
javaLevel = 0;
}//end of main?
public User03(String str){
System.out.println("나는 String 을 인자로 받아 name을 초기화 하는 생성자");//조건식같이 반응하는건가?
name = str;
}
public User03(int i){
System.out.println("나는 int를 인자로 받아 javaLevel을 초기화 하는 생성자");
javaLevel = i;
}
public User03(String str, int i){
System.out.println("나는 String, int를 인자로 받아 name, javaLevel을 초기화 하는 생성자");
name = str;
javaLevel = i;
}
//Method
//getter Method definition
public String getName(){
return name;
}
public int getJavaLevel(){
return javaLevel;
}
//main Method
public static void main(String[] args) {
System.out.println("============");
User03 user01 = new User03();
System.out.println("name : "+user01.getName());
System.out.println("javaLevel : "+user01.getJavaLevel());

    System.out.println("==================");
    User03 user02 = new User03("홍길순");
    System.out.println("name : "+user02.getName());
    System.out.println("javaLevel:"+user02.getJavaLevel());

    System.out.println("===========");
    User03 user03 = new User03(100);

    System.out.println("name: "+user03.getName());
    System.out.println("javaLevel: "+user03.getJavaLevel);

    System.out.println("==============");
    User03 user04 = new User03("이순신",200);
    System.out.println("name: "+user04.getName());
    System.out.println("javaLevel: "+user04.getJavaLevel());
    }//end of main

}// end of class

bitcamp 자바 기초특강 day01 22.12.21 - pt2

package day01;
11.

/* 연산자 03
비교연산자의 경우 결과값이 true/false의 boolean 데이터타입이 나오게 된다.
<, <=, >, >=, ==, !=이 있다.

*/

public class Ex11Operator03 {

public static void main(String[] args) {
	int num1 = 4;
	int num2 = 5;
	System.out.println("num1 < num2 is " + (num1< num2));
	System.out.println("num1 < 0 is " + (num1 < 0));
	System.out.println("num1 < 4 is " + (num1 < 4));
	System.out.println("num1 <= 4 is " + (num1 <= 4));
	System.out.println("num1 == 4 is " + (num1 == 4));
	System.out.println("num1 != 4 is " + (num1 != 4));

// 단, 참조형 데이터타입의 값이 같은지 확인할 때에는
// 비교 연산자를 사용해선 안된다!
// String 변수 string1, string2, string3을 선언하고 각각 "abc"라는 글자를
// 3가지 방법으로 초기화해보자
String string1 = "abc";
String string2 = new String("abc");
String string3 = string1;
String string4 = "a"+"b"+"c";
System.out.println(string1);
System.out.println(string2);
System.out.println(string3);
System.out.println(string4);
// string1, string2 string3이 모두 abc만 들어가있는지 확인하기 위해서
// string#: [###]의 형태로 출력해보자
System.out.println("string1: [" +string1+ "]");
System.out.println("string2: [" +string2+ "]");
System.out.println("string3: [" +string3+ "]");
// ==를 사용하여 string1~3까지 모두 같은 갓을 가지고 있는지 확인해보자
System.out.println("string1 == string2: " + (string1 == string2));
System.out.println("string1 == string3: " + (string1 == string3));
System.out.println("string2 == string3: " + (string2 == string3));
System.out.println("string3 == string4: " + (string3 == string4));
// 왜 2번과 나머지는 다른가? 비교연산자는 현재 해당 공간에 저장된 값을 기준으로 비교를 한다.
// 참조형 데이터타입의 변수/상수는 해당 공간에 실제 값이 아닌
// 실제 값이 저장된 공간의"주소값"을 저장한다.
// 즉, 참조형 데이터타입 공간을 비교연산자로 비교하면
// 실제값이 아닌, 주소값을 기준으로 비교를 실행하게 된다!

// 참조형 데이터타입의 값을 비교를 할 때에는 비교연산자가 아닌
// equals()라는 메소드를 통하여 비교를 해야 올바른 결과값이 나오게 된다.
System.out.println("string1.equals(string2): " + (string1.equals(string2)));
System.out.println("string1.equals(string3): " + (string1.equals(string3)));
System.out.println("string2.equals(string3): " + (string2.equals(string3)));
}

}

package day01;
/* 연산자04
논리연산자는 논리형 데이터타입인 boolean데이터타입의 값에 대한 연산을 한다.
폰트는 콘솔러스체가 좋아용
&& = and 왼쪽 오른쪽 모두 true일 경우에 true반환
|| = or 왼쪽 오른쪽 하나라도 true일 경우에 true반환
*/

public class Ex12Operator04 {

public static void main(String[] args) {
	//&& and
	System.out.println("true && true: " + (true && true));
	System.out.println("true && false: " + (true && false));
	System.out.println("false && true: " + (false && true));
	System.out.println("false && false: " + (false && false));
	// || or
	System.out.println("true || true: " + (true || true));
	System.out.println("true || false: " + (true || false));
	System.out.println("false || true: " + (false || true));
	System.out.println("false || false: " + (false || false));
	// ! 
	// !는 해당 boolean값의 반대 값을 연산한다. 
	boolean isTrue = false;
	System.out.println("!isTrue: " + !isTrue);

// !isTrue True가 아닌 False를 적용했으므로 True
System.out.println("isTrue: " + isTrue);
// isTrue자체는 왜 false지?
// int 변수에 저장된 값이 1부터 10사이의 숫자인지 확인하기
// 1 <= x <= 10
int number = 4;
System.out.println("1 <= number <= 10: " + (number >= 1 && number <= 10));
// 컴퓨터는 한줄에 이루어진 코드가 있다고 해서 동시에 계산하는 것이 아니라
// 우선순위에 따라서 한번에 한개씩 계산하므로 1 <= number <= 10은 1<=number부터 계산하여 트루펄스로 나온다
// 하지만 해당 결과값은 boolean처리이므로 10과 비교할수없기때문에 에러가발생함 그니까 위에 쓴것처럼 &&를 넣어서 해결
// 또한 프로그래밍에는 2개의 값을 비교해야하는 경우, 주로 왼쪽에 변수를 적어주게 된다.
}

}

13 daily test
package day01;
/* 다양한 변수를 만들어서
화면에 다음과 같이 출력되게 코드를 작성해보세요.
----결과화면
학생 번호: ### int
학생 이름: ### str
국어 점수: ### int
영어 점수: ### int
수학 점수: ### int
총점: ###
평균: ##.## double
*/
public class Ex13Greadebook01 {

public static void main(String[] args) {
	int studentNumber = 111 ;
	String studentName = "이현석";
	int koreanScore = 100;
	int englishScore = 95;
	int mathScore = 90;
	int totalScore = koreanScore + englishScore + mathScore;
	double averageScore = (koreanScore + englishScore + mathScore) / 3;
	System.out.println("학생 번호: " + studentNumber);
	System.out.println("학생 이름: " + studentName);
	System.out.println("국어 점수: " + koreanScore);
	System.out.println("영어 점수: " + englishScore);
	System.out.println("수학 점수: " + mathScore);
	System.out.println("총점: " + totalScore);
	System.out.println("평균: " + averageScore);
}

// 이걸 특정값에 입력받아서 작성하게끔하면 자동프로그램이 되는건가?
}

폴더채로 압축해서 같은 이름으로 지정하고 실행해볼것

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.