함수 function
- 반복되는 작업을 분리하여 함수로 생성한다.
리턴값 return values
- 함수에서 반환하는 결과값을 말한다.
매개변수 parameters
- 함수가 사용될때 생성되는 변수를 말한다.
인수 aguments
- 함수를 불러올때 사용할 인수를 말한다.

 

#include <iostream>

using namespace std;


//함수도 메모리에 저장되어 있다.
//integer형태로 반환한다.
//int a,int b는 parameters 매개변수 이다.
int addTwoNumbers(int a, int b)
{
	int sum = a + b;
	cout << sum << endl;

	//반환값
	return sum;
}

//return 값이 없을때 void를 사용한다.
void printHello() 
{
	cout << "Hello" << endl;
}

int main()
{
	//반복적인 작업에 같은코드를 계속생성하는건 비생산적이다.
	//한가지패턴이 여러번 나타나면 함수로 분리한다.
	cout << 1 + 3 << endl;
	cout << 4 + 5 << endl;
	cout << 8 + 7 << endl;

	//함수를 만들면 아래처럼 쉽게 사용할 수 있다.
	//한 자리 더하기에 사용하면 불필요해보지만 복잡한 사용은 무조건 쪼개서 사용한다.
	//메모리에 저장된 함수를 불러와 사용한다.
	//함수를 호출할때 (1,3) 넣어주는값을 aguments 인수라고 한다.
	//함수실행될때 파라미터에 인수를 초기화한다.
	addTwoNumbers(1, 3);
	addTwoNumbers(4, 5);
	addTwoNumbers(8, 7);

	//함수가 integer형이기에 int로 값을 저장할 수 있다.
	int a = addTwoNumbers(4, 5);
	cout << "a 변수의 값은? " << a << endl;

	printHello();

	return 0;
}

'개발 소발 > 개발 C++(기초)' 카테고리의 다른 글

c++ 헤더파일 만드는 이유  (0) 2019.06.26
c++ 키워드,식별자란?  (0) 2019.06.26
c++ 입력,출력  (0) 2019.06.25
c++ 객체,변수,초기화,대입이란?  (0) 2019.06.25
C언어 파일입출력  (0) 2019.01.18

입출력을 사용하기 위해선 iostream을 include해줘야한다.

출력은 std::cout을 사용한다.
- 줄맞춤을 할땐 "\t"를 사용한다.
- \뒤에 문자는 어떠한 기능을 수행한다.(ex:줄맞춤,줄바꿈)
- 특이점 : \a는 소리를 출력해준다.

입력받을때는 std::cin을 사용한다.
출력과 반대로 입력연산자 >>를 사용한다.

std::을 사용하기 귀찮다면 using namespace std;를 사용한다.

 

#include <iostream>
#include <cstdio>

int main()
{
	//using namespace std;
	//int main(){} 함수안에서 std::를 사용하지 않아도 된다.
	using namespace std;
	int x = 1024;

	//std란 namespace안에 cout함수를 사용한다.
	std::cout << "Test" << std::endl;
	std::cout << "x is " << x << std::endl;
    //\t를 사용하면 줄맞춤이 된다.
	std::cout << "tab" << "\t" << "test" << std::endl;
	std::cout << "tab2" << "\t" << "test" << std::endl;

	//using namespace std;를 해놨기에 std::는 생략되어도 된다.
	//입력받는방법 cin >> 연산자를 사용한다.
	cin >> x;
	cout << "x change " << x << endl;

	return 0;
}

'개발 소발 > 개발 C++(기초)' 카테고리의 다른 글

c++ 키워드,식별자란?  (0) 2019.06.26
c++ 함수란?  (0) 2019.06.25
c++ 객체,변수,초기화,대입이란?  (0) 2019.06.25
C언어 파일입출력  (0) 2019.01.18
C언어 코딩 함수포인터,구조체  (0) 2019.01.08

객체 Objects
- 객체지향 프로그래밍란 말에서 사용되는 객체(Object)
- c++,java에서 사용
- 물리적으로 공간을 차지하고 있는 물체를 존재한다고 본다.
- 컴퓨터안에선 메모리에 저장이 돼있는 정보가 객체로서 존재한다고 본다.

변수 variables
- 객체를 다루고 싶을때 즉, 메모리에 올려놓고 사용하고 싶을 때 사용한다.
- ex)아파트 104동 1014호 1041014로 저장하면 보기 힘드므로 OO 네 집처럼 이름 저장한다.

Left-values와 Right-values

- Left-values는 알기 쉬운 주소 값을 가지고 있다.

Right-values는 주소값을 알기 어렵다.


초기화 initializaion와 대입 assignment

- int a = 123; int a(123);등이 initializaion초기화이다.

- 초기화는 메모리에 적재될 때 같이 집어 값을 넣어준다.

- int b; 

- b = 123;은 assignment 대입의 개념 생성된 메모리 안에 값을 대입해준다.


초기화를 안 했을 때의 문제점

- 메모리 주소 안에 garbage값이 들어 있을 수 있다.

 

#include <iostream>

int main()
{
	//x라는 정수형(interger)변수를 선언했다.
	//x도 객체이다. x는 숫자를 담을수있는공간을 메모리에 차지하고 있다.
	//x 메모리의 이름이다.
	int x;
	//x = 123 <- assignment 대입해준다.
	//프로그래밍에서 = 는 보통 오른쪽값을 왼쪽에 대입해준다.
	//즉, x란 변수가 가르키고있는 메모리 공간에 123을 대입해준다.
	x = 123;

	//x의 주소의 대입되어있는 값 출력
	std::cout << x << std::endl;
	//x의 주소 출력(메모리주소)
	std::cout << &x << std::endl;

	//Left-values int x 는 메모리의 주소를 가지고있다.
	//Right-values 123는 프로그래머가 임시로 저장된 주소를 가져오기가 어렵다.
	int a = 123;
	//왼쪽 a는 Left-values이나 오른쪽 a는 a의 값을 임시로 복사해온 right-values로 본다.
	a = a + 123;

	//int z = 123;
	//z라는 변수가 메모리에 할당받을때 바로 집어넣어준다.
	//메모리에 garbage 값이 있을수 있기에 초기화 해준다.
	//initialization
	int z = 123;
	
	//x = 123 <- assignment 대입해준다.
	z = 123;

	//initialization와 assignment같아보이지만 다르다.
	//ex)int z(123);으로 사용할 수 있다.
	//initialization의 개념은 생성자,소멸자,오버로딩,오버라이딩에 사용된다.
	
	return 0;
}

'개발 소발 > 개발 C++(기초)' 카테고리의 다른 글

c++ 함수란?  (0) 2019.06.25
c++ 입력,출력  (0) 2019.06.25
C언어 파일입출력  (0) 2019.01.18
C언어 코딩 함수포인터,구조체  (0) 2019.01.08
C언어 코딩 동적메모리 할당  (0) 2019.01.07

돈은 신용이다.
credit 영어 신용
credo 라틴어 나는 믿는다.

신용이란 개념이 없으면 세계 경제사는 발전하지 못했다.

피보나치 - 피보나치수열을 만든사람

피보나치 수열은 피보나치가 쓴 책 계산의책(책제목)에서 소개된 동양의 수학사상중 하나이다.
로마인들은 간단한 셈 어려워했다.
피보나치는 아라비아 숫자를쓰면 계산이 쉽다는걸 알고 
동양의 수학을 가져와 회계,환전,이자계산을 쉽게 계산하게 만들었다.(리베르 아라치 책)

이탈리아에서 피보나치가 아닌 유대인들이 사무실 의자에 앉아 대부업을 하였다.

은행(BANK)의 유래
   - bank의 유래 이탈리아어 banco 의자에서 유래됬다.

왜 이탈리아에서 피보나치가 아닌 유대인이 대부업을 했을까?
이자를 받는것이 기독교에선 죄악이였기 때문이다.
유대인은 법률에서는 가족빼고는 이자를 받을 수 있었다.

고리대금(대부업)은 기독교에서 제한했다. 그러므로 금융업은 발전할 수 없었다.

지오반이 디 비치 데 메디치 등장 이후
메디치가의 번성(환전업)
   - 고리대금 방지 법을 피할 수 있는 독창적인 회계법
   - 환전의 대가로 적은 수수료를 받았다.
   - 가불 받을 경우 그 기간만큼 수수료을 청구함
   - 위험을 무릎쓰고 돈을 맡기면 보상이 주어졌다.
   - 도시단위로 환전업을 키웠다.
   - 규모는 커지고 위험은 감소했다.

이후 메디치가에서 아들 셋은 교황이 되었다.
또 딸들은 왕족과 결혼하였다.

즉 과거처럼 금융업은 무시당하지않고 대우받게되었다.


위에서 메디치가가 한것처럼 금융세계는 클수록 좋다.
규모를 키우고 사업을 다양화해 위험을 분산한다.
대출뿐만아니라 외환업무까지 해서 불량채권을 줄였다.

 

너무 유해도, 너무 강하게 제제해도 돈을 갚지 못한다. 
위에 이유로 은행이 탄생하게된다. 


미국은 채무를 발판으로 성장했다.
미국은 가지고 있는 모든걸 담보로돈을 빌려준다.

가장 성공한 자본주의 경제가 손쉬운 파산에 기반을 둔다.

일부의 파산이 문제가 안되는 이유

   - 실패 후 재기의 기회가 있어야한다.
   - 은행 입장에선 대출가운데 일부가 연체됬다고 생각한다.
   - 채무를 없애는게 아닌 채무이행계획을 다시세우는것이기때문이다.

대출은 경제 성장의 기초이다.
하지만 은행 출현이 가능해야 고리대금업에서 한단계 성장한다.

또 채무자들이 정상적으로 대출받을 수 있을때 고리대금횡포에서 벗어난다.

여러 서비스를 개발 할때 REST API란 이름으로 우리는 API를 만든다.

그러면서도 우린 아니 나는 REST API가 무엇인지 정확히 모르고 있었다.

그러던 차에 https://tv.naver.com/v/2292653

그런 REST API로 괜찮은가? 라는 영상을 보게되었다.

다들 시간이 날때 보면 좋을거 같다.


우선 REST란 말의 해석을 보면

Representational State Transfer 의 약자

이렇게 나온다.
몬지 모르겠다...


rest란말은 로이필딩(roy fielding)이란 사람이 여러사람과

http1.0을 정립하고 명세를 하게되었는데

http를 고치게되면 기존 웹과의 호환성의 문제가 생길 수 있었다.

웹을 망가트리지않고 http를 진보 시킬방법을 생각하다

Http Object Model이란 해결책을 만들게 되었다.


이 Http Object Model이 Rest 정의의 시작이다.


RestAPI

- 여러 아키텍쳐스타일의 집합(6가지)

동영상을 보면 다 나온다.

- 그중 uniform interface를 지키지 않는경우가 많다.


uniform interface란?

메세지는 스스로 설명해야한다.

- 목적지,명세를 표현해줘야한다.

- HETEOAS

전이가 될 수 있어야한다.

예를 들어 글 목록 -> 글 쓰기 -> 글 저장 -> 글 보기 -> 글 목록

링크를 타고 할 수 있게 되는 것이다.

- 명세

명세는 id,title란 정보가 있으면 그게 무엇인지 표현해주는것을 말한다.


uniform interface을 신경 써야하는 이유

- 서버와 클라이언트가 독립적으로 진화한다.

- 서버가 기능 변경이 되어도 클라이언트는 업데이트를 할 필요없다.

예를 들어 이전글,다음글을 보게 개발되어있을때 링크정보가 있다면

클라이언트는 변경할 것이 없다.


RestAPI로 안만들어도 될때는?

- 서버가 클라이언트를 통제가능할때 

혼자 다 개발하면 신경안써도된다.

- 진화에 관심 없을때

여러번의 업데이트등이 문제안될때


다음번 API개발할때는

RestAPI개념을 정확히 하여 개발해보자.

var,let의 차이

window객체에서 var만 사용 가능하다.

ex) this의 사용 ,this는 window오브젝트를 참조한다.


let은 scope개념이다.

특히 블록스코프에서 돋보인다.

<script type="text/javascript">
var s = 1;
var s = 2;
//중복 출력해도 에러가 나지 않는다.
let z = 1;
//중복 출력시 에러가 난다.
//let z = 2;
if(s == 2){
s = 3;
}
console.log(s);
function get(){
var s = 4;
console.log("test : "+s);
console.log("test : "+this.s);
//let변수는 this사용시에 에러가 난다.
//console.log("test : "+this.z);
}
get();
//4가 출력된다.
console.log(s);

if(z == 1){
//{} scope 안에서 따로 생성되는 개념
let z = 3;
}
//1이 출력된다.
console.log(z);

</script>


var와 let의 호이스팅 차이

<script type="text/javascript">
//변수 호이스팅
console.log(a);
var a = "test";

//console.log(b);
//let b = "test";
</script>

출력결과는 undefined로 나온다.

let는 에러로 나온다.


아래의 코드가 위에있는 코드의 호이스팅 개념이다.

<script type="text/javascript">
//변수 호이스팅
var a ;
console.log(a);
a = "test";

</script>

var와 let의 for문 비교

var를 사용하면 k의 출력결과는 3으로만 나온다.

let을 사용하면 클릭한 k의 숫자가 나온다.

{} 스코프개념

<ul>
<li>1</li>
<li>2</li>
<li>3</li>
</ul>
<script>
var nodes = document.querySelector("ul");

//var를 사용할 경우 k는 3이 출력된다.
//var k 변수에 마지막에 3이 할당되기 때문이다.
for(var k = 0; k < nodes.children.length; k++){
var el = nodes.children[k];
el.onclick = function(event){
alert("test");
event.target.style.backgroundColor = "yellow";
console.log(k);
}
}

//let을 사용할 경우 k는 각 숫자가 출력된다.
//scope 별로 값을 가지기 때문이다.
for(let k = 0; k < nodes.children.length; k++){
var el = nodes.children[k];
el.onclick = function(event){
alert("test");
event.target.style.backgroundColor = "yellow";
console.log(k);
}
}


</script>

const란?

const변수에 할당된 값은 상수가 된다.

즉, 변경 불가능하다.

단 Object 형태로 선언 했을때는

{} Object는 할당할 수 없지만 obj의 프로퍼티에는 값을 할당할 수 있다.

<script type="text/javascript">
const SPORTS = "축구";
console.log(SPORTS);
try{
SPORTS = "농구";
}catch (e){
console.log("변경불가");
}

const obj = { test : "value" };
try{
obj = {};
}catch (e){
console.log("변경불가");
}

obj.test = "변경됨";
console.log(obj.test);
</script>

출력결과:

축구

변경불가

변경불가

변경됨

자바 Exception 핸들링

Exception

- 프로그램이 핸들링할 수 있는 경우를 Exception이라고 한다.

- 처리가 가능하다.

- checked exception(complie time)

+ 실행하기 이전 예측가능하다.

+ 파일 확인할때 에러,SQL관련

+ 이클립스,인텔리제이등 ide가 컴파일 할때 체크 해준다.

- unchecked exception(runtime)

+ 실행해야 알 수 있다.

+ 실행시 객체생성없는경우(NullPointer), Array싸이즈가 안맞는 에러등이 있다.

Error

- 핸들링이 불가능해 회복이 불가능하다. 대표적으로 OOM(메모리문제)가 있다.


Exception 핸들링 방법

try, catch block

- 블럭을 설정해 Exception을 처리해준다.

throws

- 메소드 선언부에서 사용한다.

- 메소드를 불러오는 메소드에 책임은 전가한다.

- Exception이 생기면 던져준다.

throw(인위적 Exception 발생)

- Exception이 필요한 상황에 개발자가 Exception을 발생시킨다.

- try, catch나 throws를 사용해야한다.

자바에서 static개념

- 객체지향프로그램인 자바는 객체,변수등이 필요할때 메모리에 올려야한다.

- static은 프로그램으로 객체생성이전 JVM에 클래스가 로딩될때 메모리에 올라온다.

- 변수,메소드,내부클래스에서 static을 사용가능하다.

- 변수,메소드에서 자주사용한다.

- 변수에 static이 붙게 되면 Class로 접근 가능하다.

- 전역변수가 필요할때 static을 사용한다.

- 메소드에 static이 붙게되면 Class로 접근가능하다.

- 대표적인예제 public static void main(String[] args)


abstract와 Interface의 차이

SuperClass와 subClass로 구성된건 같다.

서브클래스는 슈퍼클래스의 큰 영향을 받는다.


abstactClass

- 슈퍼클래스가 어느정도 구현되어있고 나머지를 서브클래스에서 구현해야할때사용한다.

- single inheritance이다.(다중상속불가능)

- 모든 접근제한자에서 가능하다.

- 일반적인 변수,상수가 사용가능하다.

- abstractMethods,concreteMethods 둘다 가능하다.


Interface

- 실질적인 구현이없는 abstractMethods만있는 빈깡통클래스

- 일종의 규약을 위해 생성한다.

- 상속이아닌 구현으로 다중구현이 가능하다.

- public만 가능하다.

- 오직 상수만이 가능하다.

- abstractMethods만가능하다.

오버라이딩

overriding

- 부모 클래스로 부터 상속받은 메소드를 자식클래스에서 다시구현한다.

- 자식클래스에서 입맛에 맞게 다시 구현

- 메소드에 파라미터,리턴타입은 부모,자식클래스이 같아야한다.

- 자식클래스에서 필요해의해 다양하게 수정하기 위해서이다.


오버로딩

overloading

- 같은 클래스안에서 이름이 같은 메소드를 말한다.

  - 이름은 같은 메소드지만 다양한 파라미터를 받아서 처리할때 사용한다.

- 파라미터가 달라야한다.

- 리턴타입은 같지않아도 된다.

String 생성 방법의 차이

1. String s1 = new String("Java");

2. String s2 = "Java"; <-리터럴방식

1번 방식으로 생성하게 되면 힙메모리에 올라가게된다.

2번 방식으로 생성하게되면 자바1.7이후 힙메모리안 StringPool이라는 특정메모리안에 올라가게된다.

2번 방식은 값이 같을 경우 같은 주소를 보게된다.


즉, == 로 비교하게되면 주소값을 비교하게되는데 2번방식으로 생성할때만 비교할 수 있다.

.equals()방식은 문자열을 비교하는 것이기 때문에 모두 가능하다.


즉, new()로 생성하면 힙메모리에 생성되고 ""로 생성하게되면 힙메모리안 StringPool에 생성되어 재사용가능하다.



+ Recent posts