홈페이지에 배너를 추가하려 할 때 배너만을 위해 padding을 변경하고 div를 추가하기가 난감하다.

잘못 바꾸었다가 좌우에 있는 메뉴의 위치가 틀어질 수가 있는데

배너를 추가한 페이지에서만 메뉴의 위치가 틀어져있으면 페이지의 통일감을 깨질 수 있기 때문이다.

 

그래서 position을 사용하여 기준이 되는 div 옆에 배너를 붙이기로했다.

 

배너가 잘릴경우 상위 엘리먼트의 overflow가 hidden이 아닌지를 확인해보아야 하며

그래도 최상위로 올라오지 않을시 style에 z-index값을 주는 방법도 있다.

 

Body
컨테이너
컨텐츠 (기준이되는 박스)
배너

 

 

 <div id="body" style="background: skyblue;">
  <body>
   <div id="container" style="background: yellow; ">
     컨테이너
       <div id="contents" style="background: green;">
         컨텐츠 (기준이되는 박스)
         <div id="banner" style="background: red;">
           배너
         </div>
       </div>
   </div>
 </div>

 <!-- 컨테이너 CSS -->
 #container { 
	width:250px; 
	height:350px; 
	overflow:visible;
 }

 <!-- 컨텐츠 CSS -->
 #contents { 
	width:200px; 
	height:300px; 
	position:relative;
 }

 <!-- 배너 CSS -->
 #banner { 
	width:100px; 
	height:200px; 
	position:absolute; 
	top:0px; 
	right:-110px;
 }

 

 

로그인시 항상 구현하는 부분,

e.keyCode == '13'을 통해서 엔터키를 인식하여 로그인 버튼 클릭 이벤트 실행

 

$('#pwd').on('keypress', function(e){ 
    if(e.keyCode == '13'){ 
        $('#loginBtn').click(); 
    }
}); 

'Web 개발 > JS ' 카테고리의 다른 글

ES6 : async & await  (0) 2019.06.08
ES6 : Spread, Rest Operator  (0) 2019.06.08
ES6 : 비구조화  (0) 2019.06.08
ES6 : Arrow Function, Default Params  (0) 2019.06.08
ES6 : import & export, Classes  (0) 2019.06.08

struts 관련 xml이 컴파일되지 않을 경우 발생 에러
struts로 생성한 객체가 없는데 관련url로 호출할 떄 발생하는 것으로 보임

 


2019. 6. 20 ▒▒▒▒ 9:43:17 org.apache.catalina.core.StandardWrapperValve invoke
▒ɰ▒: Servlet.service() for servlet default threw exception
java.lang.NoClassDefFoundError: org/apache/struts2/util/ClassLoaderUtils
        at org.apache.struts2.codebehind.CodebehindUnknownHandler.locateTemplate(CodebehindUnknownHandler.java:256)
        at org.apache.struts2.codebehind.CodebehindUnknownHandler.handleUnknownAction(CodebehindUnknownHandler.java:99)
        at com.opensymphony.xwork2.DefaultUnknownHandlerManager.handleUnknownAction(DefaultUnknownHandlerManager.java:111)
        at com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:182)
        at org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.java:63)
        at org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:39)
        at com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:58)
        at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:553)
        at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
        at org.apache.struts2.dispatcher.ng.filter.StrutsExecuteFilter.doFilter(StrutsExecuteFilter.java:93)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareFilter.doFilter(StrutsPrepareFilter.java:91)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at com.dsunfold.filter.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:61)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
        at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:190)
        at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:291)
        at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:769)
        at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:698)
        at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:891)
        at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:690)
        at java.lang.Thread.run(Thread.java:619)

'Web 개발 > 간단한 팁' 카테고리의 다른 글

[팁] JUnit 에러 : java.lang.NoClassDefFoundError  (0) 2019.11.07
ASP include  (0) 2019.07.19
Ubuntu Timezone 설정하기  (0) 2018.07.31
AWS에 로컬 파일전송하기 (scp)  (0) 2018.07.29
[팁] JSP 현재 페이지 EL로 받기  (0) 2018.02.20

설정방법

1. log4j.xml파일을 생성(수정)

Spring 으로 세팅하면 기본적으로 log4j를 포함하고 있기 때문에 별도 생성할 필요는 없지만 혹시 없다면 log4j.xml 파일을 생성해야 한다.

Path : src/main/resources/log4j.xml

 

1.log4j.xml 구성

Appender, logger, root 로 구성되어있는 걸로 보인다.

 

Appender는 로그를 찍을 대상이나 어떤 방식으로 찍을 지를 결정하는 설정으로 보인다.

기본 설정값은 console에 찍는 방식으로 되어있고 PatternLayout 클래스를 사용해서 Layout을 잡는다.

 

logger는 Application Loggers라고 주석이 달린 것처럼 package와 같이 영역을 지정하고 해당 영역에서 사용할 logger를 정의하는 태그로 보인다.

하위 파라미터로 level을 받아서 출력할 로그수준을 정한다.

appender-ref 태그를 사용하여 ref 값에 참조할 appender를 입력하여 출력방식을 정할 수 있다.

 

root는 default라고 생각하면 되는 것 같다. 설정하지 않은 logger에 대해서만 root logger를 출력하게 한다. 구성요소는 logger와 유사하다.

**같은 로그가 두번 찍힌다면 Additivity 속성에 대해 확인

 

 

2.설정 파일 기본값

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

	<!-- Appenders -->
	<appender name="console" class="org.apache.log4j.ConsoleAppender">
		<param name="Target" value="System.out" />
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="%-5p: %c - %m%n" />
		</layout>
	</appender>
	
	<!-- Application Loggers -->
	<logger name="kr.co.ohjooyeo">
		<level value="info" />
	</logger>
	
	<!-- 3rdparty Loggers -->
	<logger name="org.springframework.core">
		<level value="info" />
	</logger>
	
	<logger name="org.springframework.beans">
		<level value="info" />
	</logger>
	
	<logger name="org.springframework.context">
		<level value="info" />
	</logger>

	<logger name="org.springframework.web">
		<level value="info" />
	</logger>

	<!-- Root Logger -->
	<root>
		<priority value="warn" />
		<appender-ref ref="console" />
	</root>
			
</log4j:configuration>

 

사용방법

사용할 클래스에 private static final 로거 변수 선언 이렇게 선언을 하면 xml에서 해당 어플리케이션(패키지)의 로거를 생성

1. 선언

Logger의 name을 패키지로 잡았을 경우, 패키지내의 클래스명.class를 파리미터로 선언

private static final Logger logger = LoggerFactory.getLogger(선언한 클래스명.class);

 

Logger의 name을 변수명으로 잡았을 경우, logger의 이름(문자열)을 파리미터로 선언

private static final Logger logger = LoggerFactory.getLogger("test");
<!-- Application Loggers --> <logger name="test"> <level value="info" /> </logger>

Log4j의 구조

1. Logger

  • 로그의 주체 : 로그 파일을 작성하는 클래스
  • 로그레벨을 가짐 (로그문의 레벨과 로거 레벨를 비교하여 로그의 출력여부를 결정)
  • 출력할 메시지를 Appender에 전달

2.Appender

  • 전달된 로그를 어디에 출력할지 결정 ( 콘솔 / 파일 / DB 등)
    • Appender 종류
      • WriterAppender :
        Writer 객체에 로그를 남기는 Appender
      • ConsoleAppender :
        System.out, System.err에 로그를 남기는 Appender

        - 옵션
        Target : System.out / System.err
        Follow : true -> SystemOutStream 에 저장
        activeOption : appender를 활성화

      • FileAppender :
        파일에 로그를 남기는 Appender

        - 옵션
        File : 파일명 Append : 추가 모드 여부 (true/false)
        BufferedIO : 버퍼 사용 여부 (true/false)
        BufferSize : 버퍼 사이즈

        --??--
        Threshold : (AppenderSkelton으로부터 계승)
        ImmediateFlush : (WriteAppender로부터 계승)
        Encoding : (WriteAppender로부터 계승)

      • RollingFileAppender :
        크기에 따라 File명을 변환하며 로그를 남기는 Appender

        - 옵션
        MaxFileSize : 최대 파일 사이즈
        MaxBackupIndex : 로그를 최대 개수
        File, Append, BufferdIO, BufferSize, Threshold, ImmediateFlush, Encoding

      • DailyRollingFileAppender :
        날짜에 따라 File명을 변환하며 로그를 남기는 Appender

        - 옵션 DatePattern : 날짜 형식(yyyy-MM, yyyy-ww,yyyy-MM-dd, yyyy-MM-dd-a, yyyy-MM-dd-HH 등등)

      • RollingFileAppender : 크기에 따라 File명을 변환하며 로그를 남기는 Appender
      • AsyncAppender : Logging Event 발생시 Thread를 생성하여 로그를 남기는 Appender

        -옵션
        triggeringPolicy : 로그 트리거 옵션
        rollingPolicy : 로그 정책 옵션
        org.apache.log4j.rolling.TimeBasedRollingPolicy : 시간 베이스 org.apache.log4j.rolling.SizeBasedTriggeringPolicy : 사이즈 베이스org.apache.log4j.rolling.FilterBasedTriggeringPolicy : 필터 베이스org.apache.log4j.rolling.FixedWindowRollingPolicy : 인덱스 베이스 백업 파일
      • SMTPAppender :
        로그를 이메일로 전달하는 Appender

출처: <https://m.blog.naver.com/PostView.nhn?blogId=youngchanmm&logNo=221029597791&proxyReferer=https%3A%2F%2Fwww.google.co.kr%2F>

 

 

3. Layout

  • 어떤 형식으로 출력할지 결정
  • Layout 종류
    • DateLayout
    • HTMLLayout
    • PatternLayout (일반적으로 사용)
      • PatternLayout (org.apache.log4j.PatternLayout) 상세 설명
        • C : 클래스명을 출력
          설정을 추가하여 클래스 이름 또는 특정 패키지 이상만 출력하도록 설정 가능

          - 추가 설정 -
          m : 로그로 전달된 메시지를 출력한다.
          M : 로그를 수행한 메소드명을 출력한다.
          n : 줄 바꿈
          p : 로그 이벤트명 (DEBUG등)
          r : 로그 처리시간 (milliseconds)

        • d : 로그 시간을 출력한다. java.text.SimpleDateFormat에서 적절한 출력 포맷을 지정할 수 있다.
        • F : 파일 이름을 출력한다. 로그 시 수행한 메소드, 라인번호가 함께 출력된다.
        • l (location) : 로깅 이벤트가 발생한 클래스의 풀네임.메서드명(파일명:라인번호) 출력
        • L : 라인 번호만 출력
        • m : 로그로 전달된 메시지 출력
        • M : 로그를 수행한 메소드명 출력
        • n : 줄바꿈
        • p : 로그 이벤트명 (레벨명)
        • r : 로그 처리시간 (milliseconds)
        • T : 로깅 이벤트가 발생한 스레드명

          출처: <https://androphil.tistory.com/420>
      • SimpleLayout
      • XMLLayout

 

 

Log4j 란?
log4j는 프로그램을 작성하는 도중에 로그를 남기기 위해 사용되는 자바기반 로깅 유틸리티이다. 디버그용 도구로 주로 사용되고 있다.
log4j의 최근 버전에 의하면 높은 등급에서 낮은 등급으로의 6개 로그 레벨을 가지고 있다. 설정 파일에 대상별(자바에서는 패키지)로 레벨을 지정이 가능하고 그 등급 이상의 로그만 저장하는 방식이다.
1. 목적
System.out.println() 을 사용하여 로그를 확인할 경우 사용하지 않게 되면 일일이 주석처리를 해야 한다.
로그의 레벨이나 로그문의 레벨에 따라서 로그를 유연하게 출력하여 불필요한 업무를 줄이고 성능을 최적화 할 수 있다.
(그대로 둔다면 프로그램 성능에 영향을 미칠 수 있다.)
2. 종류
6개의 레벨로 구성됨
1.
FATAL : 아주 심각한 에러가 발생한 상태를 나타낸다.
2.
ERROR : 어떠한 요청을 처리하는 중 문제가 발생한 상태를 나타낸다.
3.
WARN : 프로그램의 실행에는 문제가 없지만, 향후 시스템 에러의 원인이 될 수 있는 경고성 메시지를 나타낸다.
4.
INFO : 어떠한 상태변경과 같은 정보성 메시지를 나타낸다.
5.
DEBUG : 개발 시 디버그 용도로 사용하는 메시지를 나타낸다.
6.
TRACE : 디버그 레벨이 너무 광범위한 것을 해결하기 위해서 좀 더 상세한 이벤트를 나타낸다.
개요
GenericServlet을 확장한 HttpServlet 클래스 이용하여 서블릿 생성
클라이언트 요청을 GET, POST등으로 구분하여 처리
리다이렉트, 리프래시를 다루는 방법 학습
초기화 매개변수를 이용 설정 정보를 외부 파일에 두는 방법 및 서블릿에서 참고하는 방법
JDBC를 이용하여 데이터베이스회원 정보를 등록, 조회, 변경, 삭제
데이터베이스에서 데이터 가져오기
데이터베이스를 사용하기 위한 요소
1) JDBC 드라이버 : 데이터베이스를 요청, 전달, 결과를 받을 때 사용할 도구 자바에서 제공하는 DB와 통신하는 기술 자바에 데이터 베이스 접근하기 위해 필요
2) SQL : 데이터베이스에 명령을 내릴 언어
1. 회원 목록 조회 구현
샘플 데이터 생성
-- 샘플 테이블 생성 create table MEMBERS ( MNO integer not null comment '일련번호', EMAIL VARCHAR(40) not null comment '이메일', PWD VARCHAR(100) not null comment '암호', MNAME VARCHAR(50) not null comment '이름', CRE_DATE DATETIME not null comment '가입일', MOD_DATE DATETIME not null comment '마지막암호변경일' ) COMMENT '회원기본정보'; -- 제약조건, 인덱스 등 설정 ALTER TABLE MEMBERS ADD CONSTRAINT PK_MEMBERS PRIMARY KEY ( MNO ); CREATE UNIQUE INDEX UIX_MEMBERS ON MEMBERS (EMAIL ASC ); ALTER TABLE MEMBERS MODIFY COLUMN MNO INTEGER NOT NULL AUTO_INCREMENT COMMENT '회원일련번호'; -- 샘플데이터 입력 INSERT INTO MEMBERS(EMAIL, PWD, MNAME, CRE_DATE, MOD_DATE) VALUES ('s2@test.com','1111','임꺽정',NOW(),NOW()); INSERT INTO MEMBERS(EMAIL, PWD, MNAME, CRE_DATE, MOD_DATE) VALUES ('s3@test.com','1111','일지매',NOW(),NOW()); INSERT INTO MEMBERS(EMAIL, PWD, MNAME, CRE_DATE, MOD_DATE) VALUES ('s4@test.com','1111','이몽룡',NOW(),NOW()); INSERT INTO MEMBERS(EMAIL, PWD, MNAME, CRE_DATE, MOD_DATE) VALUES ('s5@test.com','1111','성춘향',NOW(),NOW());
SQL
JDBC 드라이버 준비
Type1 JDBC 드라이버 : 자바 실행환경 (Java Runtime Environment) 에 기본 포함 ODBC 드라이버를 사용
Type4 JDBC 드라이버 : MySQL 통신 프로토콜에 맞추어 데이터베이스와 직접 통신 ⇒ ODBC 드라이버를 필요로 하지 않음
서블릿 만들기
@WebServlet("/member/list") public class MemberListServlet extends GenericServlet { @Override public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException { Connection conn = null; Statement stmt = null; ResultSet rs = null; try { DriverManager.registerDriver(new com.mysql.jdbc.Driver()); conn = DriverManager.getConnection("jdbc:mysql://ec2-52-79-233-2.ap-northeast-2.compute.amazonaws.com/workbook?serverTimezone=Asia/Seoul", "workbook", "password"); stmt = conn.createStatement(); rs = stmt.executeQuery("select * from MEMBERS"); response.setContentType("text/html; charset=UTF-8"); PrintWriter out = response.getWriter(); out.println("<html><head><title>회원목록</title></head>"); out.println("<body><h1>회원목록</h1>"); while (rs.next()) { out.println( rs.getInt("MNO") + "," + rs.getString("MNAME") + "," + rs.getString("EMAIL") + "," + rs.getDate("CRE_DATE") + "<br>"); } out.println("</body></html>"); } catch(Exception e){ throw new ServletException(e); }finally { try {if (rs != null) rs.close();} catch(Exception e) {} try {if (stmt != null) stmt.close();} catch(Exception e) {} try {if (conn != null) conn.close();} catch(Exception e) {} } } }
Java
1) JDBC 관련 객체 선언
Connection conn = null; Statement stmt = null; ResultSet rs = null;
Java
2) JDBC API 예외 발생 대비
try { } catch(Exception e){ throw new ServletException(e); }finally { }
Java
서블릿에서 발생한 예외는 서블릿 컨테이너에 던짐
3) DriverManager가 사용할 JDBC 드라이버 등록
DriverManager.registerDriver( new com.mysql.jdbc.Driver()) // new com.mysql.jdbc.Driver() == java.sql.Driver 인터페이스 구현체
Java
java.sql.Driver 인터페이스 구현체
DriverManager에 등록됨
getMajorVersion(), getMinorVersion() : JDBC 드라이버 버전 제공
acceptsURL() : JDBC URL이 드라이버에서 사용가능한지 알려줌
connect() : 데이터베이스와 연결 수행 > Connect 객체 반환
4) DriverManager가 사용할 JDBC 드라이버 등록
DriverManager.registerDriver( new com.mysql.jdbc.Driver()) // new com.mysql.jdbc.Driver() == java.sql.Driver 인터페이스 구현체
Java
5) 데이터베이스에 연결
conn = DriverManager.getConnection("jdbc:mysql://ec2-52-79-233-2.ap-northeast-2.compute.amazonaws.com/workbook?serverTimezone=Asia/Seoul", "workbook", "password");
Java
DriverManager.getConnection(JDBC URL, DBMS 사용자 ID, DBMS 사용자 PW);
** JDBC URL의 구조
jdbc:mysql:thin:@localhost:3306:studydb // jdbc:mysql = 사용할 JDBC 드라이버 // thin = 드라이버 타입 // @localhost:3306 = 서버주소, 포트번호 // studydb = db 서비스 id
Java
⇒ java.sql.Connection 인터페이스 구현체 반환 : SQL을 실행할 객체를 얻을 수 있음
주요메서드
1) SQL문 실행 객체 반환 : createStatement(), prepareStatement(), prepareCall()
2) 트랜잭션 처리 수행 : commit(), rollback()
6) SQL 실행 객체 준비
stmt = conn.createStatement();
Java
⇒ java.sql.Statement 인터페이스 구현체 반환 : 데이터베이스에 질의하는 객체
주요 메서드
1) executeQuery() : 결과가 만들어지는 SQL문 실행 시 사용 (주로 SELECT 문에서 실행)
2) executeUpdate() : DML, DDL 실행시 사용
3) execute() : SELECT, DML, DDL 모두사용가능
4) executeBatch() : addBate()로 여러개의 SQL 등록, 한번에 실행
7) 데이터베이스에 SQL문 보내기
rs = stmt.executeQuery("select * from MEMBERS");
Java
⇒ java.sql.ResultSet 인터페이스 구현체 반환
주요 메서드
1) first() : 서버에서 첫번째 레코드 가져오기
2) last() : 서버에서 마지막 레코드 가져오기
3) previous() : 서버에서 이전 레코드 가져오기
4) next() : 서버에서 다음 레코드 가져오기
5) getXXX(컬럼명) : 특정 컬럼을 타입에 맞추어 가져오기 (getInt,getString,getDate ... )
6) updateXXX() : 특정 컬럼의 값을 변경
7) deleteRow() : 현재 레코드 지우기
8) select 결과 가져오기
while (rs.next()) { out.println( rs.getInt("MNO") + "," + rs.getString("MNAME") + "," + rs.getString("EMAIL") + "," + rs.getDate("CRE_DATE") + "<br>"); }
Java
rs.next() : t/f를 반환 다음이 있을 경우, rs 객체는 해당 레코드를 가져옴
9) JDBC 프로그래밍의 마무리
finally { try {if (rs != null) rs.close();} catch(Exception e) {} try {if (stmt != null) stmt.close();} catch(Exception e) {} try {if (conn != null) conn.close();} catch(Exception e) {} }
Java
finally에 자원을 해제하기 좋음
자원 해제 시 자원 선언의 역순으로 처리
javascript 에서 callback hell 해결
Promise 함수
module.export → 명시적으로 간편하게 import & export 할 수 있도록 제공
//includes.js 내용 export const fruits = ['apple','banana','potat']; export const test = "asdf" export default test;
JavaScript
View Original
Async & Await
예제코드
function resolvePromise(){ return new Promise((resolve, reject)=>{ setTimeout(()=>{ resolve("done!!"); },2000); }) } async function getPromise1(){ let result = null; result = await resolvePromise(); console.log(result); result = await resolvePromise(); console.log(result); } getPromise1(); //결과 done!! done!!
JavaScript
await 를 사용하지않으면 resolvePromise가 진행 중일 때 result에 할당 ( 기다리지않음)
async function getPromise1(){ let result = null; result = resolvePromise(); console.log(result); result = resolvePromise(); console.log(result); } getPromise1(); //결과 Promise { <pending> } Promise { <pending> }
JavaScript
async 로 선언되어 있지 않은 함수에 대해 await 사용하면 에러 발생
function getPromise1(){ let result = null; result = await resolvePromise(); console.log(result); result = await resolvePromise(); console.log(result); } getPromise1(); //결과 SyntaxError: /Users/kyome/dev/es6/src/index.js: Can not use keyword 'await' outside an async function (11:13)
JavaScript

'Web 개발 > JS ' 카테고리의 다른 글

[jQuery] 엔터로 로그인하기  (0) 2019.06.26
ES6 : Spread, Rest Operator  (0) 2019.06.08
ES6 : 비구조화  (0) 2019.06.08
ES6 : Arrow Function, Default Params  (0) 2019.06.08
ES6 : import & export, Classes  (0) 2019.06.08
Spread Operator
...target 방식으로 사용
값을 복사하기 위해 사용
배열
let years = [2001,2010,2015,2018]; let yearsCp = [...years]; console.log(yearsCp);
JavaScript
객체
let koreaHistory = { liberate : 1945, 625 : 1950 }; let history = { worldwar1 : 1914, worldwar2 : 1945, ...koreaHistory } console.log(history);
JavaScript
defualt값을 설절해주고싶을때 사용
let address1 = { country : "South Korea", city : "Seoul" }; let address2 = { ...address1, country : "United State" } console.log(address2);
JavaScript
Rest Operator
파라미터로 Spread Operator 를 받아서 사용
function printYears(...years){ console.log(years); } printYears(2000, 2001, 2010, 2015, 2018);
JavaScript
// 결과 [ 2000, 2001, 2010, 2015, 2018 ]
JavaScript
과거코드와 비교
// 과거 function printYears(years){ console.log(arguments); } printYears(2000, 2001, 2010, 2015, 2018);
JavaScript
//결과 [Arguments] { '0': 2000, '1': 2001, '2': 2010, '3': 2015, '4': 2018 }
JavaScript

'Web 개발 > JS ' 카테고리의 다른 글

[jQuery] 엔터로 로그인하기  (0) 2019.06.26
ES6 : async & await  (0) 2019.06.08
ES6 : 비구조화  (0) 2019.06.08
ES6 : Arrow Function, Default Params  (0) 2019.06.08
ES6 : import & export, Classes  (0) 2019.06.08
문자열 표기법
` ` 식으로 표현하여 문자열에 변수를 추가
const val1 = 'my String1'; const val2 = 'my String2'; const litVal = `${val1}, ${val2}`;
JavaScript
비구조화
객체 비구조화
객체를 풀어서 바로 변수로 선언
: 을 활용하여 변수명 변경 가능
const address = { country : 'South Korea', city : 'Seoul', street : 'Gangnam', str_num : 141, postcode :'0015' } const {country,city} = address; console.log(`${country}, ${city}`); //rename const {country:a,city:b} = address; console.log(`${a}, ${b}`);
JavaScript
배열 비구조화
배열의 순서대로 변수 선언
const [firstCountry,secondCountry] = ['Japan','SouthKorea', 'America']; console.log(firstCountry,secondCountry); const [thirdCountry] = ['Japan','South Korea', 'America']; console.log(thirdCountry);
JavaScript
객체 리터럴
객체안에서의 키와 벨류가 동일하다면 다음과 같이 사용해도 된다. (배열과 유사한 모습으로 선언)
//객체 리터럴, Object Literal function getAddress(country, city, street){ const myAddress = {country, city, street}; console.log(myAddress); } function getAddressOrigin(country, city, street){ const myAddress = { country:country, city:city, street:street }; console.log(myAddress); } getAddress('Japan','South Korea', 'America'); getAddressOrigin('Japan','South Korea', 'America');
JavaScript

'Web 개발 > JS ' 카테고리의 다른 글

ES6 : async & await  (0) 2019.06.08
ES6 : Spread, Rest Operator  (0) 2019.06.08
ES6 : Arrow Function, Default Params  (0) 2019.06.08
ES6 : import & export, Classes  (0) 2019.06.08
ES6 : Map & Set  (0) 2019.06.08

+ Recent posts

"여기"를 클릭하면 광고 제거.