알고리즘이란?


'문제나 과제를 해결하기 위한 처리 절차를 

구체적인 순서에 따라 표현한 아이디어나 생각'을 말한다.


위에서 말했던 알고리즘은 아이디어나 생각이라고 말했었는데

아이디어나 생각은 전달할 수 없기에 눈에 보이도록 표현해야 한다.


알고리즘을 어렵게 생각할 필요가 없다.

단어만 어색할 뿐이지 우린 알고리즘을 어디서든 적용하고 있었다.

일상생활에 쓰는 음식레시피, 가구 조립설명서 등도 알고리즘의 예(시각화)로 볼 수 있기 때문이다.


음식 레시피를 검색해보면 블로그 등에서 사진을 조리법 순서대로 나열한 걸 볼 수 있다.

즉, 요리를 완성하기 위한 절차알고리즘이라 하고

음식 레시피는 그 절차를 순서에 따라 표현한 시각적으로 표현한 것이다.


INPUT(음식 재료) -> 알고리즘(조리법) -> OUTPUT(완성된 음식)

으로 생각하면 된다.


위 음식 조리 알고리즘을 음식 레시피로 만든 것처럼

알고리즘을 프로그래밍언어(C, JAVA등)로 만들면 프로그램이 된다.


프로그램을 작성할 땐 기획, 설계 순으로 진행되는데


고객의 요구에 의해 기획하고 설계할 때 필요한 것이 알고리즘이다.

우리가 만들 프로그램의 설계서를 만든다고 생각하면 된다.


설계하게 될 때 좋은 알고리즘은 4가지를 충족해야 한다.

1. 알기쉽다.

-여러 명이 작업할 때 이해하기 어렵다면 실수가 생기기 마련이다.

또한 혼자서 한다 해도 수정, 추가에 어려움이 있을 수 있다.


2. 속도가 빠르다.

-INPUT, OUTPUT이 같다 해도 처리하는 시간은 현저히 다를 수 있다.


3. 효율적이다.

-같은 작업을 10명이 하는 것과 1명 이서하는 것이 같다면

1명 이하는 로직을 선택하면 9명은 다른 일을 할 수 있다.


4. 재이용하기 쉽다.

-프로그래밍은 한번 만들고 사용하지 않는 것이 아니기 때문에

다른 곳에서 쉽게 재이용 할 수 있도록 만드는 게 좋다.

자바 초보들이 알아야 할 기본 개념!


클래스란?
유사한 특징을 지닌 객체들의 속성을 묶어 놓은 집합체라 할 수 있다.
Object란?
클래스를 사용할 수 있게 실체화한 것이다.
Method란?
클래스 안에 특정 기능을 구현한 것이다.

이제 3가지에 대해 알아보도록 하자.

예를 들어 두 명의 사람이 있는데
이름과 나이가 철수 28살, 미자 20살이라고 한다.
사람이라는 명칭이 클래스이고 
사람들의 정보가 객체라고 생각하면 된다.

클래스에서 생성 가능한 것은 변수와 기능이 있다.

클래스 생성 방법은?


위에 코드를 보면 Person이라는 클래스가 선언되어 있는 걸 볼 수 있는데
Person 클래스 안에는 name, age란 정보(변수)와 자기소개하는 기능(Methods) speak가 있는 걸 볼 수 있다.

이제 위에 클래스를 사용하여 객체(Ojbect)를 선언하는 법을 알아보자.
object 란? 클래스를 실체화하는 것으로 new로 생성한다.



위 코드를 분석해보면,
위 코드에서 객체(Object) 선언하는 부분은 아래 두 코드이다.



Person 이란 Class를 person이라는 객체로 생성한 것인데 생성할 땐 = new 클래스명 형식으로 선언한다.



이 부분은 person이라는 객체에 이름과 나이를 저장해주는 부분이다.
즉 맨 위쪽에서 클래스와 객체를 설명한 대로 Person(사람)이라는 클래스가 있고
그 클래스를 사용하여 객체를 생성하여 이름과 나이를 넣어주면 28살 철수가 만들어진 것이다.



이 부분은 Person Class 안에  speak 메소드를 불러내 사용하는 것이다.
사용하게 되면 콘솔에 "이름과 나이는 : 철수, 28"가 찍히는 것을 확인할 수 있다.


배열이란?


일정한 형태의 모음을 만드는 것이다.

ex)int[] numbers = new int[12];


배 12개 들어가는 박스를 포장한다면?

배[박스] 배박스 = new 배[12]

배가 12개 들어갈 수 있는 박스를 만드는 것으로 생각하면 된다.

[12]

위 형태로 생각하면된다.


다중배열 2차

ex)int[][] numbers = new int[3][12];

배[줄][박스] 배박스 = new 배[3][12]

배 12개 들어있는박스만들고 그 박스를 3줄로 쌓는것이다.

[12]

[12]

[12]

위 형태로 생각하면된다.


다중배열 3차

ex)int[][][] numbers = new int[4][3][12];

배[라인][줄][박스] 배박스 = new 배[4][3][12]

배 12개 들어있는박스만들고 그 박스를 3줄로 쌓아 4라인을 만든다.

| [12] | [12] | [12] | [12] |

| [12] | [12] | [12] | [12] |

| [12] | [12] | [12] | [12] |

위 형태로 생각하면된다.


다중반복문 사용방법은 아래 코드에 표현되어 있다.




배열이란?


배열은 같은 형태의 모음 이라고 생각할 수있다.


ex)int[] numbers = new int[3]; 


즉, 위에 numbers는 int가 3개 들어갈수 있는 것이다.

배열의 시작 숫자 0부터 시작한다.

위처럼 배열 선언한다면 주소값은 0,1,2 세개가 생기게된다.

int[] numbers = new int{1,2,3}; 

형식으로 선언할 수도 있다.


쉽게 말하면 일정한 형태의 모음을 만드는 것으로 보면된다.

ex)

배 12개 들어가는 박스를 포장한다면?

배[박스] 배박스 = new 배[12]

배가 12개 들어갈 수 있는 박스를 만드는 것이다.


반복문인 for문으로 배열의 내용을 확인할 수 있다.


배열 선언 예



자바 초보들이 알아야 할 기본 개념!

반복문(while)
반복문이란? 어떠한 일을 반복해서 해주는 것이다.


while 문은
while(조건) {
실행할 로직
}
형식으로 생각하면 된다.


dowhile 문은
do {
실행할 로직
}while(조건)
형식으로 생각하면 된다.

while, doWhile 문의 차이는?
조건을 먼저 보고 할지 or 먼저 하고 조건을 볼지 차이가 있다.

while 문은 선평가 후 실행이고
dowhile 문은 선실행 후 평가이다.

아래의 코드를 보면 
while 문은 조건부터 확인하기에 아예 작동을 하지 않는다.
dowhile 문은 실행 후 조건을 확인하기에 숫자가 1이 증가함을 알 수 있다.



자바 초보들이 알아야 할 기본 개념!

반복문(for)
반복문이란? 어떠한 일을 반복해서 해주는 것이다.

미지수를 정한 후 정해진 수가 어디부터 어디까지 될 때까지란 조건으로 사용한다.
ex) 시작할 수를 0으로 정한 후 1씩 증가시키고 10일 때 종료한다.
for 문은 
for(조건) {
실행할 로직
}
의 형식으로 작성하면 된다.

조건에 들어가는 형식은
int x =  0; x < 10; x++ 형식으로 작성할 수 있다.
int x =  0;은 시작할 수를 설정하는 것이고 또
 x < 10;는 종료되는 조건을 설정하는 것고 또
x++은 x를 1씩 증가시킨다는 조건을 말한다.

반복문 for 문의 사용방법은 아래 코드로 표현하였다.
1. 변수를 증가시키며 반복하기.
2. 변수를 감소시키며 반복하기.
3. 반복문 작동 중 특정 숫자에 종료하기.



프레임워크 개념


1.sw 재사용성

2.디자인패턴 프레임워크란? 둘의 관련성

3.프레임워크 구성요소 종류


재사용 방법

copy & paste

가장 기본적인 방법이다.

ex)날짜 형태 지정 java

a클래스에 있는 코드를  b클래스에서 사용하기위해 복사 붙여넣기한다.

문제점- jdk가 바뀐다면? 코드가 있는 모든 클래스에 영향이가게된다.


method function(메소드호출)

a클래스에있던 코드를 메소드를 생성하여 집어넣는다.

클래스이름.메소드로 사용가능하다.

(호출하는쪽에는 영향이안감)


문제점 - MethodSignature(메소드명, 리턴타입, 아큐먼트 갯수,타입등)

복사 붙여넣기보단 진보된 방식이지만 작업영역간 결합도 문제 존재한다.


Class

메소드를 클래스 내부에 구현해서 만들어놓은것이다.

메소드를 구성해놓은 클래스를 상속한다.

자식 클래스에서 사용한다.

메서드방식보단 개선된 방식이다.


문제점 - signature 문제는 그대로있다.


AoP(관심의 분리)

- OOP를 supprt해주는 개념

- C에서도 사용가능

*관심사 분리

주제:은행

횡단관심모듈(기능적 로직)

ex)보안,로깅

핵심관심모듈(비지니스로직)

ex)계좌이체,입출금,이자계산

위빙 : 핵심관심모듈에서 횡단관심모듈을 직접 호출하지 않음(프레임워크에서 해줌)


AoP란?(간단설명)

간단하게말해, 계좌이체를 하게될때 로그를 남기게되는데 

코드상에서 직접호출하지 않고 프레임워크에서 처리해준다.







디자인패턴과 프레임워크의 관련성

디자인패턴의 정의

프로그램개발에서 자주 나타나는 과제를 해결하기 위한 방법 중 하나이다.

개발과정에 발견된 Know_how를 축적하여 이름붙인다.

재사용하기 쉽게 특정 규약을 묶어서 정리한것.

대표적인 디자인패턴(GOF)에서 23가지 지원한다.


디자인패턴 사용하는 이유

- 요구사항 변경에따른 소스코드변경 최소화

- 팀 프로젝트시 범용적인 코딩 스타일적용

- 인수인계시 직관적인 코드 사용


프레임워크의 정의

- 비기능적(Non-Funtional) 요구사항(성능,보안,로깅,확장성,안정성등)을 만족하는 구조와

구현된 기능을 안정적으로 실행하도록 제어해주는 잘만들어진 구조의 라이브러리 덩어리

또 애플리케이션들의 최소한의 공통점을 찾아 하부 구조를 제공함.

- 개발자들이 시스템 하부구조 구현하는데 들어갈 노력을 절감해준다.


프레임워크를 사용하는이유

비기능적인 요소(보안,로깅) 초기개발단계마다 구현해야하는 불합리함 극복할수있다.

- 기능적인 요구에만 집중(비지니스로직)하면된다.

- 반복적으로 발견되는 문제를 해결하기위한 특화된 Solution이다.



디자인패턴과 프레임워크의 관련성

- 디자인패턴은 프레임워크의 핵심적인 특징(프레임워크내부에 디자인패턴 적용해서 사용)이 있다.

- 프레임워크를 디자인패턴이라고는 하지못함. 디자인패턴을 사용하고있는 것이다.

- 프레임워크는 디자인 패턴과함께 패턴이 적용된 라이브러리를 제공한다.


프레임워크가 내부적으로 디자인패턴사용한다.

프레임워크를 사용하면 녹아들어가있는 디자인패턴을 사용하게된다.






프레임워크의 구성요소와 종류

Ioc(제어의 역전)

ClassLibrary

Design Patterm


IOC(제어의 역전)

- 인스턴스 생성 부터 소멸이 컨테이너가 처리(개발자가 안함)한다.

- 프레임워크한테 권한을 넘김으로써 개발자 코드가 신경쓸 부분을 줄여준다.

차이점


프레임워크(IOC적용) 사용할때

 라이브러리 사용할때

 프레임워크가 개발자가 작성한 코드를 호출

 개발자가 라이브러리 호출(스트링유틸사용시)


주도권이 프레임워크가 가지고있음(제어의 역전)

Spring 컨테이너가 IOC지원함.

-메타데이터(XML설정)를 통해 beans를 관리하고 어플리케이션의 중요부분을 형상한다.

bean들을 의존성 주입을 통해IoC지원한다.


ClassLibrary

특정 부분의 기술적인 구현을 라이브러리 형태로 제공(반제품) 기본적인 뒷단을 구성되어있다.

프레임워크코드가 유저코드를 호출(이게 제어역전)한다.





디자인패턴

디자인 패턴 + 라이브러리 = 프레임워크

프레임워크 사용시 라이브러리의 디자인패턴을 보면 구성을 이해하기쉽다.

커스터마이징할때도 디자인패턴의 이해가 필요하다.


'개발 소발 > 개발 Spring' 카테고리의 다른 글

AOP란? AOP 기초개념  (0) 2020.07.09
Spring IoC(Inversion of Control),Bean,의존성주입이란?  (0) 2020.07.08
SpringMVC란?  (0) 2018.01.11
MVC패턴이란?  (0) 2018.01.11
Mybatis Mapper 인터페이스란?  (0) 2018.01.11

String 개념

String문자는 ""를 사용해 만들어진다.



위처럼 text란 String을 만들게되면 문자란 값을 상수저장소(Constant pool)에 저장한다.


동일한 "문자" 라는 문자열을 생성할경우


위에 말했듯이 String text를 생성할때 상수저장소에 저장하게되는데

text2가 만들어질때 상수저장소를 확인하고 "문자"가 있을경우 그 참조한 값을 반환한다.

text,text2 참조값은 같다.

그러므로 text와 text2는 같다.


상수저장소란?

- String객체를 저장하는 메모리 구역이다.


즉, 문자열이 이미 존재하면 새로운 객체를 생성하지않고

기존객체를 사용하여 효율적이게된다.


위처럼 new String으로 문자열 생성시 상수저장소에 저장하지않고

일반 힙 메모리에 String객체를 생성한다.

text와 text2의 참조값이 다르다.

text==text2는 될수 없다.


String 비교방법

1.equals() 메소드

2.단순 == 비교

3.compareTo() 메소드


equals() 메소드

equals와 equalsIgnoreCase 있다.


equals이란?

문자열의 내용을 비교하는 것이다.



equalsIgnoreCase이란?

문자열의 특징을 무시하고 비교하는 것(쉽게말해 소문자,대문자)이다.



단순 == 비교

위에 String 개념에서 설명한다.


compareTo() 메소드

문자열 길이를 비교해 정수를 반환해준다.

같다면 0

크다면 1

작다면 -1





조건문

 if 

 구문은 조건하에 명령문을 수행하는 것이다.

 switch 

 구문은 선택된 명령문을 수행하는 것이다.


if문

if <-첫번째 조건이다.

else if <-바로 위에 조건에 부합하지않는다면 체크한다.

else <-위에 모든 조건에 부합하지않는다면 실행한다.

ex)
if(조건) {

실행할 로직

}else if(조건) {위에 조건에 부합하지 않는다면 체크한다.

실행할 로직

}else{위에 모든 조건에 부합하지 않으면(나머지 경우) 실행한다.

실행할 로직

}

switch문

case에는 변수를 넣을 수 없고 값만 들어간다.

switch(변수){

case "비교변수":

break;

default://나머지

}


if문 문 사용 코드.


switch 문 사용 코드.


숫자비교 방법

x == y <- x는 y와 같다.

x != y <- x는 y와 다르다.

x > y <- x는 y보다 크다.

x < y <- x는 y보다 작다.

x >= y <- x는 y보다 크거나 같다.

x <= <- x는 y보다 작거나 같다.


문자열비교 방법

equals

"text" == "text"

->결과 true로 나오긴 하지만

text글자를 비교한것이 아니라

메모리 위치를 비교한 것이다.

자세한 설명->

2018/01/25 - [개발 소발/개발 java] - java 문자열 개념, 문자열 비교


"text".equals("text")

->equals가 text란 글자로 비교하는 것 이다.

     즉, equals를 사용하는 게 맞다.


!"text".equals("text")

->"text".equals("text")의 반대

text와 다르다 의미이다.



변수란?

데이터 타입이다.
primitive type(원시 타입)이라고 불린다.
앞 글자를 소문자로 사용한다.

int <-상수, 소수점을 받아들이지 않는다.
ex) int myInt = 2;

short <- 용량을 작게 차지한다.
(큰 숫자는 안됨)
ex) short myShort = 1;

long <- 큰 숫자에 사용한다.(마지막에 L을 붙임)
ex) long myLong = 1L;

double <- 소수점에 사용한다.
ex) double myDouble = 1.2;

float <- 용량을 작게 차지한다.(특이점 :마지막에 f를 붙인다.)
float myFloat = 1.3f;

char <- 문자열에 사용한다.(특이점:한 글자만 사용 가능하고,''작은따옴표로 사용한다.)
ex) char myChar = 'c';

boolean <- 참, 거짓에 사용한다.(true, false)
ex) boolean myBoolean = false;

byte <- 용량 표현에 사용한다.
ex) byte myByte = 24;

문자열이란?

primitive type(원시 타입) 아니다.
String -> ""사용, 숫자도 문자로 인식한다.
ex) String text = "number : "+myInt;
특이점:뒤에 int형을 문자로 인식한다.

text = myInt; <-X
ex) primitive type 형태만 입력은 안된다.

String 뒤에 숫자 가와도 String으로 인식한다.
primitive type 뒤에 문자열은 안된다.
ex) text = text+": "+myInt;


+ Recent posts