본문 바로가기
728x90

전체 글31

Git - fetch를 이용한 원격분기 제어 원격분기를 팀단위로 사용하여 작업할 때 다른사람이 원격 브랜치를 지웠지만 본인의 로컬에는 그 삭제한 브랜치가 남아있다. 이럴 경우 원격 브랜치를 업데이트 해줘야 하는데 다음과 같은 방법으로 최신상태를 유지하면 다른사람이 삭제한 원격분기가 내 로컬에서도 삭제된다 git fetch -p 2021. 10. 19.
jQuery - Array.reduce() 함수의 이해 및 사용법 예시 reduce는 배열에 계산처리를 할 때 유용하게 쓰일 수 있는 방법입니다. 배열의 사칙연산처리를 할 때 for문으로도 처리할 수 있지만 reduce로도 간단하게 가능합니다. reduce의 기본 포맷은 다음과 같습니다 .reduce() Array.reduce(function(acc, cur, idx, arr){ // acc = return처리로 값을 누적시킬 수 있는데 이때 return처리되는 값의 누적값 // cur = 현재 루프 돌고 있는 값 // idx = 현재 루프 돌고 있는 배열위치 // arr = 전체 배열 // return 처리를 할 경우 값이 acc에 값이 누적됨 }, value); // value = 초기값 - 첫번째 인덱스 값을 배열보다 우선하는 인덱스로 하여 지정할 수 있습니다 기본 사.. 2021. 9. 3.
Javascript - iframe의 history back(뒤로가기)에 대한 문제 및 해결방법 iframe을 사용할 경우 페이지 내의 iframe은 보통 다른 페이지 인데 이 페이지가 window.history에 기록되어 신경쓰이는 일이 발생하게 되는데, 코드를 짜는데 번거롭게 할 뿐이다. 보통 이런경우가 발생하게 되면 아래의 케이스와 같은 현상이 일어납니다. 부모창(ifame 열기 전) window.history = 1 부모창(ifame 오픈 후) window.history = 1 부모창(ifame 닫은 후) window.history = 2 즉, 페이지를 이동하지 않았지만 페이지 history상에는 iframe페이지도 history에 추가된다. 그리고 history상에는 iframe이 history로 기록되어 뒤로가기 할 경우 ifame페이지를 인식하게 된다. 브라우저 상에는 Back/Forw.. 2021. 9. 1.
C# - 정적(Static)함수의 이해 및 사용법 정적(static)함수는 일반 함수와 달리 인스턴스화 시켜서 사용하는 것이 아닌, 메모리에 올라가있는 상태의 함수를 가져가 쓰는 형태입니다. 그렇기 때문에 클래스명에 바로 함수명을 붙여서 사용하며 주로 사용하게 되는 Math나 String함수인 Math.Max() / Math.Min() / String.Format() / String.Compare() 을 쓰는것 처럼 사용할 수 있습니다. 정적함수는 다같이 진행하는 프로젝트의 경우 파싱Util, Http통신Util 등 모두가 주로 쓸만한 Utility함수(ParseUtil, ConnectionUtil....)를 사용하면 유용하게 사용할 수 있습니다. 일반함수 클래스를 인스턴스화 해야만 함수를 사용할 수 있습니다 public class Project { p.. 2021. 8. 26.
jQuery - Array.filter()를 이용한 배열 처리 방법, 배열 필터링 Javascript에서 배열을 제어할 때 사용하는 함수로 filter가 있습니다. 각 요소의 값과 인덱스, 배열을 참고하여 배열을 제어할 수 있으며 기본 사용법은 다음과 같습니다. 기본 사용법 필요에 따라 function의 elem, index, array를 필요한 것만 사용해도 무방합니다. Ex) function(elem) / function (elem, index) Array.filter(function(elem, index, array)){ elem - 0번째 index부터 마지막 index까지의 요소값 index - 현재 요소의 위치값(index) array - 전체 배열값 return true - 현재 배열을 return한다 return false - 현재 배열을 continue처리(pass) .. 2021. 8. 23.
C# - 클래스를 이용한 Linq의 사용법 Linq를 더 유용하게 사용하는 방법으로는 임의로 만든 클래스의 속성을 제어할 때 더 유용하게 사용할 수 있습니다. 아래의 클래스와 예시를 이용하여 Linq를 효과적으로 사용할 수 있는 방법에 대해 알아보겠습니다. Food.cs public class Food { public int hotdog { get; set; } public int pizza { get; set; } public int chicken { get; set; } public List drink = new List(); } public class Sample { Food jam_store = new Food(); jam_store.hotdog = 500; jam_store.pizza = 700; jam_store.chicken = 10.. 2021. 8. 19.
SQL - (MSSQL) CONCAT_WS의 사용법 / 컬럼 합치기 CONCAT_WS를 이용하여 컬럼 조회시 특정 문자를 추가 하여 조회 결과를 이어붙일 수 있습니다. 컬럼 조회시 결과를 미리 이어붙여서 반환할 경우에 유용하게 사용이 가능합니다 SQL Server 2017부터 사용이 가능합니다. 사용 형식 값/컬럼은 최소 2개이상은 써야 하며 굳이 컬럼을 쓰지 않고 varchar, nvarchar 형식을 넣어서 사용해도 됩니다. select concat_ws({문자 분할 구분자}, {값/컬럼 1}, {값/컬럼 2}, {값/컬럼 1}, ...) from dbo.table 사용 예시 1 select concat_ws(' , ', food, score, chef) from dbo.table 사용 예시 2 select concat_ws(N' 점수는 ', chef, score) .. 2021. 8. 18.
Javacript - 웹페이지에서 뒤로가기 방지 웹페이지에서 뒤로가기를 방지하려고 하는 경우 Script에 다음과 같은 소스를 작성해서 추가해보도록 하자! history.pushState(null, null, location.href); window.onpopstate = function (event) { history.forward(); }; 2021. 8. 13.
C# - Linq의 기본 사용법 Linq를 이용하면 쿼리로 사용가능한 기능을 C#언어에서 바로 사용할 수 있습니다. 프로시저 호출을 할 경우 프로시저에서 집계함수를 사용하지 않고 서버사이드에서 집계함수를 사용함으로서 프로시저는 단순 데이터 조회만하게 만들어서 좀 더 단순하게 프로시저를 사용할 수 있도록 해주며, 서버사이드에서 집계의 편리함을 더해줍니다. Linq는 제너릭 형식 뿐만아니라 IENumuerable 인터페이스를 사용하는 다른 형식들도 모두 사용이 가능합니다. Linq로 다양한 타입의 데이터를 다룰 수 있지만 기본으로 int, string형식에 대해서 알아보겠습니다. 기본 집계함수(Min, Max, Avg) 최소값, 최대값, 평균값 산출함수 List lst = new List() { 1, 2, 3, 4, 5, 6, 7 }; /.. 2021. 8. 13.
Javascript - JSON 파싱, 문자열 변환처리 간단구현 JSON타입의 데이터를 제어할 경우에 JSON -> 문자열, 문자열 -> JSON을 왔다갔다 하는 경우가 있습니다. 이럴 경우에는 Javascript에서 제공하는 JSON 내장함수를 이용하면 간단하게 구현할 수 있습니다. JSON.parse() JSON의 형태로 문자열을 파싱처리 합니다. 파싱 처리된 JSON값은 key, value형태 및 Array(배열)의 형태로 Javascript에서 사용이 가능합니다 Key / Value 케이스 var json_val = JSON.parse('{"one":1,"two":2,title:"number"}'); // 1 var one = json_val.one; // 2 var twojson_val.two; // number var number = json_val.tit.. 2021. 8. 2.
C# - 물음표 연산자(?, ??), 삼항연산자 코드를 작성할 때 null 처리와 단순 if else 조건을 처리할 때 '단순한 조건때문에 줄을 더 써야하나?' 라고 생각할 수 있습니다. 아주 간단한 조건인데도 불구하고 한줄로 쓸 수 있는 코드에 4줄이상 쓰게되면 줄수만 차지할 뿐입니다. 이런문제를 해결할 수 있는 방법으로 물음표 연산자를 사용할 수 있습니다. 물음표를 이용해서 if else조건, 특정 데이터타입의 속성을 읽어올 때, null에러 방지처리 와 같은 방법들이 있습니다. ? 기본 처리 방법 object tmp = {조건} ? {참(true)일 경우 return값} : {거짓(false)일 경우 return값} ?? 기본 처리 방법 object tmp = null; object result = tmp ?? {tmp가 null일 경우 resu.. 2021. 7. 28.
SQL - (MSSQL) partition by 사용법, 부분집계처리 쿼리를 사용시 Group by를 특정컬럼에 부분적으로 사용해야 할 필요가 있을 때가 있는데 집계함수와 partition by를 이용하면 손쉽게 특정컬럼에 Group by처리를 할 수 있습니다. Example Data 집계함수의 Partition by sum, avg, count.. 등 집계함수의 기능은 기존에 쓰는 기능이랑 동일하며 partition by로 chef를 묶은 다음 그 항목에 대해 집계함수를 처리합니다. 테이블 전체를 조회해서 Group by 처리 및 서브쿼리로 쓰기보단 아래의 방법으로 Group by처리를 유용하게 쓸 수 있습니다. select * ,sum(score) over(partition by chef) as summary ,avg(score) over(partition by che.. 2021. 7. 26.
Git - Reset(커밋취소, 기록없애기) Git을 작동시 커밋을 했을 때, 수정사항들을 취소할 때 IDE의 인터페이스로 취소, 되돌리기 처리를 할 수 있지만 커맨드로는 reset을 이용하여 수정, 커밋내용들을 제어할 수 있습니다 Rest head Staging처리된 파일들을 UnStaging처리합니다. git reset head 마지막 N(숫자)개의 Commit을 취소/커밋로그삭제 처리합니다 git reset head~N 커밋파일 제어 soft : 스테이징 상태로 보존, 워킹디렉터리 보존 mixed : 스테이징 상태 취소, 워킹디렉터리 보존 hard : 스테이징 상태 취소, 워킹디렉터리 변경 취소 커밋된 기록의 hash만 지정해서 커맨드로 제어합니다 git reset --soft head^ git reset --mixed head^ git re.. 2021. 7. 26.
C# - DataTable 사용법(2) - Clone, ImportRow, Select, Copy, Reset, Clear, Compute DataTable에 존재하는 다양한 함수로 DataTable을 제어할 수 있으며 다음과 같은 함수가 있습니다. DataTable Example DataTable data = new DataTable(); data.Columns.Add("no", typeof(int)); data.Columns.Add("name", typeof(string)); data.Columns.Add("date", typeof(DateTime)); data.Columns.Add("food", typeof(string)); data.Rows.Add(new object[] { 1, "Mike", DateTime.Now.AddDays(1) }); data.Rows.Add(new object[] { 2, "Jane", DateTime.No.. 2021. 7. 23.
C# - DataTable 사용법(1) - 컬럼생성, 데이터 삽입, 조회 DataTable은 DB를 조회할 때 자주 사용되는 데이터 타입이며 데이터 베이스의 테이블과 거의 흡사한 형태를 갖고있습니다. 쿼리를 조회하는 것이 아니라면 DataTable에 컬럼을 생성하고 그에 해당하는 값을 넣어서 사용할 수 있으며 사용방법은 다음과 같습니다. 컬럼의 타입을 지정할때는 typeof(DataType)을 이용하여 컬럼의 데이터 타입을 지정합니다. 컬럼 생성 DataTable data = new DataTable(); data.Columns.Add("no", typeof(int)); data.Columns.Add("name", typeof(string)); data.Columns.Add("date", typeof(DateTime)); data.Columns.Add("food", typeo.. 2021. 7. 23.
C# - this 메소드를 이용한 클래스 구현 클래스의 특정한 사용형태가 있는데 this를 이용한 클래스 사용형태가 있습니다. 메소드 내부에서 this를 사용하면 클래스를 지칭하여 클래스 내의 변수를 사용하거나 클래스 자신을 가르켜서 무언가를 하지만, 메소드명을 작성하지않고 this를 메소드명으로 했을 경우의 사용방식이 있습니다. 이 경우에는 static을 이용하여 정적으로 사용할 수 없으며 인스턴스화 시킨 후 사용하여야 합니다. 이 사용방식은 특이하지만 유용하게 사용될 수 있는 방법이며 다음과 같습니다. “This” Method 아래의 예시코드는 return 타입을 string으로 한 함수이며, 인스턴스화 시켰을때 파라미터를 int와 string으로 받는 함수입니다. 이 함수를 구현할때는 반드시 get을 이용해서 받는 값에 대해 처리를 해줘야 하며.. 2021. 7. 22.
Git - Stash 사용법 Git을 사용할 때 커밋을 하지 않은 상태에서 master > branch 로는 이동이 가능하지만 branch > branch, branch > master로는 이동할 수가 없어서 Git사용이 익숙치 않은 상태에서는 불편함을 초래합니다. 그렇다고 브랜치 이동할때마다 커밋할수도 없고.. 그래서 stash라는 것을 이용하면 현재 수정된 내역이 있는 소스를 임시저장소에 저장하고 다른브랜치로 이동할 수 있습니다. stash는 기본적으로 Stack 구조이며 show, apply command를 이용하여 stash를 사용할 경우 제일 최근에 저장된 내역을 불러옵니다. Save git stash save로만 입력 할 경우 저장하는 stash의 ID값으로 저장하며, 저장할 이름을 입력 할 경우 특정한 이름으로 stas.. 2021. 7. 21.
C# - 확장메소드 사용법 및 예시 서비스 규모가 커지면 나름의 필요에 따라서 메소드를 임의로 추가해서 공용으로 쓸일이 생기기도 합니다. 이때 임의로 특정함수를 추가할 수 있는데 static클래스로 추가하여 공용으로 사용할만한 함수를 추가 할 수 있습니다. 아래의 예시를 참고하여 사용법을 알아보겠습니다. ExtentionMethod.cs CutString string형식의 문자열을 사용할 경우에 CustString확장메소드를 이용하고 loc변수를 붙이면 loc까지 문자열의 길이를 잘라냅니다. 문자열의 길이가 자르려는 길이보다 작을 경우 문자열을 반환합니다. GetLastValue List 형식의 배열에서 맨 마지막 요소만 가져옵니다. HasDataColumn where조건으로 List형의 DataType을 DataTable인 것만 한정 했.. 2021. 7. 15.
DB - (MSSQL) 날짜 변환처리 방법 Datetime을 상황에 따라 날짜형식을 변환시키는 방법은 여러가지가 있으며 다음 표에 따라 적절히 사용할 수 있습니다 주로 사용하는 형식은 21, 23, 112, 121이며 사용법은 다음과 같습니다. select getdate() -- 2021-07-14 15:54:13.967 select convert(char(23), getdate(), 21) -- 2021-07-14 15:52:17.763 select convert(char(10), getdate(), 23) -- 2021-07-14 select convert(char(8), getdate(), 112) -- 20210714 select convert(char(23), getdate(), 121) -- 2021-07-14 15:52:17.763 .. 2021. 7. 14.
C# - List 기본함수 사용법(Add, AddRange, Contains, Clear, IndexOf, Remove, RemoveAll, Reverse, ToArray, Sort) List를 이용하여 MS에서 제공하는 함수를 이용하면 리스트 구현을 손쉽게 할 수 있는데 자주 사용하며 간단한 함수를 몇가지 알아보도록 하겠습니다. Sample List 예시로 진행될 샘플 리스트는 아래와 같습니다. List lst = new List() { "Kim", "Lee", "Jang", "Park" }; Add List에 추가로 동일한 데이터타입의 요소를 추가합니다. lst.Add("Choi"); // 결과 "Kim", "Lee", "Jang", "Park", "Choi" AddRange List에 배열로 요소를 추가합니다. // List : "Kim", "Lee", "Jang", "Park" // 1. 제너릭 배열을 추가 lst.AddRange(new List { "OS", "PS", "QI.. 2021. 7. 14.
Visual Studio 2017 단축키 Alt + ↑,↓ 커서가 있는 줄을 아래, 위로 이동 Ctrl + A 현재 페이지 전체 선택. Ctrl + C 선택영역 복사. Ctrl + H 특정글자를 지정글자로 변경(Replace)처리하는 검색창을 연다. Ctrl + I 현재페이지에서 검색가능한 단순 글자검색창을 연다. Ctrl + F 간편 검색창 특정글자를 지정글자로 변경(Replace)처리할 수 있다. Ctrl + F12 객채 및 함수가 지정된 구체적인 정의로 이동한다. (인터페이스 메소드에서 F12누를시 인터페이스 함수로 이동, Ctrl + F12누를 시 인터페이스를 구현한 클래스의 메소드로 이동) F12 커서가 선택된 클래스로 이동. 메소드가 선언된 영역으로 이동. (인터페이스를 구현한 클래스의 메소드에서 F12누를시 인터페이스 메소드로 이동.. 2021. 7. 12.
C# - Get Set의 사용법, 의미 클래스를 인스턴스화 하여 내부의 필드(클래스 또는 구조체에서 직접 선언되는 모든 형식의 변수)와 속성을 할당, 조회할 수 있습니다. 필드와 속성은 접근한정자를 public으로 했을 때는 클래스를 인스턴스화 하여 개별 값을 할당, 조회할 수 있습니다. 필드로 선언됐을 경우에는 값 할당, 조회에서 끝나지만 속성이 됐을 때는 값을 함수로 처리하여 유연하게 사용할 수 있게됩니다. 즉, 값 할당, 조회시 메소드처럼 내부에서 사용이 가능하게 되는데 C#에서는 필드에 get, set을 이용해서 속성으로 처리할 수 있습니다. Get / Set 아래의 예제를 보면 seq_no, name, job은 속성이며, _hobby, _job은 필드입니다. 필드를 보면 _job은 접근한정자가 private으로 되어있고 _hobby는.. 2021. 7. 12.
ASP.NET - PlaceHolder와 Panel의 차이 및 구현 PlaceHolder와 Panel은 어떠한 구역에 Visible처리할 때 주로 쓰입니다. PlaceHolder와 Panel태그 내부에 어떤 Html태그를 작성했을 경우 결과로 표시되는 내용에 대해선 별 차이를 느끼지 못할 수 있는데 간단한 차이가 있습니다. 예시 This is Placeholder server control This is Panel server control Html 결과 This is Placeholder server control This is Panel server control * PalaceHolder로 묶은 영역은 서버컨트롤으로 인한 추가적인 Html태그가 발생하지 않습니다. * Panel로 묶은 영역은 div태그가 발생되어 의도치않은 Html태그가 추가될 수 있습니다. Pan.. 2021. 7. 12.
DB - DB Lock, DB락에 대해 알아보자 DBMS 사용시에 다중으로 트랜잭션이 발생할 경우 일관성과 무결성을 유지하려면 순차적인 진행을 보장할 수 있도록 직렬화 장치가 필요한데 이런 직렬화가 가능하도록 모든 DBMS가 사용하는 체계가 Lock이다. DBMS마다 Lock을 구현하는 방식과 세부적인 기능이 많이 다르므로 각 DBMS마다 Lock을 구현하는 방식에 대해서도 알 필요가 있다. Lock을 이해하기 쉽게 얘기하자면 화장실에서 볼일을 볼때 문을 잠근 다음, 볼일을 마치면 문을 열고 나오는 것 처럼 DB에서도 작업사항이 있을 경우 문을 잠그는 행위라고 보면된다. Shared(공유) Lock Shared Lock은 데이터를 읽고자(Select) 할 경우 사용된다. 다른 Lock과는 호환되지만 Exclusive(배타적) Lock과는 호환되지 않는.. 2021. 7. 11.
DB - (MSSQL)Service Broker, 서비스브로커란 무엇인가? 서비스 브로커(Service Broker)는 데이터베이스 엔진에서 두 개의 서로 다른 응용 프로그램 간에 일반적으로 명령 메시지인 태스크의 완료를 모니터링하는 SQL Server 의 기능입니다. 메시지 전달을 한쪽 끝에서 다른 쪽 끝까지 안전하게 할 책임이 있으며, 대상 응용 프로그램이 일시적으로 종료되거나 응답하지 않는 경우, Service Broker는 전송 준비가 될 때까지 메시지를 큐에 저장해 놓습니다. 두 애플리케이션(SQL Server 내부 또는 외부)이 통신할 때, 어느 애플리케이션도 반대쪽 끝의 기술 세부사항에 접근할 수 없습니다. 민감한 메시지를 보호하고 지정된 장소에 안정적으로 전달하는 것이 Service Broker의 역할입니다. Service Broker는 고도로 통합되어 있으며, .. 2021. 7. 11.
DB - 트랜잭션과 트랜잭션 격리성 수준 트랜잭션(이하 Tx)은 데이터 처리를 위한 하나의 논리적 단위이며 하나의 Tx 안에서 두개 이상의 여러 연산일 수 있다. 실제 사용시에는 일반쿼리를 사용하여 만들 수 있지만 주로 Stored Procedure(이하 SP)를 실행할때 길고 연속적인 트랜잭션이 사용되므로 실행시에 다음과 같은 형태로 나타난다. 아래의 Tx는 2줄에 불과하지만 2줄이든 100줄이든 3000줄이든 트랜잭션으로 묶여있다면 그것이 하나의 작업단위이다. begin select * from dbo.player end Transaction의 특징 원자성(Atomicity) Tx은 더 이상 분해가 불가능한 업무의 최소 단위이므로 전부 처리되거나 아예 하나도 처리되지 않아야 한다 일관성(Consistency) 일관된 상태의 데이터베이스에서 .. 2021. 7. 9.
Html - Html에서의 서버사이드 기호 사용법 (<% %>, <%= %>, <%@ %>, <%# %> ) Html페이지에서 서버사이드 코드나 페이지 지시자, 서버사이드 코드 작성을 할 때는 를 이용해서 할 수 있으며 여러방법을 이용하여 Html페이지에서 서버사이드 코드를 제어할 수 있습니다. 또한 실제 Html페이지에서 태그 및 텍스트로 보여지지 않으며 서버사이드 코드로 실행됩니다 서버사이드 코드(문법)을 실행할 수 있게 하지만 때로는 스파게티 코드의 원인이 되어 개발자를 번거롭게 하기도 합니다 C# public string name = "Tailer"; Html Mike Tailer 결과 Tailer 서버사이드 코드의 메소드, 변수, 인스턴스 변수와 같은, 문법이 아닌 결과값이 나오는 항목에 대해서 쓸 수 있습니다 1. 문법을 혼용한 적용법 C# public List food = new List { "Sa.. 2021. 7. 9.
C# - Xml파일 제어, Xml파싱 Xml파일이나 텍스트가 있을 경우 Xml내부에 있는 값을 가져오기 위해서는 다음과 같은 방법을 쓸 수 있습니다. Xml파일 확인케이스 - Xml 속성값 가져오기 - 하위노드 리스트 가져오기 - 노드의 값 가져오기 - 추가된 노드의 하위값들 가져오기 - 중복노드의 값들 가져오기 예제 Xml파일 VS code Xml Sample Document 2019 DDeok guk Ramyeon T1 T2 T3 Xml파일 가져오기 XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load("XmlSample.xml"); 하위노드 리스트 가져오기 XmlNodeList ctg_node_lst = ctg_node.ChildNodes; Xml속성 가져오기 XmlNode ctg_node = x.. 2021. 7. 8.
C# - 연산자 오버로드 C#에서는 연산자를 개발자 임의로 오버로드해서 사용할 수 있도록 되어 있습니다. 특정한 클래스의 값에 대해 연산을 적용할 경우 조건부로 값을 걸어서 원하는 값이 나오도록 설정할 수 있습니다. +, -, >, 100) num = 0; return op._opNum + num; } // + 연산자를 사용할 때 100이 넘어가는 수를 더하면 0으로 만들어버리자 // Ex) 3 + op._opNum public static int operator +(int num, OperaterOvl op) { if (num > 100) num = 0; return op._opNum + num; } // - 연산자를 사용할 때 100이 넘어가는 수를 빼면 100을 빼주자 // Ex) op._opNum - 3 public st.. 2021. 7. 8.
Javascript - Hoisting(호이스팅)이란? Hoisting이란 JavaScript(이하 JS)에서 변수 선언과 관련된 개념입니다. Hoist의 사전적 뜻으로는 감아올리기, 감아 올리는 장치와 같은 뜻을 가지고 있는데 ‘끌어 올리다’와 같은 의미를 가지고 있습니다. Hoisting이 적용되는 대상은 var로 선언한 변수와 function입니다. 이 두 대상들은 함수를 선언하기 전에 호출해도 정상적으로 실행이 되는데 Hoisting에 의해 이런 현상이 발생하게 됩니다. 그리고 이 현상을 var hoisting(변수 선언 끌어올리기), Function declaration hoisting(함수선언 끌어올리기)라고 부릅니다. Hoisting을 공식 문서에서는 다음과 같이 표현하고 있습니다. - 호이스팅을 변수 및 함수 선언이 물리적으로 작성한 코드의 상.. 2021. 7. 7.
728x90