728x90



1강. Java와 객체지향 프로그래밍

0. JAVA 관련 주요 사이트

https://docs.oracle.com/javase/8/docs/api/

http://learnjavaonline.org/

https://www.tutorialspoint.com/java/

https://www.w3schools.com/java/


1. JAVA언어의 기원

1990년 그린프로젝트 Oak 언어

1995년 주목 웹확산 관련

1996년 JDK 1.0발표

1998년 Java 2 발표

2014년 Java Platform(JDK) SE8 

2009년 Oracle sun 인수함


2. Java 언어의 특징

C/C++ 언어와 유사하나 단순함

플랫폼에 독립적

완전한 객체 지향 언어

웹 또는 네트워크 프로그램에 용의

엄격한 자료형의 검사

예외 처리 기능 제공

멀티 스레딩 지원


3. Java 프로그램의 실행

Java 소스프로그램의 확장자는 .java

바이트 코드(.class) :  Java 소스 컴파일한 결과물, 

클래스 파일, 

Java VM 에서 실행 가능한 코드 

"Write once run anywhere"


4. 애플리케이션과 애플릿

애플리케이션 : Java 플랫폼에서 바로 실행되는 프로그램

애플릿 : HTML 웹 페이지에 포함되어 웹 프라우저를 통해 실행, 웹 프라우저는 Java VM을 포함

         <APPLET CODE="HelloApplet.class" WIDTH=200 HEIGHT=100></APPLET>


5. Java 플랫폼

프로그램의 실행을 위한 하드웨어와 소프트웨어 환경

Java 플랫폼은 Java 프로그램의 개발과 실행을 위한 환경

운영체제에 맞는 Java 플랫 폼을 설치해야함. 

(Java 플랫폼위에 Java 프로그램이 있음)


6. 간단한 Java 프로그램. 

Hello 애플리케이션. 

주석내용

The Hello class implements an application that simply prints "Hello Java Application" to standard output.

Display the string


7. 클래스와 객체

추상화 : 구체적인 모든 사실이 아니라 전형적이고 필요한 부분만을 가지고 사물을 이해하고 표현하는것

클래스 : 객체를 만들기 위한 모형 또는 틀

공통적인 특징을 가지는 객체들을 추상화하기 위한 수단

객체의 상태는 필드 행위는 메소드로 구현

객체는 특정 클래스의 인스턴스


2. 자바 기본문법            

변수와 자료형

데이터 필드(인스턴스 변수 + 클래스 변수)

인스턴스 변수 : (클래스 정의에서 static이 아닌 필드) 객체가 소유하는 변수

클래스 변수 (클래스 정의에서 static 필드) 객체가 공유하는 변수  = 정적변수 

지역변수 : 메소드 내부에서 선언된 변수, 초기값을 지정한 후 사용. 접근제어자를 사용하지 않음. 

파라메터 메소드 호출 시 전달하는 값을 저장하기 위한 변수


Java 기본자료형

char  2byte  '\u0000' ~\uFFFF'    0~65536

boolean 1byte

byte   1byte   -128~127

short  2byte  -32768~32767

int      2byte   -2^31_2^31-1

long   8byte -2^663 ~2^63-1

실수  float  4byte

double 8byte


0b   2진수

032 8진수

0x1a 16진수

참조형 : 기본형을 제외한 모든 자료형

배열, 클래스형

포인터 변수개념.... new 연산자로 메모리를 확보해야한다. 


형변환 : 

묵시적 자료형 변환작은 타입에서 큰 타입으로는 자동 형변환

byte > short > int > long > float > double

double d = 6;

double res = Math.sqrt(2)   --> 2.0

명시적 자료형의 변환

floate f = (float)5.5


연산자와 제어문. 

^  : 

~  :

>>:  shift 연산자

대입연산자는 오른쪽에서 왼쪽으로 진행 나머지는 왼쪽에서 오른쪽으로 진행

 

문장의 종류

수식문

변수 선언문

제어문

기타

블록문

레이블문    레이블 위치로 이동

예외 처리문  

동기화문 

for - each  : 배열이나 컬렉션 원소들을 차례로 다룰 때 편리

break  : 반복문이나 switch 문을 빠져 나갈때 사용. 

break 레이블 ;

continue 레이블 ; 


배열 : 같은 자료형의 원소를 정해진 개수만큼 가지고 있는 객체

선언과 동시에 중괄호 or new 연산자를 이용

int b[]; b={4,5,6}  : 오류

.length


클래스 앞의 접근제어자. 

public or 생략,  private와 protected 는 사용불가













728x90


java 8

try with resource  : doc 보기

1
2
3
        try (Connection connection = DriverManager.getConnection(url, username, password)){
            System.out.println("Connection create:"+connection);
        }


lambda : doc 보기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    public static void main(String[] args) {
 
        List<Person> people = Arrays.asList(//
                new Person("Charles""Dickens"60), new Person("Lewis""Carroll"42),
                new Person("Thomas""Carlyle"51), new Person("Charlotte""Brante"45),
                new Person("Mattew""Arnold"39));
  //--> 이부분
        System.out.println("Printing all persons");
        //System.out.println(person)  :
        // p -> method(p)
        //person -> System.out.println(person)
        printConditionaly(people, person -> trueSystem.out::println);
    }
 
    private static void printConditionaly(List<Person> people, Predicate<Person> predicate, Consumer<Person> consumer) {
        for (Person person : people) {
            if (predicate.test(person))
                consumer.accept(person);
        }
    }
cs


728x90

13. 웹 프로그래밍 설계 모델

13-1 웹 프로그래밍 구축하기 위한 설계모델

Model 1  :

 브라우저  ⇔  WAS(웹 어플리케이션 서버)  ⇔ 데이터 베이스

                    (JSP  ⇔ Service & DAO)

HTML에 java 태그를 동시 사용... 유지보수 어려움. 


Model 2  :

 브라우저  ⇔  WAS(웹 어플리케이션 서버)  ⇔  Model ⇔ 데이터 베이스

                    (Controller ⇔ Service ⇔ DAO)

                     View (JSP)

13-2 스프링 MVC 프레임워크 설계구조

브라우저 ⇔ DispatcherServlet ⇒ HandlerMapping

                                       ⇔  HandlerAdapter  ⇔ Controller

      ⇒View(jsp)                          ⇒ 브라우저

      ⇒ ViewResolver : 처리 결과를 출력할 view 선택     


사진 출처 : http://wondongho.tistory.com/59    

 

 13-3 DispatcherServlet 설정

web.xml 서플릿을 맴핑

스프링 설정파일 있으면(servlet-context.xml) 맵핑 하여--> 스프링 컨테이너생성 : HanderMapping, HandlerAdapter, ViewResolver

초기화 파라메터에서 스프링 설정 파일 지정하지 않은경우 서블릿 별칭( appServlet-context.xml)을 이용 --> 스프링 컨테이너 생성 : HanderMapping, HandlerAdapter, ViewResolver

13-4. Controller 객체 @Controller

DispatcherServlet  ⇔  HandlerAdapter ⇔ Controller

servlet-context.xml  :   

<annotation-driven/>

 @Controller

public class HomeContoller{}


13-5 Controller 객체  @RequestMapping

DispatcherServlet  ⇔  HandlerAdapter ⇔ Controller

@RequestMapping("/success")

public String success(Model model){

     return "success";

13-6 Controller 객체  Model 타입의 파라메터

DispatcherServlet  ⇔  HandlerAdapter ⇔ Controller

@RequestMapping("/success")

public String success(Model model){

model.setAttribute("tempData", "model has data!!");

     return "success";


: 개발자는 Model 객체에 데이터를 담아서 DispatcherServlet 에전달가능

: DispatcherServlet에 전달된 Model 데이터는 View 에서 가공되어 클라이언트에게 응답처리


13-7. View 객체

DispatcherServlet  ⇔  HandlerAdapter ⇔ Controller

<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->

<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">

<beans:property name="prefix" value="/WEB-INF/views/" />

<beans:property name="suffix" value=".jsp" />

</beans:bean>

:: 리턴값을 갖고 viewResolver 설정 값을 합쳐서 jsp를 만들어줌. 


13-8. 전체적인 웹 프로그래밍 구조

브라우저: 최초 사용자 요청 ex) ip/cho4/sucess

 ⇒ DispatcherServlet  

⇔  Controller :  @Controller 적용 클래스 검색

⇔  @RequestMapping("success") :사용자 요청 해당 메서드 실행

⇒ ViewResolver : 처리 결과를 출력할 view 선택     

⇒ View : 브라우저에 JSP 응답

14. 스프링 MVC 웹서비스

14-1. 웹 서버(Tomcat)다운로드

현재 실무에서 7, 8 주로사용
Binary Distributions > Core: >zip (pgp, sha512)

14-2. 웹 서버(Tomcat)와 이클립스 연동

Tomcat 더블클릭
Server Location > Use Tomcat Installation ( Takes control of Tomcat Installation)
Server Options > Publish module contexts to seprate XML files
Ports > HTTP/1.1    8090   (Oracle 8080 을 써서 임의 변경)

cf) 톰캣 재설치 불가 가이드 : http://linguist79.tistory.com/24

http://localhost:8090/  or  http://127.0.0.1:8090/   접속

14-3. 이클립스 STS (String Tool Suit) 설치

Eclips Marketspace > sts  설치

14-4. STS를 이용한 웹 프로젝트 생성

Spring Legacy Projedt 생성
Spring MVC Project 선택

패키지명 등록

프로젝트 명등록
com.drengneer.spring   -->접속주소 : http://localhost:8090/spring/

14-5. 스프링 MVC 프레임워크를 이용한 웹 프로젝트 분석


15. 스프링 MVC 웹서비스2

15-1. 프로젝트 전체구조

webapp: 웹과 관련된 파일 : 스프링 설정파일, jsp, HTML, 등
resources: JSP 파일을 제외한 HTML, css, js 파일등 위치
spring 폴더 스프링 컨테이너를 생성하기 위한 스프링 설정파일이 위치
views. jsp 파일
pom.xml 메인 레파지토리에서 프로젝트에 필요한 라이브러리를 내려받기 위한 메이븐 설정파일

15-2. web.xml

<servlet>

<servlet-name>appServlet</servlet-name>

<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

<init-param>

<param-name>contextConfigLocation</param-name>

<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>

</init-param>

<load-on-startup>1</load-on-startup>

</servlet>

<servlet-mapping>

<servlet-name>appServlet</servlet-name>

<url-pattern>/</url-pattern>

</servlet-mapping> 

15-3. DispatcherServlet

웹 어플리케이션 최초 사용자의 요청이 발생되면 DispatcherServlet이 사용자의 요청을 받는다. 
따라서 DispatcherServlet을 서블릿으로 등록해주는 과정을 설정해주어야 하고 요청을 받기 위해 서블릿 맵핑 경로는 "/" 로 설정

브라우저 ⇔ DispatcherServlet ⇒ HandlerMapping

                                       ⇔  HandlerAdapter  ⇔ Controller

      ⇒ ViewResolver  ⇒View(jsp)                          ⇒ 브라우저


HandlerMapping : 컨트롤러 검색

HandlerAdapter : 메서드 실행요청

Model And View 객체 이용 

15-4. servlet-context.xml

<annotation-driven />  : 어노테이션 사용을 위한 태그

<resources mapping="/resources/**" location="/resources/" /> : 리소스   : index.html, common.css...

<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>
<context:component-scan base-package="com.drengineer.spring" /> : 패키지 이름

15-5. Controller

15-6. View


16. STS를 이용하지 않은 웹 프로젝트

16-1. 스프링 MVC 웹 에플리케이션 제작을 위한 폴더 생성

16-2. pom.xml 및 이클립스 import

16-3. web.xml

16-4. 스프링설정파일(servlet-context.xml)생성

16-5. root-context.xml 작성

16-6. 컨트롤러와 뷰 작성

16-6. 실행


17. Service & DAO 객체 구현

17-1. 웹 어플리케이션 준비

17-2. 한글 처리

  <!-- 한글설정 -->

<filter>

<filter-name>encodingFilter</filter-name>

<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>

<init-param>

<param-name>encoding</param-name>

<param-value>UTF-8</param-value>

</init-param>

<init-param>

<param-name>forceEncoding</param-name>

<param-value>true</param-value>

</init-param>

</filter>


<filter-mapping>

<filter-name>encodingFilter</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

<!-- //한글설정 -->

17-2. 서비스 객체 구현

서비스 빈생성

//@Component

//@Repository

@Service


빈연결

// MemberService memberService  = new MemberService();

// @Autowired  스프링 전용, 타입으로 지정

// @Inject     자바 전용, 타입으로 지정

@Resource(name="memberService")  //자바전용 이름으로 지정, java 8부터  설정이 바뀌어 annotation 임포트 여부 확인 필요

18. Controller 객체 구현

18-1. 웹 어플리케이션 준비

18-2. @RequestMapping을 이용한 URL 맵핑

@RequestMapping("/member")
public class MemberController {


@RequestMapping(value = "/memberJoin", method = RequestMethod.POST)
public String memberJoin(Model model, HttpServletRequest request, Member member) {

18-3. 요청 파라메터

//      Member member = new Member();

// member.setMemberId(request.getParameter("memberId"));

// member.setMemberPhone2(request.getParameter("memberPhone1"));


// @RequestParam(value = "memberId", required = true) String memberId,

// @RequestParam(value = "memberId", required = false, defaultValue = "010") String memberPhone1

// member.setMemberId(memberId);

// member.setMemberPhone1(memberPhone1);

1. 멤버 커맨드 객체이용

public String memberJoin(Model model, HttpServletRequest request, Member member) {  

2.  중첩 커맨드 객체이용

PHONE: <input type="text" name="phoneList[0].memberPhone1"/>-

<input type="text" name="phoneList[1].memberPhone3"/>

19. Controller 객체 구현

19-1. @ModelAttribute

1. 닉네임 기능 : java 코드에서는 member로 사용하고 jsp 에 mem으로 사용

public String memberJoin(@ModelAttribute("mem") Member member) { // Member :: 커멘드 객체


2.  공통실행 기능
@ModelAttribute("serverTime")
public String getServicerTime(Locale locale) {
Date date = new Date();
DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);
return dateFormat.format(date);
}

 

19-2. Model  @ ModelAndView

Model 은 view에 데이터만 전달하기위한 개게
Model And View 데이터 뷰를 함께 전달   Model

  ModelAndView mav = new ModelAndView();

mav.addObject("memberIp", request.getRemoteAddr());

mav.setViewName("memberLoginOk");

return mav;






728x90

6. 의존객체 Dependency injection

- 배터리 일체형(특정 배터리 소멸시 장난감 사야함) vs 배터리 분리형(쓸때 마다 배터리를 넣음 or 처음에 배터리가 있고 추가로 set하여 사용)

- 스프링 설정파일(applicationContext.xml)


7. 다양한 의존 객체 주입

생성자, setter, list, map 타입 DI 방법이 있다. 

7-1 :생성자를 이용한 의존 객체 주입

메소드중 첫자가 대문자면 생성자. 

public StuduntRegisterService(StudentDao studentDao){

this.studentDao= studentDao;

}

<bean id="studentDao" class="ems.member.dao.studentDao"/>

<bean id="registerService" class="ems.member.service.StudentRegisterService">

<constructor-arg ref="studentDao"></constructor-arg>

</bean>

7-2 :setter를 이용한 의존객체 주입

set 뒤의 대문자를 소문자로 바꾸고 찾음. 

 public void setJdbcUrl(String jdbcUrl){

this.jdbcUrl = jdbcUrl;

}

public void setUserId(String userId){

this.userId = userId;

}

public void setUserPw(String userPw){

this.userPw = userPw;

}

 <bean id="dataBaseConnectionInfoDev" class="ems.member.DataBaseConnectionInfo">

<property name="jdbcUrl" value="jdbc:orclae:thin:@localhost:1521:xe"/>

<property name="userId" value="scott"/>

<property name="userPw" value="tiger"/>

</bean>

7-3 :List타입 의존 객체 주입

 public void setDevelopers(List<String> developers){

this.developers=developers;

}

 <property name="developers">

<list>

<value>Cheney.</value>

<value>Eloy.</value>

<value>Jasper.</value>

<value>Dillon.</value>

</list>

</property>

7-4 :Map타입 의존 객체 주입

public void setDevelopers(Map<String, String> administrators){

this.administrators=administrators;

}

<property name="administrators">

<map>

<entry>

<key>

<value>Cheney</value>

</key>

<value>cheny@springPjt.org</value>

//<ref bean=""> 빈주입도 가능. 

<entry>

<entry>

<key>

<value>Jasper</value>

</key>

<value>Jsper@springPjt.org</value>

<entry>

</property>


8. 스프링 설정파일 분리

applicationContext.xml  --> 분리 appCtx1.xml, appCtx2.xml, appCtx3.xml

8-1-1 MainClassUseXmls.java

String[] appCtxs = {

"classpath:appCtx1.xml",

     "classpath:appCtx2.xml",

     "classpath:appCtx3.xml"

};

GenericXmlApplicationContext ctx = new GenericXmlApplicationContext(appCtxs);

8-1-1 appCtximport.xml 연결후 xml 파일에 import

<import resource="classpath:appCtx1.xml"/> 

<import resource="classpath:appCtx2.xml"/> 

<import resource="classpath:appCtx3.xml"/> 


JVM 에서 어플리케이션을 실행할때. main 을 찾아서 실행.. 프로젝트를 실행시키면 메인 메소드 목록을 보여줌. 


8-2 빈(Bean) 범위

싱클톤 singleton : 1개만 생성되며  getBean() 메소드로 호출될 때 동일한 객체가 반환된다. 

             호출1 : getBean("A"), 호출2: getBean("B")   >> 같은 메모리 주소에 있는 객체 1개만 호출. 

프로토 타입 prototype: 싱글톤 범위와 반대의 개념, scope 속성으로 명시해 주면된다. 

<bean id="injectionBean" class="scope.ex.DependencyBean" />

<bean id="dependencyBean" class="scope.ex.DependencyBean" scope="prototype">

<constructor-arg ref="injectionBean"/> 

<property name="injectionBean" ref="injectionBean"/>

</bean>


9. 의존객체 자동 주입

9-1 의존객체 자동주입이란?

스프링 설정 파일에서 의존객체를 주입할 때 Constuctor-org 또는 property 태그로 의존대상 객체를 명시하지 않아도 

스프링 컨테이너가 자동으로 필요한 의존 대상을 찾아서 의존 대상 객체가 필요한 객체에 주입해 주는 기능

구현한 방법은 @Autowired, @Resource 어노테이션을 이용해서 쉽게 구현할 수 있다. 

9-2 @Autowired

프로퍼티, 메소드, 생성자에서 객체의 타입이 일치하는 객체를 자동으로 주입한다. 

*** 프로퍼티, 메소드에 @ autowired사용시에는 반드시 default 생성자를 명시해야 한다. 

ex) sevice 에서 dao java 코드 에서 연결.. 

wordRegisterService.java

//@Autowired

private WordDao wordDao;

@Autowired

public WordRegisterService(WordDao wordDao){

this.wordDao=wordDao;


//@Autowired

//public void setW  

<Context:annotation-config/>

<bean id="wordDao" class="com.word.dao.wordDao"/>

<bean id="registerService" class="com.word.service.wordRegisterService">

<!--<constructor-arg ref="wordDao"/>-->

</bean> 


9-3 @Resource

@Autowired : 스프링컨테이너에서 객체를 찾음. 개체가 엄청많고.. 필요한 데이터 타입을 찾아 알맞은 데이터 타입을 넣어줌 
- 생성자, 프로퍼티, 메소드, 객체의 타입(WordDao를 찾음)이 일치하는 객체를 자동으로 주입한다, 디폴트 생성자 명기

@Resouce  : 객체의 타입을 보지 않고 동일한 이름이 있는지 찾아씀.    

- 프로퍼티, 메소드 객체의 이름(wordDao1를 찾음)이 일치하는 객체를 자동으로 주입한다, 디폴트 생성자 명기

- 생성자에는 못씀. 

@Autowired

public WordRegisterService(WordDao wordDao1){

this.wordDao=wordDao;

}  


10 의존 객체 선택

10-1 의존 객체 선택

동일한 객체가 2개 이상인 경우 스프링컨테이너는 자동주입 대상 객체를 판단하지 못해서 Exception을 발생시킨다. 

@Autowired

@Qualifier("userDao")

private WordDao wordDao; 

 <bean id="wordDao" class="com.word.dao.WordDao">

<qualifier value="usedDao"/>  //퀄리 필러 : 예선통과자

</bean>

<bean id="wordDao2" class="com.word.dao.WordDao"/>

<bean id="wordDao3" class="com.word.dao.WordDao"/>


10-2 의존객체 자동주입 체크

@Autowired(required=false)

10-3 @Inject (java 기능)

@Autowired(spring 기능) 와 유사 의존객체 자동 주입 체크 못함 

@Named  : @Qualifier와 유사  , Qualifier와 달리 xml 작성 안해도 됨. 







728x90

스프링 프레임워크

DI, AOP, MVC, JDBC  : 구조 만들어 나가는 방법론들.

AOP : 관점지향 프로그래밍 : 주요부분만 작업 공통부분 뺐다 더했다. 


- 스프링프레임워크, 모바일 프레임워크(안드로이드)

내비게이션 없음 : 네비게이션 있음 = 다양한 업무 : 본연의 업무

프레임워크가 없다면 모든 기능을 다 만들어야 함.


-스프링 프레임워크 모듈: 과거에는 라이브러리를 직접 다운받았지만, XML 파일 등을 이용 의존설정 함.

스프링 프레임워크 모듈

 기능

 spring-core 

DI, IoC(Inversion of control, 제어의 역전) 기능 제공 

 spring-aop

AOP  

 spring-jdbc

데이터베이스를 적은양의 코드로 다룰 수 있는 기능 제공 

 spring-tx

트렌젝션 관련 기능제공 

 spring-webmvc 

스프링 제공 Controller, View 이용한 스프링 MVC 구현기능제공 


-스프링 컨테이너(IoC)

스프링에 객체를 생성하고 조립하는 컨테이너로 컨테이너를 통해 생성된 객체를 Bean 이라고 부른다. 

XML 문서로 객체 생성 및 속성 데이터 작성 > 스프링 컨테이너에서 객체 생성 및 조립 > 개발문서로 애플리케이션 구현

 

- 개발환경 구축: Java 설치(java.exe: JVM 구동명령, javac.exe: 컴파일러, java -version), 환경변수 설정, 이클립스 다운로드

JDK  ⊃ JRE  ⊃ API  ⊃ JVM


프로젝트 생성

-1. 프로젝트 생성 : Maven Project

Create a simple project(skip archetype selection) 선택

Use default Workspace location 선택

Group id :  내가 사용하고 있는 프로젝트를 감싸고 있는 전체 큰 프로젝트

Artifact id : 현재 해당하는 프로젝트

 >> pom.xml 파일생성  java, resouces 파일 생성 확인

-2. pom.xml 작성

디펜시즈에 spring-context 추가

플러그인에 maven-compiler-plugin 추가. 

에러 : Project configuration is not up-to-date with : 메이븐 과 java의 버전이 맞지 않음.  >> 프로젝트 우클릭 > 메이븐>업데이트 프로젝트 

프로젝트 폴더 > src > main > java, resources

-3 pom.xml 파일의 이해

pom.xml 파일은 메이븐 설정파일로 메이븐은 라이브러리를 연결해주고 빌드를 위한 플랫폼이다. 

Maven Dependencies 폴더 :: 다운된 모듈들 다운. 

resources폴더 > applicationContext.xml :  스프링 컨테이너의 객체를 만들어줌 

                   > XML 파일 생성   : applicationContext.xml

                       Beans  ::  > <bean id="tWalk" class="testPjt.TranspotationWalk"/>

 java 코드  > GenericXmlApplicationContext ctx = new GenericXmlApplicationContext("classpath:applicationContext.xml");

                 TranspotationWalk transpotationWalk = ctx.getBean("tWalk", TranspotationWalk.class)

                 transpotation.move();

ctx.close();


또 다른 프로젝트 생성 방법

<bean/>














728x90

https://www.educba.com/functional-programming-vs-oop/

함수형 프로그래밍과 OOP의 주요 차이점

1. 함수형 프로그래밍은 고정된 데이터 값에 다양한 연산을 하기위해 사용됩니다. (병렬형)

  OOP는 다양한 형태의 값에 공통적인 적은 연산을 하기 위해 사용됩니다. 


2. 함수형 프로그래밍은 형태가 보존되지 않는 프로그래밍 모델을 갖고

  OOP는 형태가 보존되는 프로그래밍 모델을 갖습니다. 


3. 함수형 프로그래밍에서는 state(상태)가 존재하지 않고

OOP는 state(상태)가 존재합니다. 


4. 함수형 프로그래밍은 함수가 기본조작단위이고

OOP는 Object가 기본조작단위입니다. 


5. 함수형 프로그래밍에서 함수는 다중프로세서에 실행되는 코드에 영향이 없습니다. 

OOP에서 method는 다른 코드에 영향을 줄수 있고, 다중 프로세서에도 영향을 미칠 수 있습니다. 


6. 함수형 프로그래밍에서 주요 초점은 "우리가 하는 일"

OOP에서 주요 초점은 "우리가 어떻게 하고 있는가"


7. 함수형 프로그래밍은 주로 데이터에 대한 추상화, 동작에 대한 추상화를 지원합니다. 

OOP에서는 주로 데이터에 대한 추상화만 지원합니다.  (동작은 정해져 있음)


8. 함수형 프로그래밍은 응용 프로그램에 대한 대용량 처리시 높은 성능을 제공합니다. 

OOP는 대용량 데이터 처리에는 좋지 않습니다. 


9. 함수형 프로그래밍은 조건문을 지원하지 않습니다. 

OOP는 if-else문과 switch문 처럼 조건문을 사용할 수 있습니다. 







728x90



자바의 미래 'JVM, JDK 이원 생태계'

https://news.naver.com/main/read.nhn?mode=LSD&mid=shm&sid1=105&oid=092&aid=0002149464



Java 유료 논쟁, Oracle JDK와 OpenJDK의 차이 정리

http://jsonobject.tistory.com/395  


  • Oracle JDK 바이너리에 적용되던 BCL 라이센스가 2018년 7월 부로 Java SE Subscription라는 이름의 년 단위 유료 구독형 라이센스로 새롭게 개편되었다.
  • 새로운 라이센스는 2018년 9월 출시 예정인 Oracle JDK 11 바이너리부터 적용된다. 또한, 오직 라이센스 구독자 만이 LTS 업데이트 지원을 받을 수 있다. (다음 LTS 지원 버전의 출시는 3년 뒤로 Oracle JDK 17이 된다.)
  • 기존 Oracle JDK 8 바이너리의 경우 2019년 1월 이후 업데이트부터 라이센스 구독을 요구한다.


728x90

amp  : 엑셀레이티드 모바일 페이지 : 오픈소스 이니셔티브(OSI) : 로딩시간 단축 

         C++  처음 속도 빠름..... Javascript 쓸수 없음... 거기에서 제공한것만 씀... 속도는 빠름. 

PWA : 프로그래시브 웹 앱스 : 앱 수준과 같은 사용자 경험을 웹 에서 제공하는 것이 목적. 

        서비스 워커로 불리는 새로운 API를 활용, 웹앱의 충요한 부분 캐싱.... 

         사용자에게 푸시 알림보내고, 네트환경 좋지 않아도  빠르게 구동

        중국 알리 익스프레스 대표 사례...

https://medium.com/@MadeDesignbyMe/%EA%B5%AC%EA%B8%80%EC%9D%98-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%A0%88%EC%8B%9C%EB%B8%8C-%EC%9B%B9-%EC%95%B1%EC%8A%A4%EB%A5%BC-%EC%95%84%EC%8B%AD%EB%8B%88%EA%B9%8C-8116f2766004

         



AMP is an open-source library that provides a straightforward way to create web pages that are compelling, smooth, and load near instantaneously for users. AMP pages are just web pages that you can link to and are controlled by you.

AMP builds on your existing skill sets and frameworks to create web pages. AMP is supported by many different platforms, and it's compatible across browsers.

AMP's ecosystem includes 25 million domains, 100+ technology providers, and leading platforms, that span the areas of publishing, advertising, e-commerce, local and small businesses, and more!

--> https://www.ampproject.org/learn/overview/

PWA

https://developers.google.com/web/progressive-web-apps/


'For Real > Java & Spring' 카테고리의 다른 글

functional programming vs OOP 번역 1  (0) 2018.12.11
open JDK vs oracle JDK  (0) 2018.11.07
nas  (0) 2018.08.06
returned status code 143: 젠킨스  (0) 2018.07.23
Failed to obtain pooled item  (0) 2018.07.19

+ Recent posts