전체 글 682

[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

[클린코드] 명령과 조회를 분리하라

함수는 두 가지 중 하나이다. 1. 명령 2. 조회 '명령'은 특정 행위(do)를 한다. '조회'는 특정 상태(state)를 조회한다. 그러므로 함수는 명령과 조회가 같이 있으면 안된다. 예를 들어, public boolean set(String userName, String password); 언뜻 보면 set 함수는 userName과 passWord를 받아 회원정보를 설정(do)하는 함수 인 것 같다. ( 명령함수) 그러나 Return 값을 보면 boolean이다. False나 True는 조회가 되었는지 여부를 리턴할때 쓰는 자료형이다. 즉, 명령과 조회가 혼합된 함수이다. 이런 함수는 혼란을 일으킨다. 고로 함수를 분리해주어야 가독성이 올라간다. if(attributeExists("userName"..

후기/도서후기 2022.10.11

[알고리즘] 재귀호출(recursive call)이란?

'재귀호출(recursive call)'은 완전탐색을 구현할때 용이하다. 완전 탐색은 선형적 방식과 재귀적 방식(계층적) 으로 접근할 수 있다. 선형적 방식은 반복문을 돌려 하나씩 탐색하는 방식이다. 재귀적 방식(계층적)은 Top에서 Bottom으로 Down하며 모든 경우의 수를 탐색하는 방식이다. 그렇다면 어떤 경우에 어떤 방식을 사용해야 할까? 반복문을 사용하는 경우 완전탐색은 반복문을 사용하여 구현할 수 있다. 1 ~ 10개의 원소가 있다. 이중 특정 조건에 부합하는 4가지 원소를 찾으려 한다. 그럼 1부터 10까지 탐색을 해야하는데 '반복문'을 사용한다고 가정해보자. 4가지 원소로 구성된 한 조합을 찾아야 하므로 for문의 변수는 네 개가 필요하다. 반복문을 사용하는 경우 10개의 원소 중 조건에..

[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