이벤트 : 웹 페이지에서 발생하는 대부분의 일. ex)마우스를 움직이는 일, 클릭, 스크롤, 키보드 입력 등

<body>
  <div>
    <button id="myBtn">Click!</button>
  </div>
</body>
// 이벤트(Event)와 버튼 클릭
const btn = document.querySelector('#myBtn');

// 이벤트 핸들링(Event Handling)
btn.onclick = function() { // 이벤트 핸들러(Event Handler)
  console.log('Hello Codeit!');
};

해당 태그를 변수로 담고, onclick이라는 프로퍼티에 함수를 할당해주면 버튼에 대한 클릭이벤트에 원하는 동작을 할 수 있다.

이벤트 핸들링 : 이벤트가 발생했을 때 어떤 특별한 동작을 하도록 이벤트를 다루는 것

이벤트 핸들러 : 구체적인 동작들을 코드로 표현한 함수 부분

그리고 잘 사용하진 않지만 HTML에서 바로 이벤트 핸들러를 등록 할 수도 있다.

<body>
  <div>
    <button id="myBtn" onclick="console.log('Hello Codeit!')">Click!</button>
  </div>
</body>

'코린이 개념잡기 > JavaScript' 카테고리의 다른 글

console.log와 console.dir의 차이  (0) 2024.12.13
객체, 요소, 노드  (1) 2024.12.13
태그 선택하기  (0) 2024.12.12
조건문  (0) 2024.01.20
함수  (0) 2024.01.20

ID로 선택하기

//id로 태그 선택하기
document.getElementById('Id');

ID속성을 통해서 어떤 요소를 가져 오겠다는 뜻이다. id 값을 문자열로 전달해 주게 되면 해당되는 태그가 선택되는 원리이다.

const myTag = document.getElementById('myNumber');
console.log(myTag);

//출력되는 값, HTML에 적혀 있는 태그가 보인다.
<div id="myNumber">0</div>

뿐만 아니라 자식요소가 있는 부모요소를 선택하게 되면 부모태그 요소에 있는 모든 내용들이 표시 되고, 존재하지 않는 태그를 선택하게 되면 null값이 리턴된다.

장점 : 필요한 태그를 명확하게 선택할 수 있다.


Class로 선택하기

//class로 태그 선택하기
document.getElementsByClassName('class');

class는 id와는 다르게 여러 태그에 붙을 수 있어 Element"s"로 작성해야 하니 주의하자.

const myTags = document.getElementsByClassName('color-btn');
console.log(myTags);

출력된 화면

"color-btn" 클래스가 있는 모든 태그들이  대괄호로 감싸져 배열의 형태로 선택됐다. length 프로퍼티도 있어서 배열 같지만, 완벽한 배열은 아니다. 배열을 다룰 때 사용하는 splice나 push 같은 메소드는 사용할 수가 없기 때문에 배열이라고 부르기는 어렵다.

console.log(myTags[1]);
console.log(myTags.length);

for (let tag of myTags) {
  console.log(tag);
}

배열 메소드는 사용할 수 없지만 대괄호 표기법으로 1번 인덱스에 접근한다거나, length 프로퍼티를 활용할 수 있고, for...of 문을 사용하는데에는 아무런 문제가 없다.

+ 여러개의 값을 담고 있는 배열과 형태는 유사하지만 배열의 메소드는 사용할 수 없는 것들을 가리켜서 유사배열(Array-Like Object)이라고 한다.

그리고 클래스가 하나 밖에 없는 값에 접근하려고 하면, 태그가 하나 밖에 없으니 딱 그 태그가 선택될거라고 생각할 수 있다. 확인을 해보면 요소가 한개가 들어있는 HTMLCollection이 출력되기 때문에 그 태그를 선택하려면 [0] 번째 인덱스에 접근 해야 된다.

존재하지 않는 태그를 선택하게 되면 null값이 리턴되던 id 태그 선택과는 다르게 비어있는 HTMLCollection이 출력된다.

console.log(myTags === null); //false, 비어있는 HTMLCollection은 null값과는 다르다.
console.log(myTags.length); //0

+ 여담

유사배열의 특징

  1. 숫자 형태의 indexing이 가능하다. : 유사배열도 배열과 마찬가지로 각 요소에 0부터 시작하는 숫자 형태의 index가 있어야 한다.
  2. length 프로퍼티가 있다. : 숫자 형태의 index가 있더라도 length 프로퍼티가 없다면 유사배열이라기 보다 그냥 숫자 형태의 key로 구성된 일반적인 객체라고 볼 수 있다.
  3. 배열의 기본메소드를 사용할 수 없다. : 인덱싱을 통해 유사배열의 요소에 접근은 쉽지만 수정이나 삭제는 까다롭다. 그래서 내부 요소들은 배열처럼 다룰 수 있으면서 배열의 메소드 사용을 막고싶거나 일반 배열에는 없는 특별한 메소드를 제공하고 싶을 때 유사 배열을 활용한다.
  4. Array.isArray(유사배열)은 false다. : 유사 배열은 배열과 비슷하지만 배열이 아니기 때문에 결과값이 false이다.

태그 이름으로 선택하기

//태그 이름으로 태그 선택하기
document.getElementsByTagName('태그이름');

class와 마찬가지로 Element"s"로 작성해야 하니 주의! 실행결과 역시 class와 똑같이 HTMLCollection을 리턴한다.

const allTags = document.getElementsByTagName('*');

css선택자처럼 '*' 값을 전달하게 되면 모든 태그를 선택할 수도 있다. 하지만 명확한 의도 없이 많은 요소를 한꺼번에 다루면 예상치 못한 실수를 할 수 있으니 주의하자. 많이 사용되는 메소드는 아니다.


CSS 선택자로 선택하기

//css 선택자로 태그 선택하기
document.querySelector('css선택자');

ID 는 #, class는 .을 이용해서 작성할 수 있다.

const myTag = document.querySelector('#myNumber');
console.log(myTag);

const myTag2 = document.getElementById('myNumber');
console.log(myTag2);

위 코드는 같은 값을 출력한다. #과 getElementById는 ID 속성을 가진 태그를 가져온다.

const myTag = document.querySelector('.color-btn');
console.log(myTag);

출력된 화면

HTML Collection과 같은유사배열이 출력될 것 같았지만, color-btn 클래스가 붙어있는 태그들 중에 가장 첫번째 요소(0번째 인덱스)가 선택되었다. 만약 같은 class를 가진 태그 여러개를 가져오고 싶다면 querySelectorAll 메소드를 활용할 수 있다.

const myTags = document.querySelectorAll('.color-btn');
console.log(myTags);

const myTags2 = document.getElementsByClassName('color-btn');
console.log(myTags2);

출력되는 화면

document.querySelectorAll('.color-btn')는 NodeList가 출력됐고, getElementsByClassName('color-btn')는 HTML Collection이 출력됐다. 뭔가 이름은 조금 다르지만 안에 있는 요소는 동일하다.

+존재하지 않는 요소를 선택할 경우 querySelector는 (id 선택과 마찬가지로) null값을, querySelectorAll은 비어있는 NodeList를 리턴한다. 


 

'코린이 개념잡기 > JavaScript' 카테고리의 다른 글

객체, 요소, 노드  (1) 2024.12.13
이벤트와 클릭  (0) 2024.12.13
조건문  (0) 2024.01.20
함수  (0) 2024.01.20
예약어  (0) 2024.01.19

코딩하는데 4시간, 배포하는데 1시간 걸린 멍청이의 첫 배포 일지. 내가 보기 위해 내가 정리하는 내.보.내.정

git으로 배포하기 배우면서 알게된 점들을 주황글씨로 새겨볼까 한다.

먼저 레포지토리 포크를 해야한다.

포크를 할 때 이 내용은 꼭 체크해제 해줘야 한다.

포크한 레포지토리의 브랜치 목록에 내 이름이 있는지 확인을 꼭 한 후 진행해야한다.

하트 이모지가 붙은게 내 브랜치!

확인이 끝났으면 포크한 레포지토리에서 저장소 URL을 복사 후 브랜치 클론 작업을 해줘야한다.

내 이름으로 된 브랜치(basic-내이름)에서 초록색 code 부분을 눌러서 저장소 url을 복사해준다.
vscode에서 terminal 열기 (그냥 바탕화면에서 vs code를 실행한 후 terminal을 실행해주면 된다.)

clone : 온라인에 있는걸 통째로 내 컴퓨터로 가져온다. 저장소 url을 clone할 때 적는 이유 : 구체적으로 어떤 코드를 가져오는지 알기 위해서 URL을 적어 명명하는 것이다.

$ git clone -b Basic-본인이름 --single-branch {저장소 URL}
$ git clone -b Basic-이코딩 --single-branch https://github.com/12124334@!#@$#@!

그 다음 clone해 온 폴더를 열어줘야 한다.

open folder 선택
폴더 선택 후 선택 눌러서 열어준다!(위 사진은 예시이다. 클론해 온 폴더 열어줘라)

이게 무슨 말이냐면, 예를 들어 바탕화면에 폴더(디렉토리)를 만들고서 그 안에서 클론을 하면 폴더 안에 폴더가 생긴다. 안에 생긴 폴더에서 작업을 해주면 된다.

clone 해 온 브랜치에 새로운(나의) 브랜치 생성!

//예시
$ git checkout -b Basic-본인이름-sprint1

git checkout -b 새로운 브랜치로 만들면서 이동하기

클론 해 온 폴더를 열고 베이스 브랜치가 main이 아닌 본인 이름-sprint1인지 잘 확인하기!

+ 만약 다른 브랜치로 설정 되어 있으면 git checkout 명령어로 브랜치 이동해주기!

$ git checkout 이동할 브랜치명

이렇게 만든 브랜치 내에서 미션을 진행하면 된다!

그런 다음 내가 한 작업물 보내기 위한 작업을 진행한다.

$ git add .
$ git commit -m "메시지"
$ git push origin <브랜치명>

//예시
$ git push origin Basic-본인이름-sprint1

add 지정 / commit 저장 / origin 내 레포지토리 주소

여기까지 됐다면 Pull Request를 할 수 있다. pull request = 검토받기 위한 작업, 만약에 내가 신입개발자로 뽑혀서 들어가 중요 프로젝트에 투입됐는데 내가 만든 브랜치를 바로 머지 할 수 있는가? 아마 사수나 상사가 무조건 확인 후에 올릴것이다. 그래서 PR을 하는것이라고 생각하면 된다.

스티커 부분을 눌러서 PR 해주기!

PR제목은 [본인이름] sprintN로 꼭 통일하기! (ex. 미션 2번하는 홍길동이라면 => [홍길동] sprint2)

미션 1부터
-base repository: 코드잇 레파지토리/기수-Sprint-Mission / base: Basic-본인이름 (🚨반드시 main 브랜치가 아닌, Basic-본인이름 브랜치로 설정)
-head repository: 내 레파지토리/기수-Sprint-Mission / compare: Basic-본인이름-sprintN

미션 5부터
-base repository: 코드잇 레파지토리/기수-Sprint-Mission / base: React-본인이름 (🚨반드시 main 브랜치가 아닌, React-본인이름 브랜치로 설정)
-head repository: 내 레파지토리/기수-Sprint-Mission / compare: React-본인이름-sprintN

미션 9부터
-base repository: 코드잇 레파지토리/기수-Sprint-Mission / base: Next-본인이름(🚨 반드시 main 브랜치가 아닌, Next-본인이름 브랜치로 설정)
-head repository: 내 레파지토리/기수-Sprint-Mission / compare: Next-본인이름-sprintN

제목을 생성하면 PR 템플릿을 작성하도록 나온다.

## 요구사항

### 기본

- [x]
- []
- []

### 심화

- [x]
- []

## 주요 변경사항

-
-

## 스크린샷

![image](이미지url)

## 주강사님에게

-
-
- 셀프 코드 리뷰를 통해 질문 이어가겠습니다.

💡 PR 템플릿을 활용하실  때 주의할 것
-PR 템플릿은 마크다운 문법을 준수해서 작성하기
-체크리스트를 만들고 싶다면 [ ], 체크를 하고싶다면 [x]와 같이 작성해 주기
-스프린트 미션이 안내된 레슨의 셀프 채점 부분에 있는 체크리스트를 PR에도 반영하기
-PR에서 큰 변경사항이 있을 때에는 '주요 변경사항'에 기록하기(e.g. 랜딩 페이지 추가, 로그인/회원가입 페이지 반응형 디자인 적용 등)
-주강사님이 작업한 내용을 빠르게 이해할 수 있도록 png, jpg, gif 등의 이미지를 '스크린샷'에 첨부하기. 참고로, 이미지 첨부를 위한 마크다운 문법은 ![대체 텍스트](이미지 URL)
-코드의 특정 영역에 대해 질문이 있을 때는 PR에 코멘트를 작성하는 방식으로 진행하기

나는 이때 [기본]에다가 netlify로 배포한 사이트 주소를 넣었다. (나중에 강사님이 맞게 잘 하셨다면서 확인해주심.)

본문을 다 작성했다면 평일 강사님을 Reviewers에 추가해주고 (k로 시작하심) Label로 원하는 피드백 스타일을 표시한다.

label

 

이렇게 까지 했다면 아직 끝난게 아니라 미션 설문을 제출 + 디스코드에서 강사님께 미션완료 코드리뷰 요청을 드려야한다.

 

+이후 강사님께서 제출된 PR의 내용을 확인 후 리뷰를 남기고 머지(Merge)해 주신다.

+PR은 강사님 리뷰 후에 머지 되기 때문에 리뷰에 대한 개선작업은 그 다음 스프린트 미션에 반영해주면 된다.


그 다음 프로젝트 진행하기

본인 프로젝트 열고, Basic-본인이름-sprint 브랜치에서 Basic-본인이름 브랜치로 이동을 해준다.

$ git checkout Basic-본인이름

그 다음 github 레포지토리의 Basic-본인이름 브랜치에서 변경된 코드를 가져온다.

//github 레포지토리를 upstream 이라는 이름으로 연결한다.
//git remote add로 연결한 후에는 추후에 다시 연결하지 않아도 된다.
$ git remote add upstream 저장소-url

//github 레포지토리의 Basic-본인이름 브랜치에서 변경된 사항을 내 Basic-본인이름 브랜치로 가져온다.
$ git pull upstream Basic-본인이름

여기서 $ git remote add upstream 저장소-url 은 

이 때 봤던 Basic-내 이름 말고 main 에서의 주소이다. 왜냐! 위에서 clone해 올 때는 basic-내이름 에서 주소를 가져왔다. $ git push origin Basic-본인이름-sprint1 에서 origin은 내 레포지토리의 주소이다. 그럼 가져올 저장소의 위치도 알려줘야 한다. 그래서 내가 가져오려는 github 레포지토리를 upstream이라는 이름으로 연결해주는 것이다. (매번 주소 다 치기 번거로우니까!)

그리고 다음 미션을 위한 새 브랜치를 생성한다.

$ git checkout -b Basic-본인이름-sprint2

Basic-본인이름-sprint2 브랜치에서 미션을 완수한다.

$ git add .
$ git commit -m "메시지"
$ git push origin <브랜치명>

//예시
$ git push origin Basic-본인이름-sprint2

 
 
 
 

+ Recent posts