참고 : 자바 Map
작업 12, DBUtil, SecSql, SqlErrorException 추가
작업 13, DBUtil을 활용하여 소스코드 정리
작업 14, 게시물 삭제 기능 구현
작업 15, 게시물 상세보기 구현
작업 16, 회원가입 기능 구현중, 비밀번호 체크, 필수입력

자바 map 검색,프로그래머스 sql 풀기

MIN MAX COUNT AVG
GROUP BY
ORDER BY
HAVING 문법 정리

    	Connection conn = null;
    	PreparedStatement pstmt = null;
    	ResultSet rs = null;

이것들이 필요. 사용 문법은 찾아보면 된다

sql.append 그냥 쓰는거다 도구 오류 잡기 쿼리랑 비슷한 느낌
저절로 띄어쓰기 해준다

DBUtil.row rows 단수 복수 차이가 있음

https://velog.io/@kkk125504/%EC%9E%90%EB%B0%94-JDBC-%EA%B2%8C%EC%8B%9C%ED%8C%90-4%EC%9D%BC%EC%B0%A8

좋은 링크

'DB' 카테고리의 다른 글

DBMS,Spring 3월 24일 6회차  (0) 2023.03.30
DBMS,Spring 3월 23일 5회차  (0) 2023.03.30
DBMS,Spring 3월 21일 3회차  (0) 2023.03.30
DBMS,Spring 3월 17일 2회차  (0) 2023.03.30
DBMS,Spring 3월 16일 1회차  (0) 2023.03.30

작업 6, 게시물 작성시 DB에 INSERT
작업 7, JDBC SELECT 테스트
작업 8, 게시물 리스팅 시 데이터를 DB로부터 가져오기
작업 9, 게시물 수정 기능 구현
작업 10, Main 클래스의 로직을 App 클래스로 이전
작업 11, 각 기능 내부에서 Connection 하지 않고 명령어 입력시 연결하도록

자바에서
insert ,select,update 기능 구현

select는 db에서 받는 값이라 ResultSet rs = null; 저장

join은 테이블끼리 연결
on 은 where의 느낌
그냥 join만 하면 모든 경우의수를 다 갖다 붙인다
-join 문제 풀어보기

'DB' 카테고리의 다른 글

DBMS,Spring 3월 23일 5회차  (0) 2023.03.30
DBMS,Spring 3월 22일 4회차  (0) 2023.03.30
DBMS,Spring 3월 17일 2회차  (0) 2023.03.30
DBMS,Spring 3월 16일 1회차  (0) 2023.03.30
DB 와 DBMS란?  (0) 2023.03.17

작업 2, JAM 시작
작업 3, mySql connector J 추가
작업 4, JDBC 연결 테스트
작업 5, JDBC Insert 테스트

모든 행(row)의 id 값은 유니크 해야한다.(ADD PRIMARY KEY(id))
auto_increment 를 걸기전에 해당 칼럼은 무조건 key 여야 한다.
auto_increment 는 보통 primary key에 건다

jdk15-java-spring 순으로 깔기 -> 집에서
c:\ 폴더에 C:\workspace_cgh 작업 폴더 만들기
영상보며 노트북에 깔기

JDBC 연결되려면 되어야 하는 조건
1.XAMPP 연결
2.Mysql 데이터가 있어야함 3.스프링 내에서 연결 문법 적기 4.연결 성공이 떠야함

!!!db.sql이란 폴더를 하나 만들어서
그때그때의 db값을 저장해본다!!! sql로그 실행 때 초기화 될 수 있어서
메모장 형식도 상관없다

db 커넥팅~오류잡기 코드는 복붙해서 쓴다
뭐가 어떤 느낌인지만 알면 됌

'DB' 카테고리의 다른 글

DBMS,Spring 3월 23일 5회차  (0) 2023.03.30
DBMS,Spring 3월 22일 4회차  (0) 2023.03.30
DBMS,Spring 3월 21일 3회차  (0) 2023.03.30
DBMS,Spring 3월 16일 1회차  (0) 2023.03.30
DB 와 DBMS란?  (0) 2023.03.17

쿼리문 외우기
데이터 타입 , 크기 검색

XAMPP 설정 MYsql ->집에서 할 것
sqlyog 깔기

sql 활용 1
sql 활용 2
sql 활용 3

데이터 정의어(DDL): 데이터베이스, 테이블, 인덱스 등 데이터의 구조를 정의하는 데 사용됩니다. 대표적인 DDL 명령어로는 CREATE, ALTER, DROP 등이 있습니다.

데이터 조작어(DML): 데이터베이스의 데이터를 조작하는 데 사용됩니다. SELECT, INSERT, UPDATE, DELETE 등이 대표적인 DML 명령어입니다.

데이터 제어어(DCL): 데이터베이스의 보안, 권한 등을 제어하는 데 사용됩니다. GRANT, REVOKE 등이 대표적인 DCL 명령어입니다.

데이터 검색어(DQL): 데이터베이스에서 데이터를 검색하는 데 사용됩니다. SELECT가 대표적인 DQL 명령어입니다.

'DB' 카테고리의 다른 글

DBMS,Spring 3월 23일 5회차  (0) 2023.03.30
DBMS,Spring 3월 22일 4회차  (0) 2023.03.30
DBMS,Spring 3월 21일 3회차  (0) 2023.03.30
DBMS,Spring 3월 17일 2회차  (0) 2023.03.30
DB 와 DBMS란?  (0) 2023.03.17

줄정렬 ctrl+a -> 쉬프트+tab

### 개념 - 이미지

img 태그는 열고 닫는 구조가 아닌 하나짜리이다.
img는 자식을 가질 수 없다.
src="이미지 URL"

###개념 - margin, padding

top,bottom,left,right가 있다
하나씩 지워가보면서 차이를 보자
https://codepen.io/jangka44/pen/PBGgQa

padding 영역 안쪽이냐

paddig : 0 0 0 0;
상 하 좌 우
padding : 10px; 하면 모두 적용

margin 영역 바깥쪽이냐

    margin : 0 0 0 0;
            상 하 좌 우

margin : 10px; 하면 모두 적용

###개념 - display:inline 에는 width, height, padding, margin이 제대로 작동하지 않는다.

말 그대로

###개념 - nth-child

- 첫번째 자식-

div:first-child {
background-color:blue;
}

-n번째 자식 짝수번째라면 2n 홀수라면 2n-1 n에는 변수가 들어간다 0부터~~-

- 수학 방정식 세운다고 생각하면 됌-

div:nth-child(2) {
background-color:gold;
}

-마지막 자식-

div:last-child {
background-color:green;
}

-마지막 n번째 자식-

div:nth-last-child(2) {
background-color:pink;
}

###개념 - 모든 보이는 엘리먼트의 부모는 body이고, 그의 부모는 html 이다.

codepen에서는 기본으로 틀을 제공하지만
까보면 html , head ,body등이 감싸고 있음
우리가 쓰는건 body안족 부분

###개념 - block 요소 좌측,가운데,우측 정렬하는 방법

div {
width:100px;
height:100px;
margin-left:0; /_ 이 코드는 사실 쓸 필요는 없다. 왜냐하면 원래 0 이니까 _/
background-color:red;
}

div:nth-child(2) {
background-color:gold;
margin-left:auto;
margin-right:auto;
}

div:nth-child(3) {
background-color:green;
margin-right:0;
margin-left:auto;
}

section {
border:5px dotted gray;
}

block 요소의 가운데 정렬 marjin-left,right 둘다 auto

###개념 - 클래스와 IDclass는 엘리먼트의 별명

지칭할때는 .을 붙인다
ex)

  <div class="a"></div>
  
  .a
  
  복수 별명은 띄어쓰기로 한다
  
  ex)

  <div class="a b"></div>
  
  .a
  .b
  div 이름이 3개
###개념 - border-radius
  
- 그냥 redius 호도법 생각하면 된다-
  
  div {
  width:15%; /* 부모 엘리먼트 너비 기준 */
  height:100px;
  background-color:red;
  display:inline-block;
  /* 모서리 50px를 둥글게 처리 */
  border-radius:50px;
  /* border-radius:50%; */
}
  
  
###개념 - inherit
  
부모와 자식의 속성은 각각부여
무조건 상속되는게 아니다
  
  
  
  
  
  <--HTML-->
    
    
관계
부모/자식
형/동생
태그
인라인 계열
span(div에서 display만 inline인 태그, 인라인 계열의 기본 태그)
a : 링크
img : 이미지
블록 계열
기본
div(구분, 적절한 태그가 생각나지 않을 때, 모르면 div, 블록 계열의 기본태그)
nav(내비게이션, 보통 메뉴 감쌀 때)
section(섹션)
article(아티클, 게시물)
제목
h1, h2, h3, h4, h5, h6
목록
ul, li : 순서 없는 목록
ol, li : 순서 있는 목록
    
    
<--CSS-->
  
  
노말라이즈
해당 엘리먼트에 기본적으로 적용되어 있는 디자인을 없애서 다시 평범하게 만든다.
a, body, ul, li, ol, li, h1, h2, h3, h4, h5, h6 은 사용하기전에 노말라이즈 해야 한다.
선택자
태그선택자 : div { ... }
자식선택자 : div > a { ... }
후손선태자 : div a { ... }
클래스선택자 : .menu-item { ... }
기본 속성
width, height, font-size, font-weight, letter-spacing, color, background-color, margin-top, margin-left, padding-top, padding-left, border, border-radius
레이아웃 속성
display
none : 사라짐
inline-block, inline : 글자화
block : 블록화
float : ??
position : ???

###개념 - 엘리먼트(배우)의 부모, 자식, 형제관계

나를 감싸는 엘리먼트 : 부모 엘리먼트
내가 감싸는 엘리먼트 : 자식 엘리먼트
같은 부모를 둔 엘리먼트 : 형제 엘리먼트

 nav의 부모 엘리먼트
<div>
 div의 자식 엘리먼트
  막내 nav엘리먼트의 인접 형
  <nav></nav>
div의 자식 엘리먼트
 첫째 nav엘리먼트의 인접 동생
  <nav></nav>
</div>

###개념 - 글자

  div {
  /* 글자의 두께 조절 */
  font-weight:normal;
  font-weight:bold;
  /* 기본폰트의 3배 */
  font-size:3rem;
  font-size:140px;
  /* 자간조절 */
  letter-spacing:-10px;
  color:#787878;
}

section {
  font-size:10rem;
  /*
  rgba 함수의 인자
  인자 1(red) : 0 ~ 255 까지 넣어서 실험
  인자 2(green) : 0 ~ 255 까지 넣어서 실험
  인자 3(blue) : 0 ~ 255 까지 넣어서 실험
  인자 4(alpha, 투명도) : 0 ~ 1 까지 넣어서 실험
  */
  color:rgba(255,0,0,0.5);
}


###개념 - a와 br

a 엘리먼트는 링크 버튼입니다.
 target 속성은 새 창으로 띄울지 여부를 정합니다.
 href 속성은 이동할 주소입니다.
<a href="https://to2.kr/bTn">bmx</a>

  br은 줄바꿈 엘리먼트 입니다.

<br>
<br>
<a href="http://www.naver.com/" target="_blank">네이버</a>



###개념 - 후손 선택자

 section 엘리먼트 안에 들어있는 a
 ` ` : 후손선택자
 ` > ` : 자식선택자
 선택자가 길면 우선순위가 높다

section a        # section  a # 이 상황에서는 자식선택자를 써도 된다.#
  {
  color:red;
}

/* 이 CSS 는 무시된다. */
a {
  color:pink;
}

/* 이 CSS 는 적용된다. */
a {
  color:green;
}


###개념 - text-align

  div {
  /* 절대로 자신을 정렬하는게 아니라. */
  text-align:left;
}

section {
  /* 자신이 가지고 있는 텍!스!트!를 정렬한다. */
  text-align:center;
}

nav {
  /* 글자가 아닌 엘리먼트도 정렬할 수 있을까? */
  /* 힌트 : display:inline-block 하면 엘리먼트가 `텍스트 화` 된다. */
  text-align:right;
}




```

자동정렬 컨트롤+쉬프트 +A or 화살표표시 포맷 htmle

<div><div>
  <section></section>
  
   두개는 아예 개념이 다르다
  
  <div>
    <section></section>
    </div>
  이건 부모 자식관계
  
    <div>
    <section>
      <nav></nav>
      </section>
    </div>
  
  
 nav는 section의 자식이자 div의 후손이다
  
  강제 줄바꿈 태그 <br>
  단독으로 쓰여 닫는태그가 없으므로 자식 못만든다
  
  <a href=""> </a> 클릭 태크
  <a href="" target="_blank"> </a>  코드펜에선 타겟 해줘야함
  
  <!-- ~~~~ -->  html 주석처리 기능
  /*   ~~~    */ css 주석 처리 기능
  
  [명령어] + 탭 -> 자동완성
  {컨텐츠} + 탭 -> 자동완성
  
  ex)
  
 a[href="#"][targer="_black"]{내용}*100 이러면 100개 한번에 가능
  
  
  > , + 의 차이점 파악 젠코딩
  
  ex)
a[href="#"][targer="_black"]{내용}
  +
  br
a[href="#"][targer="_black"]{내용}
  
  -추가 emmet 문법-
  
  
  /// 띄어쓰기는 후손이란 뜻, > 는 자식이란 뜻 전혀 다르다

div a{
font-size: 3rem;
color : red;
}

div > a{
font-size: 3rem;
color : red;
}

div {
/_ 절대로 자신을 정렬하는게 아니라. _/
text-align:left;
}

section {
/_ 자신이 가지고 있는 텍!스!트!를 정렬한다. _/
text-align:center;
}

nav {
/_ 글자가 아닌 엘리먼트도 정렬할 수 있을까? _/
/_ 힌트 : display:inline-block 하면 엘리먼트가 `텍스트 화` 된다. _/
text-align:right;
}

항상 블록인것,블록이 아닌것 구분 잘하기

글자의 기본값은 인라인이고
너비 높이의 영향 x
적용 하고 싶으면 인라인->인라인 블럭으로 설정

### 개념

div {
/_ 글자의 두께 조절 _/
font-weight:normal;
font-weight:bold;
/_ 기본폰트의 3배 _/
font-size:3rem;
font-size:140px;
/_ 자간조절 _/
letter-spacing:-10px;
color:#787878;
}

section {
font-size:10rem;
/_
rgba 함수의 인자
인자 1(red) : 0 ~ 255 까지 넣어서 실험
인자 2(green) : 0 ~ 255 까지 넣어서 실험
인자 3(blue) : 0 ~ 255 까지 넣어서 실험
인자 4(alpha, 투명도) : 0 ~ 1 까지 넣어서 실험
_/
color:rgba(255,0,0,0.5);
}

###

a 엘리먼트는 링크 버튼입니다.
target 속성은 새 창으로 띄울지 여부를 정합니다.
href 속성은 이동할 주소입니다.

<a href="https://to2.kr/bTn">bmx</a>

br은 줄바꿈 엘리먼트 입니다.
<br>
<br>
<a href="http://www.naver.com/" target="_blank">네이버</a>

###

div {
/_ 절대로 자신을 정렬하는게 아니라. _/
text-align:left;
}

section {
/_ 자신이 가지고 있는 텍!스!트!를 정렬한다. _/
text-align:center;
}

nav {
/_ 글자가 아닌 엘리먼트도 정렬할 수 있을까? _/
/_ 힌트 : display:inline-block 하면 엘리먼트가 `텍스트 화` 된다. _/
text-align:right;
}

/_ 마우스 올림을 받은 div _/
div:hover {
background-color:blue;
}
마우스 올리면 색이 바뀐다

`>` : 자식 선택자
div>section\*2>nav[tab키 입력]
`+` : 인접 동생선택자
div+section[tab키 입력]

두칸 이상 띄울 때는 `&nbsp;`
` &nbsp;` 공백 한칸을 의미

특수문자들은 검색해서 쓴다

html,css,js의 역할
html,css,js 목표
display
막대구현

 

 

더보기

태그 tag
다음과 같이 생긴것을 태그라고 합니다.
<a>

즉"<"와 ">"로 묶인 일련의 명령어 입니다.

태그에는 세가지 종류가 있습니다.

시작태그 : <a>
종료태그 : </a>
빈태그 : <br />, <hr />, <img />등
태그의 구성
시작태그는 "속성(attribute)"과 "값(value)"을 가질 수 있습니다.

<a href="http://opentutorials.org">

위에서 <a>시작태그는 속성과 값을 가지고 있는데
"href"는 속성이라고 하며 "http://opentutorials.org"를 값이라고 합니다.

엘리먼트 element
다음과 같이 생긴것들을 엘리먼트라고 합니다.

<p>이것은 문단입니다.</p>

<a href="http://opentutorials.org"> 오픈튜토리얼스 </a>

즉 내용을 포함해 시작태그와 종료태그까지를 엘리먼트라고 합니다.

또 이런것도 엘리먼트입니다.

<br />

빈요소(empty element)라고 하여 내용이 없는 경우를 말하며 <hr />, <img />와 같은 것들이 있습니다.

<> ~~ <> -> 태그 2개+ 컨텐츠 1개= 1개의 엘리먼트

태그는 여는태그,닫는태그 1쌍 총 2개로 이루어진다

컨텐츠는 화면에 보여진다
엘리먼트 한것은 화면과 1:1 대응이 되지 않는다(줄 바꿈 등)

css는 태그를 찾아 컨텐츠를 꾸민다
화면에 안보인다

명령어 tab하면 자동완성이 된다.or 컨트롤 + 스페이스

-웹페이지의 3가지 요소-
html요소를 배우, css를 스타일리스트 , 자바스크립트를 감독으로 비유한다

<div></div>
<section></section>
<ariticle></ariticle>
<nav></nav>
필수 외울 태그 4개

기본값을 눈에 익히고 그외의 차이점을 익힌다는 생각.

블럭 ->레고블럭

인라인->글자

자바와 마찬가지로 위에서 아래로 실행된다.
덮어쓰기 된다는 말

```
block 요소의 너비 : 너비를 지정하지 않는 한, 최대한 늘어난다.
block 요소의 높이 : 높이를 지정하지 않는 한, 최소한으로 줄어든다.
block 요소의 줄사용 : 한 줄을 무!조!건 혼자 쓴다.(세로모드)
inline-block 요소의 너비 : 너비를 지정하지 않는 한, 최소한으로 줄어든다.
inline-block 요소의 높이 : 높이를 지정하지 않는 한, 최소한으로 줄어든다.
inline-block 요소의 줄사용 : 가능하면 최대한 한줄을 여럿이서 쓴다.
div, section, nav, article의 기본 display 속성값은 block 이다.
```

외우기보단
많이 상황별로 해보기
예측 -> 실행 -> 확인

 

for (int i = 1; i <= 5; i++) {
  for (int j = 1; j <= i; j++) {
    System.out.print("*");
  }
  System.out.println();
}

기초 삼각형 모양

int n = 5;
for (int i = 1; i <= n; i++) {
  for (int j = 1; j <= n - i; j++) {
    System.out.print(" ");
  }
  for (int j = 1; j <= 2 * i - 1; j++) {
    System.out.print("*");
  }
  System.out.println();
}

 

 

정삼각형

 

 

for (int i = 5; i >= 1; i--) {
  for (int j = 1; j <= i; j++) {
    System.out.print("*");
  }
  System.out.println();
}

역삼각형

 

 

 

int n = 5;
for (int i = 1; i <= n; i++) {
  for (int j = 1; j <= n - i; j++) {
    System.out.print(" ");
  }
  for (int j = 1; j <= 2 * i - 1; j++) {
    System.out.print("*");
  }
  System.out.println();
}
for (int i = n - 1; i >= 1; i--) {
  for (int j = 1; j <= n - i; j++) {
    System.out.print(" ");
  }
  for (int j = 1; j <= 2 * i - 1; j++) {
    System.out.print("*");
  }
  System.out.println();
}

마름모

 

int n = 5;
for (int i = 1; i <= n; i++) {
  for (int j = 1; j <= n; j++) {
    System.out.print("*");
  }
  System.out.println();
}

정사각형

 

 

int n = 5;
for (int i = 1; i <= n; i++) {
  for (int j = 1; j <= n; j++) {
    if (i == j) {
      System.out.print("*");
    } else {
      System.out.print(" ");
    }
  }
  System.out.println();
}

대각선 별찍기

 

int n = 5;
for (int i = 1; i <= n; i++) {
  for (int j = 1; j <= n; j++) {
    if (i + j == n + 1) {
      System.out.print("*");
    } else {
      System.out.print(" ");
    }
  }
  System.out.println();
}

역대각선 별찍기

 

int n = 5;
for (int i = 1; i <= n; i++) {
  for (int j = 1; j <= n - i; j++) {
    System.out.print(" ");
  }
  for (int j = 1; j <= 2 * i - 1; j++) {
    System.out.print("*");
  }
  System.out.println();
}
for (int i = n - 1; i >= 1; i--) {
  for (int j = 1; j <= n - i; j++) {
    System.out.print(" ");
  }
  for (int j = 1; j <= 2 * i - 1; j++) {
    System.out.print("*");
  }
  System.out.println();
}

다이아몬드 별찍기

검색 키워드 

링크는 붙여넣기 하니 적용이 안되어서 볼꺼면 코드업에 가서 확인하자

#2023년 x월 x일 x회 차 수업 
## 유용한 개념
## 수업 내용
## 참고링크
## 오늘 꼭 기억해야 할 것

 

 

 

 

# 수업 시작 전 준비

```
구글,깃허브,리플,알고리즘 로그인,띄워놓기
```

# 2023년 2월 28일 1회 차 수업

- 목록 1
  - 목록 1-1
- 목록 2

## 유용한 개념

```
 - 문제 해결(내가 뭘 모르지?) -아예 모름(구글링) -내가 배운것(머리쓰기)
 - 알고리즘 해결 -예측,가정,코드파악,run 해보기
 - 공부시간 수업5시간 + 3시간 자습 + @ 1.에러나면 에러 메세지 필수 체크(구글링) 2.에러 고치기. 3.다시 실행 해보기.

 - 자바에서의 =는 '넣겠다'다. '같음'의 의미는 == (비교연산자 검색)
변수 안에는 값을 오직 1개만 넣을 수 있다 (x=10 -> x=15는 변수 2개가 아닌 덮어쓰기가 되어 15가 되며 10은 비활성화 된다.자바는 위에서 아래 순서로 읽기 때문이다.)
```

## 수업 내용

```
 - int 변수명에 숫자로 시작,숫자 자체는 안된다(중간에 들어가는 ab12af 등은 된다.)
 - value 스위칭,스왑 (값 뒤바꾸기) 중요
```

## 참고링크

```


## 꿀팁

```
- 위키는 이력서 제작에 용이하다.
- 1일차 ~~ 56일차 - 자소서 공부 첫 날부터 끝까지 기록의 근거다.
- Spring -> 포트폴리오 -> 취업
 (블로그,깃허브,유트브) -> 추가 + @ 사항들.
```

---

### 블록

```

블록
```

# 2023년 3월 2일 2회 차 수업

## 유용한 개념

```
연산자 우선순위는 그때마다 찾아본다.
정수 비교연산자는 그림판에 x축을 그려서 부등식으로 검산.
자바 서식지정자, 데이터의 기본형 참조형 외우기.

반복문의 3가지 구성요소
초기(값)
(종료)조건
step(보폭)
3가지 중 1개라도 없으면 반복문은 실행되지 않는다.
```

## 수업 내용

```
반복문은 조건문을 기본으로 한다.
프로그래밍 언어의 발전은 불편함에서 발전한다.

```

## 참고링크



## 꿀팁

```

```

# 2023년 3월 3일 3회 차 수업

## 유용한 개념

```

이중 반복문에서

안쪽은 분침 바깥쪽은 시침에 비유 할 수 있다.

안쪽이 완전하게 다 돌아야 바깥쪽으로 돌고

조건이 거짓인 경우에 빠져 나온다.

int[] arr = new int[3]; // int들 만 들어갈 수 있는 객체랑
연결 될 예정인 arr
int 3개 들어갈 수 있는 객체를 new 키워드를 통해 하나 만들겠다
객체 내부의 리모컨을 복사해서 arr변수에 넣겠다



. -> ~~의 의미 // arr의 길이 ->arr.lenth


```

## 수업 내용

런타임에러 vs 컴파일 타임 에러
(읽어야 앎) (문법적 오류 실행하나 마나)



자바 에러 vs 자바 익셉션
에러:실행하기 전 문제발생
익셉션 : 실행하고 후 문제발생

## 참고링크



## 꿀팁

```
객체에 대한 비유

객체(object)란?
객체(object)란 실생활에서 우리가 인식할 수 있는 사물로 이해할 수 있습니다.

객체 지향 프로그래밍(OOP, Object-Oriented Programming)
객체 지향 프로그래밍에서는 모든 데이터를 객체(object)로 취급하며, 이러한 객체가 바로 프로그래밍의 중심이 됩니다.



객체(object)란 간단히 이야기하자면 실생활에서 우리가 인식할 수 있는 사물로 설명할 수 있습니다.

이러한 객체의 상태(state)와 행동(behavior)을 구체화하는 형태의 프로그래밍이 바로 객체 지향 프로그래밍입니다.

이때 객체를 만들어 내기 위한 설계도와 같은 개념을 클래스(class)라고 합니다.

 # 클래스(class)
자바에서 클래스(class)란 객체를 정의하는 틀 또는 설계도와 같은 의미로 사용됩니다.

자바에서는 이러한 설계도인 클래스를 가지고, 여러 객체를 생성하여 사용하게 됩니다.



클래스는 객체의 상태를 나타내는 필드(field)와 객체의 행동을 나타내는 메소드(method)로 구성됩니다.

즉, 필드(field)란 클래스에 포함된 변수(variable)를 의미합니다.

또한, 메소드(method)란 어떠한 특정 작업을 수행하기 위한 명령문의 집합이라 할 수 있습니다.

 # 인스턴스(instance)
자바에서 클래스를 사용하기 위해서는 우선 해당 클래스 타입의 객체(object)를 선언해야 합니다.

이렇게 클래스로부터 객체를 선언하는 과정을 클래스의 인스턴스 화라고 합니다.

또한, 이렇게 선언된 해당 클래스 타입의 객체를 인스턴스(instance)라고 합니다.

즉, 인스턴스란 메모리에 할당된 객체를 의미합니다.



자바에서는 하나의 클래스로부터 여러 개의 인스턴스를 생성할 수 있습니다.

이렇게 생성된 인스턴스는 독립된 메모리 공간에 저장된 자신만의 필드를 가질 수 있습니다.

하지만 해당 클래스의 모든 메소드(method)는 해당 클래스에서 생성된 모든 인스턴스가 공유하게 됩니다.

클래스의 예
클래스(class)

- 차(Car) : 설계도

스포츠카



필드(field)

- car.modelName = "람보르기니"

- car.modelYear = 2016

- car.color = "주황색"

- car.maxSpeed = 350



메소드(method)

- car.accelerate()

- car.brake()



 #인스턴스(instance)

- 내 차(myCar) : 설계도에 의해 생산된 차량

- 친구 차(friendCar) : 설계도에 의해 생산된 또 다른 차량



즉, 자동차 인스턴스는 모두 위와 같은 필드와 메소드를 가지게 될 것입니다.

하지만 각 인스턴스마다 가지고 있는 프로퍼티의 값은 전부 다를 것입니다.

 #메소드(method)
자바에서 클래스는 멤버(member)로 속성을 표현하는 필드(field)와 기능을 표현하는 메소드(method)를 가집니다.

그중에서 메소드(method)란 어떠한 특정 작업을 수행하기 위한 명령문의 집합이라 할 수 있습니다.



자바에서 메소드를 정의하는 방법은 다음과 같습니다.

문법
접근제어자 반환타입 메소드이름(매개변수목록) { // 선언부

    // 구현부

}



1. 접근 제어자 : 해당 메소드에 접근할 수 있는 범위를 명시합니다.

2. 반환 타입(return type) : 메소드가 모든 작업을 마치고 반환하는 데이터의 타입을 명시합니다.

3. 메소드 이름 : 메소드를 호출하기 위한 이름을 명시합니다.

4. 매개변수 목록(parameters) : 메소드 호출 시에 전달되는 인수의 값을 저장할 변수들을 명시합니다.

5. 구현부 : 메소드의 고유 기능을 수행하는 명령문의 집합입니다.



자바에서는 하나의 클래스에 같은 이름의 메소드를 둘 이상 정의할 수 없습니다.

하지만 메소드 오버로딩(overloading)을 이용하면, 같은 이름의 메소드를 중복하여 정의할 수 있습니다.

메소드 오버로딩이란 매개변수의 개수나 타입을 다르게 하여 같은 이름의 또 다른 메소드를 작성하는 것입니다.



이러한 메소드 오버로딩을 사용함으로써 메소드에 사용되는 이름을 절약할 수 있습니다.

또한, 메소드를 호출할 때 전달해야 할 매개변수의 타입이나 개수에 대해 크게 신경을 쓰지 않고 호출할 수 있게 됩니다.


```

# 2023년 3월 6일 4회 차 수업

## 유용한 개념

```
객체 => 폴더
클래스 => 설계도 (객체와 설계도는 별개)
필드 =>클래스 안의 전역변수 attribute
this => 리모콘

[접근제어자(public, private 등)] [static, final 등] 자료형 변수명 [= 초기값] ;

필드는 위와 같이 선언한다.

1. 필드는 메소드 및 생성자 밖에서 선언되고, 값을 할당하지 않으면 초기값이 자동으로 할당된다.
2. 필드를 선언하면 클래스 전역에서 사용이 가능하다. 다르게 말하면 프로그램의 시작부터 종료까지 메모리상에 남아 공간을 차지한다. 따라서 메소드에서 공통으로 필요한 필드만 선언하여 사용하는게 좋다.
3. 메소드에서 필드와 동일한 변수를 정의하면 메소드의 변수가 우선순위가 높다. 이때 필드의 값을 출력하려면 this.을 이용하면 된다.

속성(단순 데이터) - attribute 저장 데이터 명사형 특징
property
기능(실행 데이터) - method   실행 데이터 동사형 특징
function

```

## 수업 내용

```
new 한개당 객체 1개 생성
class 는 설계도 일 뿐이다.

ex
class main{

}

class 김철수{
    int age;
    boolean isMarried;
    String name;

}
이건 객체 0개 설계도만 2개

new 김철수(); <- 틀린코드 아님 리모컨 연결을 안했을 뿐
김철수 a = new 김철수(); => 읽는 방법
1.설계도와 a(리모컨을)변수를 new(객체) 김철수와 연결하겠다.
2.김철수 a 까지만 => a라는 변수를 김철수 닮은 객체와 나중에 연결할꺼다.


설계도에 있는 능력을 뽑아쓰고 싶으면(객체화를 안하고)

메서드에 static을 붙여준다.

선택지
1.객체화를 해서 쓸것인지
2.static을 붙여서 설계도를 끌어와 쓸것인지
-->static은 정적 메서드라고 한다. 앞으로 배울 것.
-->비교되는 개념은 인스턴스.
-->남발하면 쓰레기 값이 생긴다.

인자(아규먼트)-매개변수(파라미터) 는 타입과 갯수가 같아야한다.
(자동 형 변환이 가능하거나)
둘이 이동 공간은 같아야한다 자바로치면 소괄호 안쪽.
매개변수는 함수의 안과 밖을 연결해주는 매개체다.
->class 와 class
```

## 참고링크


## 오늘 꼭 기억해야 할 것

```
static은 static끼리 통신이 가능하다.

메인 클래스 vs 메인 클래스가 아닌 것
->사용처가 다르다
전역변수 : 전역공간 (함수 -method 외부)에서 생성,수명이 더 길다
프로그램 시작- 끝
지역변수 : 지역공간 (함수 내부)에서 생성,수명이 더 짧다
함수 시작 - 끝
매개변수 : 지역변수의 일종, 함수의 내부와 외부를 연결해주는 매개체
인자 : args,인수,매개변수로 전달되는 데이터

키워드:변수의 생명주기,변수의 스코프와 변수의 라이프타임,변수의 라이프 싸이클 -> 다 같은 말 구글링하기

매개변수의 개수와 인자의 개수는 일치 해야한다.
매개변수의 타입과 인자의 타입은 일치 해야한다.

클래스 변수와 인스턴스 변수
클래스 영역에 위치한 변수 중에서 static 키워드를 가지는 변수를 클래스 변수(static variable)라고 합니다.

그리고 클래스 영역에 위치한 변수 중 static 키워드를 가지지 않는 변수는 인스턴스 변수(instance variable)라고 합니다.
또한, 메소드나 생성자, 초기화 블록 내에 위치한 변수를 지역 변수(local variable)라고 합니다.

알아두면 좋은- 동적할당(c언어,변수의 생명주기 내가 조절가능 메모리 활용의 극한) vs 정적할당(자바, 알아서 해준다)

```

# 2023년 3월 7일 5회 차 수업

## 유용한 개념

```
#클래스는 '객체를 생성하기 위한 틀 '이며 '클래스는 속성과 기능으로 정의 되어있다' ->객체 지향론적 관점

#프로그래밍적인 관점에서의 클래스
1.변수 하나의 데이터를 저장할 수 있는 공간
2.배열 같은 종류의 여러 데이터를 하나의 집합으로 저장 할 수 있는 공간
3.구조체 서로 관련된 여러 데이터를 종류에 관계없이 하나의 집합으로 저장할 수 있는 공간
4.클래스 데이터와 함수의 결합(구조체+함수)


개념, 배열과 ArrayList, 제너릭
개념, ArrayList 내부작동원리
```

## 수업 내용

```
void - return x

나머지 - return o

함수당 1번만 가능

-키워드-
다형성

메소드 오버로딩 (클래스 내에 같은 이름의 메소드를 여러개 생성)

오버라이드(상속에서 메소드 덮어쓰기)
---

상속(extends) 형변환 과정(캐스팅)에서 기능 소실이 될 수 있다.

그래서 쓰는게 추상(abstract)

추상 메소드가 하나라도 들어가 있으면 추상 클래스로 만들어야함
추상 메소드는 바디를 가질 수 없다.

추상클래스 -> 객체화 x

부모가 추상 메소드를 갖고 있으면 받는 자식 클래스는 오버라이드(덮어쓰기)를 해야 한다.


인터페이스(interface) -> 순도 100퍼센트 추상 클래스
안에있는 메소드 abstract 안붙여도 자동 추상 메서드들임
(붙여도 상관은 x)
-> 바디를 가질 수 없다.


인터페이스 상속(100퍼센트 추상클래스)을 받는 자식 클래스는 extends가 아닌
implements를 쓴다
-> 자식 메소드 앞에는 모두 퍼블릭을 붙여줘야 한다

extends의
다중 구현,다중 상속은 자바에서 불가능하다
무슨 데이터를 골라야 하는지 모르기 때문이다.

implements의 다중 상속은 가능
모두 추상이라(깡통취급) 오버라이드 시키면 끝이기 때문
안 헷갈려도 되는 상황


생성자(constructor)
생성자는 자동실행 함수(자동실행 메서드)
class 이름과 같은것이어야 한다
리턴타입 x void x

ex)

class 사람{
   사람(){

   }
}
생성자의 실행시점은 객체가 생성되면서 자동 실행
->new 마다 실행
->객체가 생성이 안된다면 실행이 안된다.

상속을 받았으면 부모의 생성자를 먼저 실행한다 규칙.

git
64-bit Git for Windows Setup.
git 입문
작업 1, 프로젝트 준비 및 git 업로드
작업 2, 명령어 입력
작업 3, 게시물 작성 기능 추가
```

## 참고링크

## 오늘 꼭 기억해야 할 것



한계가 없는 배열 다루기.

추상 수업 페이지 가서 복습하기.
->상속,추상,인터페이스,생성자 개념 잇기.

주의)oop특징의 추상화와 문법 추상은 다른것!

<a href="https://mozi.tistory.com/466" target="_blank"> set,get 메서드 사용 방법과 이유</a>

# 2023년 3월 8일 6회 차 수업

## 유용한 개념

```
생성자는 시작하자마자 실행 되었으면 했을 때 쓰는 것.

```

## 수업 내용

```
static 값은 클래스 하나에서만 존재
-> new 붙인 객체들에게는 없다

static 생성자는 static{} 로 써주면 된다 (f11로 바로 실행가능)


이미 만들어진 클래스 도구들은 import를 사용해서 당겨오자.
->안그러면 패키지에 클래스를 일일히 만들어야 하는 번거로움이 생김


작업 4, 게시글의 유무 판별
작업 5, 게시물 목록 기능 구현
작업 6, 게시물 상세보기 구현중
작업 7, 게시글 상세보기 글의 유무 판단
작업 8, 게시물 상세보기 기능 구현
작업 9, 게시물 작성시 날짜와 시간 정보 저장
작업 10, 게시물 삭제 기능 추가(index 활용)

```

## 참고링크

## 오늘 꼭 기억해야 할 것



깃허브 사용법
깃배쉬 사용법

# 2023년 3월 9일 7회 차 수업

## 유용한 개념

```


```

## 수업 내용

```
작업 11, 게시글 수정 기능 및 조회수 구현
작업 12, 게시글 테스트데이터 생성
작업 13, ArrayList 내에서 특정 게시물을 찾는 메서드 구현, 중복제거
작업 14, 게시글 검색 기능 추가(제목만)
작업 15, 회원가입 기능 구현중, 아이디 중복체크

```

## 참고링크

## 오늘 꼭 기억해야 할 것

```
split ,startWith 검색
'자바 현재 날짜' 검색
자바 'Arraylist 요소 삭제' 검색

자바'startWith'
자바 'split'
자바 '문자열을 숫자로 변환'

CRUD 검색 자바에 대한 개념에 대입해서
문제 해결 나눠서 하기
TODO list 나누기
equals 랑 연산자 == 비교
```

글 작성
글 리스트
글 상세보기
글 수정
글 삭제

테스트 데이터

깃허브 업로드

시험문제

# 2023년 3월 13일 8회 차 수업

## 유용한 개념

## 수업 내용

기능이 늘어나면 리펙토링(구조개선)

Main
App
-articleController
-memberController

-ArticleService
-MemberService

-ArticleDao
-MemberDao
DB(자바에선 어레이 리스트)

...하위 폴더로 세세히 나눠버림(Model View Controller)

작업 16, 회원가입 기능 구현, 비밀번호 확인
작업 17, 리팩토링,구조개선,패키지분리
작업 18, MemberController 추가
작업 19, ArticleController 추가
작업 20, App 클래스 내부에서 하던 기능실행을 각각의 컨트롤러 내부로 이전,App 의 간소화

## 참고링크

## 오늘 꼭 기억해야 할 것

소프트 웨어 디자인 패턴 검색
MVC 모델 뷰 컨트롤러 검색
상속 개념 심화

# 2023년 3월 14일 9회 차 수업

## 유용한 개념

## 수업 내용

세선-사용자 정보를 저장
작업 21, articles,members를 각 컨트롤러로 이전
작업 22, 로그인 기능 구현, 중복로그인 허용
작업 23, member profile, 로그아웃,로그인 상태 체크
작업 24, loginedMember, isLogined를 Controller로 이전, Ac,Mc 둘 다 사용 가능 하도록
작업 25, 게시물 작성시 작성자에 관한 정보를 함께 저장,memberId
작업 26, 로그인, 로그아웃 체크가드를 App 클래스에 추가, 컨트롤러 내부에서 삭제

## 참고링크

## 오늘 꼭 기억해야 할 것

TODO
오늘 결과물에서
article list에 작성자의 이름이 노출 되도록 만들기

# 2023년 3월 15일 10회 차 수업

## 유용한 개념

## 수업 내용

작업 27, 게시물 리스트에 작성자 이름이 나오도록 처리
작업 28, 한번 사용된 게시물의 번호가 재사용 되지 않도록 처리
작업 29, 로그인시 필수정보 입력하도록 처리
작업 30, 게시물 서비스 도입

## 참고링크

## 오늘 꼭 기억해야 할 것

게시글
게시글 작성 article write
게시글 목록 article list
게시글 상세보기 article detail
게시글 삭제 article delete
게시글 수정 article modify

회원
회원가입 member join
로그인 member login
로그아웃 member logout
profile member profile
회원정보수정
회원탈퇴

MVC
리팩토링
최적화

# 2023년 3월 16일 11회 차 수업 -> DBMS랑 섞어서감

## 유용한 개념

## 수업 내용

## 참고링크

## 오늘 꼭 기억해야 할 것

# 2023년 3월 17일 12회 차 수업

스프링 시작

'java > java필요한 지식' 카테고리의 다른 글

자바 예외처리 Try Catch 문  (0) 2023.04.10
디자인 패턴이란 뭘까?  (1) 2023.03.14
MVC,Model-View-Controller 란 뭘까?  (0) 2023.03.14

어디선가 primary key = Unique + not null과 같은 것이다 라고 들어서 정말인가

챗 gpt 선생님에게 물어봤다

 

질문: -sql에서 primary key랑 unique ,not null이랑 같은거야?-

 

답변:

 

Primary key, Unique constraint, Not Null은 SQL에서 데이터 무결성을 보장하는 데 사용되지만, 각각의 역할은 다릅니다.

Primary key(기본 키)는 테이블의 한 열 또는 여러 열로 이루어진 값들의 조합으로, 테이블 내의 각 행을 고유하게 식별하는 데 사용됩니다. 이는 관계형 데이터베이스에서 테이블 간의 참조를 위한 기준으로 사용됩니다. 각 테이블은 하나의 primary key만 가질 수 있습니다.

Unique constraint(고유 제약 조건)은 primary key와 비슷한 역할을 합니다. 하지만 테이블에서 여러 열에 대해 고유 제약 조건을 설정할 수 있으며, null 값을 허용할 수 있습니다.

Not Null(널 제약 조건)은 테이블의 열이 null 값을 포함할 수 없도록 보장합니다. 이는 외래 키 및 primary key와 같은 테이블의 기능에 필수적인 열에 자주 사용됩니다.

요약하면, 이러한 제약 조건은 모두 데이터 무결성을 보장하는 데 사용되지만, 데이터베이스의 신뢰성을 보장하는 데에는 각각의 역할이 있습니다.

----------

요약하면 비슷한 제약조건이지만 primary key 는 테이블 당 1번만 쓸 수 있고

unique + not null은 primary key에 준하는 제약조건이 필요한 다른 테이블에도 쓸 수 있다.

엄연히 다르다

0과 null이 둘다 비어 있어보여도 엄연히 0은 정수값으로 존재하는 데이터듯이 비슷하며 다른 느낌인가보다

+ Recent posts