자바 5부터 함수형 언어를 포함

빅데이터가 뜨면서 함수형 언어가 필요해짐(현재 scala를 많이 씀)

python, js 모두 함수형 언어를 포함하고 있음

 

람다식이란,

함수(메서드)를 간단한 '식(expression)'으로 표현하는 방법

 

기존 코드

int max(int a, int b){
	return a > b ? a : b;
}

 

람다식 코드

(a, b) -> a > b ? a : b

 

반환 타입과 이름이 없기 때문에,

람다식 == 익명함수(이름이 없는 함수, anonymous function)

하지만 자바에서는 함수(메서드)만 따로 존재할 수 없기 때문에 익명 객체!

 

함수와 메서드의 차이

- 근본적으로 동일. 함수는 일반적 용어, 메서드는 객체지향개념 용어

- 함수는 클래스에 독립적, 메서드는 클래스에 종속적

- 자바에서는 클래스 밖에 있을 수 없기 때문에 전부 메서드

 

 

 

 

람다식 작성 규칙

int max(int a, int b){
	return a > b ? a : b;
}

 

1. 메서드의 이름과 반환타입을 제거하고 화살표->를 블록{} 앞에 추가한다.

(int a, int b) -> {
	return a > b ? a : b;
}

 

2. 반환값이 있는 경우, 식이나 값만 적고 return문 생략 가능(끝에 세미콜론; 안붙임)

(int a, int b) -> a > b ? a : b

 

3. 매개변수의 타입이 추론 가능하면 생략 가능(대부분의 경우 생략 가능)

(a, b) -> a > b ? a : b

 

 

 

 

람다식 작성 주의사항

1. 매개변수가 하나인 경우, 괄호() 생략 가능(타입이 없을 때만)

(a) -> a * a		// a -> a * a (가능)
(int a) -> a * a	// int a -> a * a (불가능)

 

2. 블록 안의 문장이 하나뿐일때, 괄호{} 생략 가능(끝에 세미콜론; 안 붙임)

(int i) -> { System.out.println(i); }	// (int i) -> System.out.println(i)

*** 만약 하나뿐인 문장이 return 문이라면 괄호{} 생략이 불가능하지만, return을 대부분 생략하기 때문에 알아만 두기

 

 

 

728x90

'이론 > 개인공부' 카테고리의 다른 글

함수 직접 호출과 함수 참조 전달 차이  (0) 2024.06.19
함수형 인터페이스  (0) 2023.01.31
자바 스트림(Stream)  (0) 2022.12.30
OSI 7계층(OSI 7 Layers)  (1) 2022.08.29
정보처리기사 필기  (0) 2022.04.25

https://wakestand.tistory.com/419

 

자바 스트림(Stream) 예제부터 사용법까지 정리

자바에서 스트림이라고 하면 대부분 엄청나게 어려운 기술인 줄 알고 시작도 전에 포기하는 경우가 많은데 스트림은 엄청 간단하고 유용한 기술이다 다만 설명하는 사람들이 쉬운 걸 너무 어렵

wakestand.tistory.com

 

728x90

'이론 > 개인공부' 카테고리의 다른 글

함수형 인터페이스  (0) 2023.01.31
람다식  (0) 2023.01.31
OSI 7계층(OSI 7 Layers)  (1) 2022.08.29
정보처리기사 필기  (0) 2022.04.25
220419 STACK & QUEUE  (0) 2022.04.20
< 달거북씨의 it 관련 뉴스 스크랩 공간 >


http://www.itdaily.kr/news/articleView.html?idxno=202353
 

[구축사례] SSG닷컴, 데이터 관리도 ‘쓱(SSG)’ - 아이티데일리

[아이티데일리]데이터는 이미 전 세계 모든 조직들의 핵심 자원으로 자리잡았다. 전 산업 분야에서 폭발적으로 생산되는 데이터를 효과적으로 활용하지 못하는 조직은 앞으로의 비즈니스 환경

www.itdaily.kr

 


 

데이터 관리와 활용에 일가견이 있는 대표적 기업으로 꼽히는 SSG닷컴에서 말하는 DBA(Data Base Administration)의 역할

 

옛날부터 정보는 힘이라고 했고, 산업이 유기적인 관계를 맺기 시작하면서 데이터의 양은 방대해졌고 서로에게 긴밀한 영향을 주기 시작했다. 오늘 날 기업의 마케팅부터 소비자의 구매까지 모두 데이터를 바탕으로 이루어진다. 데이터베이스의 중요도는 앞으로도 계속 상승하겠징'ㅅ'

 

 

728x90

생각의 흐름대로 정리

프레임워크란, 개발을 편하게 할 수 있도록 미리 뼈대를 이루는 클래스와 인터페이스를 제작하여 모아둔 것

 

프레임워크의 특징

- 개발자들이 따라야 할 가이드라인을 가진다

- 따라서 개발할 수 있는 범위가 정해져 있다

- 개발자들을 위한 다양한 도구들이 지원된다.

 

프레임워크의 장단점

- 장점 : 개발 시간을 줄일 수 있고 품질이 향상되며 유지보수가 편리하다

- 단점 : 습득하고 이해하는 데 오랜 시간이 걸리며 자유롭고 유연하게 개발하는 데 한계가 있다.

 

라이브러리와 프레임워크의 차이점

라이브러리는 특정 기능에 대한 도구 또는 함수들의 집합이고, 프레임워크는 프로그래밍을 진행할 때 필수적인 코드와 알고리즘 같은 뼈대나 구조를 지원해주는 것이다.

 

스프링 프레임워크는 자바를 기반으로 다양한 애플리케이션을 개발하기 위한 경량급 프레임워크입니다.

몇 가지 특징으로 프로그래머가 편리하게 개발을 할 수 있도록 하고, DI, AOP 등의 기본적인 디자인 패턴을 강제적으로 사용하게 함으로서 코드 구조 퀄리티의 최소한을 보장하는 장점이 있다.

 

스프링 부트는 스프링 프레임워크가 기능이 많아 환경설정이 복잡한 단점을 보완하기 위해 개발되었다.

Embedded Tomcat을 사용하기 때문에 Tomcat을 설치하거나 매번 버전 관리해 주어야 하는 수고로움이 덜었다.

starter를 통한 dependency의 자동화가 가능하다. 스프링에서는 각각의 dependency들의 호환되는 버전을 일일이 맞춰주어야 하는 어려움이 있었지만 스프링부트에서는 starter가 대부분의 dependency를 관리해 주기 때문에 이러한 걱정을 덜게 되었다.

XML 설정을 하지 않아도 된다.

jar 파일을 이용해 자바 옵션만으로 손쉽게 배포가 가능하다. 스프링의 경우 war 파일을 web application server에 담아 배포

 

스프링의 특징

  • 경량 컨테이너로서 자바 객체를 직접 관리
    - 각각의 객체 생성, 소멸과 같은 라이프 사이클을 관리하며, 스프링으로부터 필요한 객체를 얻어올 수 있다.
  • POJO(Plain Old Java Object) 방식의 프레임워크
    - 객체 지향적인 원리에 충실하면서 환경과 기술에 종속되지 않고 필요에 따라 재활용 될 수 있는 방식으로 설계된 오브젝트를 말한다.
    - POJO에 애플리케이션의 핵심 로직과 기능을 담아 설계하고 개발하는 방법을 POJO 프로그래밍이라고 한다.
  • 의존성 주입(DI) 지원
    - 객체 간의 의존성이 존재할 경우 개발자가 직접 객체를 생성하거나 제어하는 것이 아니라, IOC에 의하여 특정 객체에 필요한 다른 객체를 프레임워크가 자동으로 연결시켜주는 것을 말한다. 개발자는 선언만 할 뿐 할당은 프레임워크에 의해서 자동으로 이루어진다.
    - DI에는 세 가지 방법이 있는데(Field Injection, Setter Injection, Constructor Injection), 생성자 주입이 주로 권장된다.
    - IOC(제어의 역행)란 컨트롤의 제어권이 사용자가 아닌 프레임워크에 있어, 객체나 메서드의 호출 작업이 개발자가 아닌 외부에서 결정됨을 의미한다.
  • 관점 지향 프로그래밍(AOP) 지원
    - 여러 모듈에서 공통적으로 사용하는 기능의 경우 해당 기능을 분리하여 관리 할 수 있다.
    - OOP에서 공통적인 기능을 Class로 분리했음에도 여전히 중복코드가 발생하는 단점을 해결하고자 나온 방식이며, 어떤 로직을 핵심적인 관점과 부가적인 관점으로 나눠보고 각각 모듈화한다.
    - 핵심적인 관점은 개발자가 적용하고자 하는 핵심 비즈니스 로직이고, 부가적인 관점은 핵심 로직을 수행하기 위해 필요한 DB연결, 로깅, 파일 입출력 등이 있다.
  • 영속성과 관련된 다양한 서비스를 지원
    - iBatis나 Hibernate 등 이미 완성도가 높은 데이터베이스 처리 라이브러리와 연결 할 수 있는 인터페이스를 제공
  • 확장성이 높다
    - 다른 프레임워크들과의 통합을 지원하기 때문에 이미 수많은 라이브러리가 스프링에서 지원되고 있고 라이브러리를 별도로 분리하기에도 용이하다.

 

스프링 컨테이너는 자바 객체의 생명주기를 관리하며, 생성된 자바 객체들에게 추가적인 기능을 제공하는 역할을 한다. 여기서 말하는 자바 객체를 스프링에서는 빈(Bean)이라고 부른다.

객체의 생성과 소멸 등, 제어의 흐름을 관리하고, 객체들 간의 의존 관계를 런타임 과정에서 알아서 만들어준다.

 

@Autowired

필요한 의존 객체의 타입에 해당하는 빈을 찾아서 주입

의존성 주입 대상을 찾지 못하면 애플리케이션 구동에 실패한다.

 

스프링의 실행 순서

  1. web.xml에 등록된 DispatcherSevlet을 통해 요청에 대해 진입
  2. DispatcherServlet은 클라이언트로부터 들어온 URL을 HandlerMapping이라는 곳으로 전송 후, URL을 분석하여 알맞은 Controller 이름을 다시 DispatcherServlet으로 보냄
  3. 전달받은 Controller를 실행
  4. 실행된 Controller는 스프링에서 제공하는 ModelAndView 객체에 View Page에 전달할 객체와 View Page의 이름을 담고 DispatcherServlet으로 보냄
  5. ViewResolver를 통해 보여질 View Page를 탐색한 후, View Page를 보여줌 

 

 


 

 

한 줄 정리

프레임워크란, 개발을 편리하게 할 수 있도록 미리 뼈대를 이루는 클래스와 인터페이스를 제작하여 모아둔 것 입니다.

 

가이드라인이 있고 개발자를 위한 다양한 도구가 지원되어 개발 시간을 줄일 수 있고 품질이 향상되며 유지보수가 편리하다는 장점이 있지만, 습득하고 이해하는 데 오랜 시간이 걸리며 자유롭고 유연하게 개발하는 데 한계가 있습니다.

 

라이브러리와 프레임워크의 차이점은, 라이브러리는 특정 기능에 대한 도구 또는 함수들의 집합이고, 프레임워크는 프로그래밍을 진행할 때 필수적인 코드, 알고리즘 등과 같은 뼈대나 구조를 지원해준다는 점입니다.

 

스프링 프레임워크는 자바 언어 기반의 오픈소스 애플리케이션 프레임워크입니다.
경량 컨테이너로서 자바 객체를 직접 관리하고, POJO 방식의 프레임워크이며, DI, IOC, AOP 지원, 영속성 관련 서비스 지원, 높은 확장성 등의 특징이 있어 개발자가 편리하게 개발을 할 수 있고 최소한의 코드 구조 퀄리티를 제공하여 많이 사용됩니다.

 

스프링 컨테이너는 객체의 생성 및 소멸과 같은 라이프 사이클을 직접 관리하고, 객체들 간의 의존관계를 런타임 과정에서 알아서 만들어 줍니다.

 

POJO(Plain Old Java Object)는 Getter와 Setter로 구성된 가장 순수한 형태의 기본 클래스를 뜻합니다.
불필요한 상속과 같이 기술에 맞는 환경에 의존하는 것을 피하고 필요에 따라 재활용 될 수 있는 방향으로 설계된 오브젝트 입니다.

 

DI(Dependency Injection)는 개발자가 직접 객체를 생성하는 것이 아니라 컨테이너에서 객체를 생성하고 데이터 간의 의존성을 주입해 의존성을 줄이는 방식입니다.

 

IOC(Inversion Of Controll)는 컨트롤의 제어권이 개발자가 아닌 프레임워크에 있어, 객체나 메서드의 호출이 외부에서 이루어짐으로써 결합도를 줄이고 유연한 코드를 작성할 수 있게 합니다.

 

AOP(Aspect Oriented Programming)는 관점 지향 프로그래밍으로, 기존 객체 지향 프로그래밍이 공통적인 기능으로 Class를 분리했음에도 여전히 중복코드가 발생하는 단점을 해결하고자 나왔습니다. 어떤 로직을 핵심적인 관점과 부가적인 관점으로 나눠 각각 모듈화 하며, 핵심적인 관점은 개발자가 적용하고자 하는 핵심 비즈니스 로직이고, 부가적인 관점은 핵심 로직을 수행하기 위한 DB연결, 파일 입출력 등이 있습니다.

 

IBatis나 Hibernate 등 이미 완성도가 높은 데이터베이스 처리 라이브러리와 연결할 수 있는 인터페이스를 제공합니다.

 

다른 프레임워크와의 통합을 지원하기 때문에 많은 라이브러리가 스프링에 지원되고 있고, 또 라이브러리를 별도로 분리하기에도 용이하여 확장성이 높습니다.

 

스프링부트는 스프링 프레임워크의 복잡한 환경설정을 보완하고자 개발되었습니다.
- Embedded Tomcat 사용
- Starter를 통한 dependency의 자동화로 버전을 맞춰야 하는 불편을 해소
- XML 설정 x
- jar 파일로 간단하게 배포(기존 스프링 프레임워크는 war 파일을 web application server에 담아 배포)

 

Spring 실행 순서
1. web.xml에 등록된 DispatcherServlet은 클라이언트로부터 들어온 URL을 HandlerMapping에 전송 합니다.
2. HandlerMapping은 URL을 분석하여 알맞은 Controller의 이름을 다시 DispatcherServlet으로 보냅니다.
3. DispatcherServlet이 Contrller를 실행하고, Controller는 ModelAndView 객체에 View Page에 전달할 객체와 View Page 이름을 담아 DispatcherServlet으로 보냅니다.
4. ViewResolver를 통해 보여질 View Page를 탐색한 후 해당 View Page를 보여줍니다.

 

728x90

'이론 > CS공부' 카테고리의 다른 글

디자인 패턴  (0) 2022.11.02
컬렉션 프레임워크  (0) 2022.11.02
추상화  (0) 2022.11.02
MVC패턴  (0) 2022.11.02
Cookie vs Session  (0) 2022.10.31

생각의 흐름대로 정리

디자인 패턴이란, 기존 환경 내에서 반복적으로 일어나는 문제들을 어떻게 풀어나갈 것인가에 대한 일종의 솔루션이다.

디자인 패턴은 설계자들이 올바른 설계를 빨리 만들 수 있도록 도와준다.

싱글톤 패턴, 팩토리 패턴, 옵저버 패턴이 있다.

 

싱글톤 패턴(SingleTone Pattern) : 여러 곳에서 반복적으로 사용되어야 하는 객체에 대해 전역적인 범위를 갖도록 객체를 생성하고, 이 객체를 여러 곳에서 공유하기 위한 클래스 작성 패턴. 이러한 패턴으로 만들어진 객체를 싱글톤 객체

즉, 한 개의 인스턴스만을 메모리에 선언하고 이를 여러 곳에서 가져다 사용하는 형태

클래스는 객체를 만들어내기 위한 일종의 설계도/ 객체는 소프트웨어 세계에 구현해야 할 대상/ 인스턴스는 설계도를 바탕으로 객체를 소프트웨어 세계에 구현한 것(메모리가 할당된다) 

 

팩토리 패턴(Factory Pattern) : 객체 간 의존성을 줄이기 위해 객체의 생성과 데이터 주입만 담당하는 Factory Class를 정의하고 개발 코드 부분에서는 생성된 객체를 가져다 사용함으로서 의존성을 줄이는 방식

 

옵저버 패턴(Observer Pattern) : 기후 정보처럼 RSS 수신 시 하나의 객체가 변하면 다른 객체에 객체가 변했다는 사항을 알려주어야 할 경우 주로 사용

 

RSS는 웹사이트나 블로그에서 제공하는 RSS 주소를 수신 시 자동으로 자료가 업데이트 되어 쉽게 새로운 컨텐츠를 확인할 수 있는 인터넷 기술

 

 


 

 

한 줄 정리

디자인 패턴(Design Pattern)이란, 기존 환경에서 반복적으로 일어나는 문제들을 어떻게 해결할 지 일종의 솔루션을 제공하는 것으로, 싱글톤 패턴, 팩토리 패턴, 옵저버 패턴 등이 있습니다.

 

싱글톤 패턴(SingleTone Pattern)은 여러 곳에 사용되는 기능이 필요할 때 하나의 객체만을 선언하고 전역 접근을 허용하여 필요한 곳에서 갸져다 쓸 수 있게 하는 것으로, 이렇게 생성된 객체를 싱글톤 객체라고 합니다.

 

팩토리 패턴(Factory Pattern)은 객체의 생성과 데이터 주입만 담당하는 Factory Class를 정의하고 개발 코드 부분에서는 생성된 객체를 가져다 사용함으로서 의존성을 줄이는 방식입니다.

 

옵저버 패턴(Observer Pattern)은 하나의 객체가 변하면 다른 객체에도 객체가 변했다는 사항을 알려주어야 할 경우에 사용합니다.
728x90

'이론 > CS공부' 카테고리의 다른 글

스프링 프레임워크  (0) 2022.11.02
컬렉션 프레임워크  (0) 2022.11.02
추상화  (0) 2022.11.02
MVC패턴  (0) 2022.11.02
Cookie vs Session  (0) 2022.10.31

+ Recent posts