Dev 226

[OOP] 의존관계

객체는 크게 두 가지로 구성된다. 1. 필드변수 2. 메소드 필드변수는 Heap Memory에 저장되므로, 객체가 가비지 컬렉터에 의해 제거 될 때까지 살아있다. 고로, 항시적 데이터는 필드변수에 저장한다. 이전 포스팅에서 다룬 연관관계, 집합관계, 합성관계는 다른 객체의 주소를 필드변수에 저장하는 관계로 언제든 참조 가능한 관계이다. 반면, 메소드에서 생성된 변수는 Stack Memory에 저장되므로, 메소드 호출기간 동안만 살아있다. 메소드 같이, 특정 기능을 수행할 때만 필요한 객체는 임시로 메소드 내 변수에 저장하는데, 이를 의존관계라 부른다. 의존관계는 두 가지 유형이 있다. 1. 객체를 메소드 인수로 받는 경우 public class Car{ public void fillGas(GasPump ..

Dev/OOP 2022.10.12

[OOP] 합성관계와 집합관계

합성관계(Compostion)와 집합관계(Aggregation)는 전체와 부분을 나타내는 관계로 부분객체의 생성권한이 어디있느냐로 구분된다. 합성관계(Composition) 전체객체가 부분객체의 제어권을 갖는다. 예를 들면, 일체형 컴퓨터 같은거다. public class Computer{ private MainBoard mb; private CPU cpu; private Memory memory; public Computer(){ this.mb = new MainBoard(); //객체생성 this.cpu = new CPU(); // 객체생성 this.memory = new Memory(); //객체생성 } } Computer 객체가 생성될 때, MainBoard,CPU,Memory 객체도 생성된다. ..

Dev/OOP 2022.10.12

[JS] ES6 달라진 문법 ( let, const ) + 호이스팅(Hoisting)

'var' 를 사용하지 말자! ES6부터 let과 const가 등장한 이유는 무엇일까? ▶ 실행 원리 JavaScript 엔진은 Stack 메모리와 Heap 메모리를 사용한다. 1. 호출 스택 ( Call Stack ) 스택은 LIFO이다. 마지막에 PUSH된게 먼저 POP된다. 이런 구조는 함수 호출 구조와 같다. Js파일이 호출되면 foo()가 호출되고 그다음 foo1() 함수가 호출된다. 그리고 foo1() 함수가 종료되고 foo()가 종료된 뒤 js파일이 종료된다. 그러므로 Stack 메모리에 PUSH와 POP이 되는 객체는 함수의 정보를 담은 객체로 이를, 실행컨텍스트(Execution Context; EC)라 부른다. 실행컨텍스트는 스택에 쌓이는 프레임으로 함수단위로 생성된다. 2. 호이스팅(..

Dev 2022.04.22

[스프링] 제어의 역전(IOC)이란?

스프링의 핵심 개념인 제어의 역전(IOC)에 대해서 알아보겠다. 제어의 역전(Inversion of Control) 제어(Control)란 무엇일까? 아래 코드를 살펴보자. public class A { B b = new B(); // B 객체 생성 } 1. 생성할 권리 new 연산자로 객체 B를 생성했다. 이는 생성할 권리이다. 2. 접근할 권리 A클래스는 B객체가 저장된 Heap 메모리 주소를 b 참조변수(멤버변수)로 갖는다. 고로, A 클래스의 객체는 B객체에 접근할 권리를 갖는다. 이렇듯, 생성할 권리와 접근할 권리를 통틀어 '제어(Control)'이라 부른다. A는 B를 생성하고 접근할 권리를 갖는다. 그러나 여기서 한 가지 문제점이 발생한다. B는 오로지 A가 있어야 존재하고 A만 접근 가능하..

Dev/SPRING 2022.02.15

[JSP] JSP 코드블록

[JSP] JSP의 역할 HTML 문서를 Dynamic하게 만드는 언어 중 하나가 JSP이다. 이번 포스팅에서는 HTML 문서를 Dynamic하게 만드는 과정에서 JSP의 역할을 알아보겠다. HTML 문서를 서블릿(Servlet)으로 만들기 HTML문서는 태그 lordofkangs.tistory.com 지난 포스팅에서 JSP의 역할을 알아보았다. JSP는 jasper가 Dynamic하게 처리할 부분을 표시한 문서이다. 개발자는 HTML 코드 중 Dynamic한 부분을 코드블록을 사용하여 표현해야한다. jasper는 JSP 문서를 서블릿 클래스로 변환한다. // 서블릿클래스 public final class index_jsp extends org.apache.jasper.runtime.HttpJspBase..

Dev 2022.01.31

[OOP] 연관관계(2) - Vector의 사용

[OOP] 연관관계 (1) 객체지향설계의 기본은 객체 간 '참조'이다. 객체지향 프로그램은 객체 간 상호작용으로 특정 '기능'을 구현한다. 상호작용을 하려면 서로의 위치를 알아야한다. 즉 '주소'를 알아야한다. 그래 lordofkangs.tistory.com 지난 포스팅에서 연관관계란 무엇인지 알아보았다. 이번 포스팅에서는 단방향 연관관계에 대해서 알아보겠다. 단방향 연관관계 객체는 다른 접근의 데이터(필드)나 기능(메소드)이 필요하여 접근한다. 객체A는 객체B의 주소를 알고 객체B는 객체A의 주소를 모르는 관계, 이를 '단방향 연관관계'라 부른다. 위 그림의 객체A와 객체B 처럼 서로 주소를 알고 있는 관계를 양방향 관계라 부른다. 두 객체가 서로 참조한다면 두 객체를 엮는 공통의 목적이 존재한다. 예..

Dev/OOP 2022.01.30

[JSP] JSP의 역할

HTML 문서를 Dynamic하게 만드는 언어 중 하나가 JSP이다. 이번 포스팅에서는 HTML 문서를 Dynamic하게 만드는 과정에서 JSP의 역할을 알아보겠다. HTML 문서를 서블릿(Servlet)으로 만들기 HTML문서는 태그로만 이루어져서 정적(Static)이다. 변수나 메소드를 갖지 못하고 연산도 하지 못한다. 그래서 클라이언트가 경로를 통해 HTML 문서에 접근하면 웹서버는 HTML 문서를 웹브라우저에게 보내고 웹브라우저는 HTML 코드를 파싱하여 브라우저에 표현한다. 이 과정에서 Dynamic한 요소란 없다. 그럼 JSP를 보자. 클라이언트가 JSP 문서에 접근하면 WAS는 jasper라는 프로그램을 돌려 JSP문서를 서블릿 파일로 변환한다. 서블릿이란 JAVA언어로 작성된 클래스 파일로..

Dev 2022.01.30

[JSP] 동적(Dynamic) 페이지란?

HTML은 정적 페이지이다. 3+4 위 HTML 파일을 웹브라우저에 출력하면 3+4가 그대로 출력된다. +,- 같은 연산을 수행하고 사용자의 입력에 반응하는 페이지를 동적(Dynamic) 페이지라 부른다. 태그로만 이루어진 HTML은 동적인 표현을 못한다. 변수와 함수를 가진 언어를 사용하면 Dynamic한 성질을 불어 넣을 수 있다. 브라우저 vs 서버 언어를 사용하려면 언어를 해석하는 해석기가 필요하다. 브라우저 쪽 해석기를 사용하는 대표적인 언어가 JavaScript이고 JSP, PHP는 서버쪽 해석기를 사용한다. 다음 포스팅 부터 JSP를 이용하여 HTML 페이지에 Dynamic한 성질을 불어 넣는 법을 하나씩 알아볼 것이다.

Dev 2022.01.29

[OOP] 연관관계 (1)

객체지향설계의 기본은 객체 간 '참조'이다. 객체지향 프로그램은 객체 간 상호작용으로 특정 '기능'을 구현한다. 상호작용을 하려면 서로의 위치를 알아야한다. 즉 '주소'를 알아야한다. 그래야 원하는 객체에 접근이 가능하다. 연관관계 와 의존관계 주소가 저장되려면 '공간'이 필요하다. 우리는 이를 '참조변수'라 부른다. 참조변수는 메모리에 생성되는데, Stack 메모리에 생성되는 참조변수 Heap 메모리에 생성되는 참조변수 두 가지가 있다. 객체는 크게 두 부분으로 나뉜다. 1. 필드 2. 메소드 필드는 객체 생성시, Heap 메모리에 저장된다. 메소드는 메소드 호출시, Stack 메모리에 저장된다. 필드의 참조변수는 가비지 컬렉터가 객체를 제거하지 않는 이상, 영속적으로 존재한다. 반면 메소드 내의 참조..

Dev/OOP 2022.01.29

[ JSP ] 상태 유지 ( Session, Cookie )

웹브라우저(Client)와 웹서버(Server)는 HTTP로 통신한다. HTTP는 상태 비저장(Stateless) 프로토콜이다. HTTP 프로토콜로 이루어지는 통신은 모두 독립적으로 이루어진다. 고로, 첫 번째 통신은 두 번째 통신에게 영향을 줄 수 없다. 초창기 웹환경처럼 단순히 문서만 열람하는 경우라면 문제없다. 그러나 이제는 로그인처럼 특정 '상태(State)'를 유지해야 한다. 상태를 유지하는 역할은 '쿠키'와 '세션'이 맡는다. 상태유지란, 데이터를 유지함을 의미한다. 그럼 데이터를 저장할 공간이 필요한다. 서버 쪽에 위치한 데이터 저장공간을, 세션(session)이라 부르고 클라이언트 쪽에 위치한 데이터 저장공간을, 쿠키(Cookie)라고 부른다. 세션(Session) 세션은 서버(WAS)쪽에..

Dev 2022.01.25