no image
금융용어정리 - 소득공제, 과세표준, 세율, 세액
본 게시글은 유튜브 : 경제 TV 너무경 : 너무 쉬운 경제 윤성종 님의 유튜브 영상을 참고하였습니다. 개인적으로 정리하는 글임을 알립니다. 금융용어정리 - 소득 공제, 과세 표준, 세율, 세액 세액을 공제할 때, 소득에 세율을 곱해서 세액을 산출하는 것이 아니라 과세 표준에 세율을 곱해서 세액을 구한다. 소득공제 소득 공제는 소득액을 산출하기 위해 총소득액에서 법으로 정해진 금액을 빼는 것을 말한다. 소득 공제에는 기초 공제, 부양가족 공제, 의료비 공제 등이 있다 A와 B씨는 둘 다 연 소득이 3000만 원이라고 하면, 생활을 하는데 기본적으로 필요한 돈이 있을 것이다. 이러한 기본적으로 필요한 돈을 소득액에서 빼주는 것을 기초 공제라고 한다. A씨는 혼자 살고, B씨는 부양하는 가족이 있는데 A, ..
2022.12.29
no image
[JAVA] 최댓값, 중앙값, 최소값
Do it! 자료구조와 함께 배우는 알고리즘 입문[자바편] 연습문제와 실습문제입니다. 입력 변수 3개, 최댓값, 중앙값, 최솟값 최댓값 static int max(int a, int b, int c) { int max = a; if(b>max)max=b; if(c>max)max=c; return max; } 중앙값 static int mid(int a, int b, int c) { if(a > b) { if(b > c)return b; else if(a > c)return c; else return a; } else if(a>c)return a; else if(b>c)return c; else return b; } 최솟값 static int min(int a, int b, int c) { int min ..
2022.12.29
no image
[JAVA] 객체 지향 프로그래밍(OOP)
혼자 공부하는 자바 (저자 : 신용권)의 내용을 개인적으로 정리하는 글임을 알립니다. 객체 지향 프로그래밍 현실 세계에서 어떤 제품을 만들 때 부품을 먼저 개발하고 이 부품들을 하나씩 조립해서 제품을 완성하듯이 소프트웨어를 개발할 때에도 부품에 해당하는 객체를 먼저 만든다. 그리고 객체를 하나씩 조립해서 완성된 프로그램을 만드는 기법을 객체 지향 프로그래밍(OOP : Obeject Orented Programming)이라고 한다. 객체는 속성과 동작으로 구성되어 있다. 예를 들어 사람 객체의 속성으로는 이름, 나이 등이 있고, 동작으로는 걷기, 말하기, 먹기 등이 있다. 자바는 이 속성과 동작을 각각 필드와 메소드라고 부른다. 현실 세계의 객체를 소프트웨어 객체로 설계하는 것을 객체 모델링이라고 한다. ..
2022.12.29
no image
금융용어정리 - 원리금, 원금균등상환, 원리금균등상환
본 게시글은 유튜브 : 경제 TV 너무경 : 너무 쉬운 경제 윤성종 님의 유튜브 영상을 참고하였습니다. 개인적으로 정리하는 글임을 알립니다. 금융용어정리 - 원리금, 원금균등상환, 원리금균등상환 원리금 원리금이란 원금과 이자를 합한 금액을 뜻한다. 또한 이자는 매년마다 잔금에 붙는다. ex) 이자율 10%로 500만원 대출받았을 때 1년뒤에 100만원 + 이자 50만원을 갚았으면 잔금은 400만원이고, 2년 뒤에 이자는 400만원의 10%인 40만원이 붙는다. 원금균등상환 아래와 같은 조건으로 대출을 받았다고 가정해보자 대출 원금 기간 이자율 5000만원 5년 10% 기간 대출 잔액 원금 상환액 이자 지불액 원리금 상환액 0년 5000만원 0원 0원 0원 1년 4000만원 1000만원 500만원 1500..
2022.12.28
no image
[JAVA] 열거 타입(enum)
혼자 공부하는 자바 (저자 : 신용권)의 내용을 개인적으로 정리하는 글임을 알립니다. 데이터 중에는 몇 가지로 한정된 값만을 갖는 경우가 있다. 예를 들어 요일에 대한 데이터는 월, 화, 수, 목, 금, 토, 일이라는 7개의 값만을 갖고, 계절에 대한 데이터는 봄, 여름, 가을, 겨울이라는 4개의 값만을 가진다. 이와 같이 한정된 값만을 갖는 타입을 열거 타입(enumeration type)이라 한다. 열거 타입은 한정된 값인 열거 상수 중에서 하나의 상수를 저장하는 타입이다. 다음은 요일이라는 7개의 값을 갖는 데이터의 열거 타입 week를 선언한 것이다. 열거 타입 선언 열거 타입을 선언하기 위해서는 먼저 열거 타입의 이름을 정하고 해당 이름으로 소스 파일(.java)을 생성해야 한다. 열거 타입 이..
2022.12.28
no image
금융용어정리 - 만기 수익률
본 게시글은 유튜브 : 경제 TV 너무경 : 너무 쉬운 경제 윤성종 님의 유튜브 영상을 참고하였습니다. 개인적으로 정리하는 글임을 알립니다. 금융용어정리 - 만기 수익률 만기 수익률 만기 수익률이란 채권의 시장 가격과 미래 현금 흐름의 현재가치를 일치시켜주는 할인율을 뜻한다. 예를 들어 액면가 100억, 액면 이자율 10% 만기가 2년인 채권이 있다고 하자 채권 시장에서도 채권 가격은 100억이고, 채권 이자율도 10%였는데 경기 침체가 우려되어 안전 자산인 채권 수요가 증가해서 채권 가격이 상승했다고 해서 채권의 가격이 113.4억이 되었다. 이 때의 가격을 수식을 나타내면 아래와 같다. 위 수식에서 r(할인율)을 구하는 방법은 계산기 없이 구하는 것은 매우 복잡하다. 계산기든 뭐든 어떤 수단으로 r을..
2022.12.27
no image
[JAVA] 배열(Array)
혼자 공부하는 자바 (저자 : 신용권)의 내용을 개인적으로 정리하는 글임을 알립니다. 참조 타입과 메모리 관련된 설명이 많이 나옵니다. 참조 타입과 메모리와의 연관성을 모르시면 아래의 글을 읽고 오시는 것을 추천드립니다. 2022.12.26 - [Language/JAVA] - [JAVA] 참조 타입과 참조 변수 [JAVA] 참조 타입과 참조 변수 데이터 타입은 기본 타입과 참조 타입으로 나눠지며, 기본 타입은 이전에 정리한 바가 있다. 2022.12.22 - [Language/JAVA] - [JAVA] 기본 타입 [JAVA] 기본 타입 변수를 선언할 때 주어지는 타입에 따라 변수 rebugs.tistory.com 배열 개요 배열은 같은 타입의 데이터를 연속된 공간(메모리)에 나열하고, 각 데이터에 인덱스..
2022.12.27
no image
금융용어정리 - 부동산의 가치 평가(원가, 비교, 수익 방식)
본 게시글은 유튜브 : 경제 TV 너무경 : 너무 쉬운 경제 윤성종 님의 유튜브 영상을 참고하였습니다. 개인적으로 정리하는 글임을 알립니다. 금융용어정리 - 부동산의 가치평가(원가, 비교, 수익 방식) 부동산의 가치평가 부동산의 가치 평가 방법으로는 원가, 비교, 수익 방식이 있다. 각각의 방식으로 가치 평가를 하기도 하지만 일반적으로는 세 가지의 방식을 모두 고려해서 평가를 함 원가 방식 건물을 지을 때 필요한 건축비, 인건비 등등의 모든 비용을 합친 비용이 건물의 가치라고 판단하는 방식 비교 방식 가치 평가를 할 건물 근처에 비슷한 건물의 가치를 비교해서 판단하는 방식 ex) A건물을 가치 판단하고 싶은데, B라는 건물이 A건물 근처에 있고 비슷하면 B라는 건물이 5억이면 A 건물도 5억 정도 하겠다..
2022.12.26

본 게시글은 유튜브 : 경제 TV 너무경 : 너무 쉬운 경제 윤성종 님의 유튜브 영상을 참고하였습니다. 개인적으로 정리하는  글임을 알립니다.


금융용어정리 - 소득 공제, 과세 표준, 세율, 세액

 

세액을 공제할 때, 소득에 세율을 곱해서 세액을 산출하는 것이 아니라 과세 표준에 세율을 곱해서 세액을 구한다.

소득공제

소득 공제는 소득액을 산출하기 위해 총소득액에서 법으로 정해진 금액을 빼는 것을 말한다. 

소득 공제에는 기초 공제, 부양가족 공제, 의료비 공제 등이 있다
A와 B씨는 둘 다 연 소득이 3000만 원이라고 하면, 생활을 하는데 기본적으로 필요한 돈이 있을 것이다.
이러한 기본적으로 필요한 돈을 소득액에서 빼주는 것을 기초 공제라고 한다.
A씨는 혼자 살고, B씨는 부양하는 가족이 있는데 A, B 씨 모두 같은 세액을 부과하면 부당할 것이다.
그래서 그 만큼의 돈을 소득액에서 빼주는 것을 부양가족 공제라고 한다.
A, B 씨 모두 의료비로 지출한 돈이 있을 것이다. 이러한 의료비에 필요한 돈은 소득액에서
빼주는 것을 의료비 공제라고 한다.

 

과세표준

과세표준은 소득액에서 소득 공제를 하고 남은 금액이다.

 

세율

세율은 과세표준에 대해 납부하여야 할 세액의 비율이다.

과세표준에 곱하여 세금의 액수를 결정하는 비율이기도 하다.

과세표준에 세율을 곱하면 산출 세액이 나온다.

 

세액(세금)

산출 세액은 과세 표준에 세율을 곱하여서 산출한다.

산출 세액에서 세액 공제를 빼면 납부 세액이 나온다.

 

Do it! 자료구조와 함께 배우는 알고리즘 입문[자바편] 연습문제와 실습문제입니다.


입력 변수 3개, 최댓값, 중앙값, 최솟값

 

최댓값

static int max(int a, int b, int c)
	{
		int max = a;
		if(b>max)max=b;
		if(c>max)max=c;
		return max;
	}

 

중앙값

static int mid(int a, int b, int c)
	{
		if(a > b)
		{
			if(b > c)return b;
			else if(a > c)return c;
			else return a;
		}
		else if(a>c)return a;
		else if(b>c)return c;
		else return b;
	}

 

최솟값

static int min(int a, int b, int c)
	{
		int min = a;
		if(min>b)min=b;
		if(min>c)min=c;
		return min;
	}

 

종합

import java.util.Scanner;
public class Test {
	static int max(int a, int b, int c)
	{
		int max = a;
		if(b>max)max=b;
		if(c>max)max=c;
		return max;
	}
	static int mid(int a, int b, int c)
	{
		if(a > b)
		{
			if(b > c)return b;
			else if(a > c)return c;
			else return a;
		}
		else if(a>c)return a;
		else if(b>c)return c;
		else return b;
	}
	static int min(int a, int b, int c)
	{
		int min = a;
		if(min>b)min=b;
		if(min>c)min=c;
		return min;
	}
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.println("정수 3개를 입력하세요");
		int []arr = new int[3];
		for(int i = 0; i < 3; ++i)
		{
			arr[i]=sc.nextInt();
		}
		
		System.out.print("최댓값 : "+max(arr[0],arr[1],arr[2])+",");
		System.out.print("중앙값 : "+mid(arr[0],arr[1],arr[2])+",");
		System.out.print("최솟값 : "+min(arr[0],arr[1],arr[2]));
	}
}
/*
정수 3개를 입력하세요
546876 1567544 125
최댓값 : 1567544,중앙값 : 546876,최솟값 : 125
*/

 

 

입력 변수 4개, 최댓값, 최솟값

 

최댓값

static int max(int a, int b, int c, int d)
	{
		int max = a;
		if(max<b) max = b;
		if(max<c) max = c;
		if(max<d) max = d;
		return max;
		
	}

 

최솟값

static int min(int a, int b, int c, int d)
	{
		int min = a;
		if(min>b) min = b;
		if(min>c) min = c;
		if(min>d) min = d;
		return min;
	}

 

종합

import java.util.Scanner;
public class Test{
	static int max(int a, int b, int c, int d)
	{
		int max = a;
		if(max<b) max = b;
		if(max<c) max = c;
		if(max<d) max = d;
		return max;
		
	}
	static int min(int a, int b, int c, int d)
	{
		int min = a;
		if(min>b) min = b;
		if(min>c) min = c;
		if(min>d) min = d;
		return min;
	}
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.println("정수 4개를 입력하세요");
		int []arr = new int[4];
		for(int i = 0; i < 4; ++i)
		{
			arr[i]=sc.nextInt();
		}
		
		System.out.print("최댓값 : "+max(arr[0],arr[1],arr[2],arr[3])+",");
		System.out.print("최솟값 : "+min(arr[0],arr[1],arr[2],arr[3]));
	}
}
/*
정수 4개를 입력하세요
54654 132 654 98321
최댓값 : 98321,최솟값 : 132
*/

 

 

기타

static int mid(int a, int b, int c)
	{
		if(a > b)
		{
			if(b > c)return b;
			else if(a > c)return c;
			else return a;
		}
		else if(a>c)return a;
		else if(b>c)return c;
		else return b;
	}
static int mid(int a, int b, int c)
	{
		if((b>=a && c<=a)||(b<=a && c>=a)) return a;
		else if((a>=b && c<=b)||(a<=b && c>=b)) return b;
		return c;
	}

 

첫 번째 코드와 두 번째 코드는 동일한 기능을 수행한다.

하지만 첫 번째 코드가 더 효율적이다.

두 번째 코드의 (b>=a && c<=a)||(b<=a && c>=a) 에서 b>=a 와 b<= a는 실질적으로 같은 코드이다.

왜냐하면 "a와 b중 둘 중에 뭐가 더 크냐"라고 물어보는 본질은 같기 때문이다.

 또한 다음줄에 나오는 else if((a>=b && c<=b)||(a<=b && c>=b)) 에서도 b>=a 와 b<= a는 실질적으로 같은 코드이다.

같은 물음을 반복적으로 함으로 인해 첫 번째 코드보다 두 번째 코드가 비효율적이다.

혼자 공부하는 자바 (저자 : 신용권)의 내용을 개인적으로 정리하는 글임을 알립니다.


객체 지향 프로그래밍

현실 세계에서 어떤 제품을 만들 때 부품을 먼저 개발하고 이 부품들을 하나씩 조립해서 제품을 완성하듯이 소프트웨어를 개발할 때에도 부품에 해당하는 객체를 먼저 만든다. 그리고 객체를 하나씩 조립해서 완성된 프로그램을 만드는 기법을 객체 지향 프로그래밍(OOP : Obeject Orented Programming)이라고 한다.

 

객체는 속성과 동작으로 구성되어 있다.

예를 들어 사람 객체의 속성으로는 이름, 나이 등이 있고, 동작으로는 걷기, 말하기, 먹기 등이 있다.

자바는 이 속성과 동작을 각각 필드와 메소드라고 부른다.

현실 세계의 객체를 소프트웨어 객체로 설계하는 것을 객체 모델링이라고 한다.

 

객체의 상호작용

현실 세계에서 사람(객체)이 계산기(객체)를 이용하는 것과 같이, 소프트웨어에서도 객체는 각각 독립적으로 전재하고, 다른 객체와 서로 상호작용을 하면서 동작한다.

객체들 사이의 상호작용 수단은 메소드이다. 이때 객체가 다른 객체의 기능을 이용하는 것이 메소드 호출이다.

 

객체 간의 관계

객체는 개별적으로 사용될 수 있지만, 대부분 다른 객체와 관계를 맺고 있다.

이 관계의 종류에는 집합관계, 사용관계, 상속관계가 있다.

  • 집합 관계에 있는 객체는 하나는 부품이고 하나는 완성품에 해당
  • 사용 관계는 객체 간의 상호작용을 말함
  • 상속 관계는 상위(부모)객체를 기반으로 하위(자식)객체를 생성하는 관계를 말함.

 

객체와 클래스

건물을 마구잡이로 짓지는 않는다. 설계도에 의해서 건물이 완성된다.

자바에서 설계도가 클래스이다. 클래스에는 객체를 생성하기 위한 필드와 메소드가 정의되어 있고, 클래스로 부터 만들어진 객체를 해당 클래스의 인스턴스라고 한다.

보통 붕어빵 틀과 붕어빵사이의 관계를  클래스와 객체 사이 관계로 많이 예를 든다.

 

 

'Java Category > Java' 카테고리의 다른 글

[JAVA] 필드(Field)  (0) 2022.12.31
[JAVA] 클래스(Class)  (0) 2022.12.30
[JAVA] 열거 타입(enum)  (0) 2022.12.28
[JAVA] 배열(Array)  (0) 2022.12.27
[JAVA] 참조 타입과 참조 변수  (0) 2022.12.26

본 게시글은 유튜브 : 경제 TV 너무경 : 너무 쉬운 경제 윤성종 님의 유튜브 영상을 참고하였습니다. 개인적으로 정리하는  글임을 알립니다.


금융용어정리 - 원리금, 원금균등상환, 원리금균등상환

원리금

원리금이란 원금과 이자를 합한 금액을 뜻한다.

또한 이자는 매년마다 잔금에 붙는다.

ex) 이자율 10%로 500만원 대출받았을 때 1년뒤에 100만원 + 이자 50만원을 갚았으면 잔금은 400만원이고, 2년 뒤에 이자는 400만원의 10%인 40만원이 붙는다.

 

원금균등상환

아래와 같은 조건으로 대출을 받았다고 가정해보자
대출 원금 기간 이자율
5000만원 5년 10%
기간 대출 잔액 원금 상환액 이자 지불액 원리금 상환액
0년 5000만원 0원 0원 0원
1년 4000만원 1000만원 500만원 1500만원
2년 3000만원 1000만원 400만원 1400만원
3년 2000만원 1000만원 300만원 1300만원
4년 1000만원 1000만원 200만원 1200만원
5년 0원 1000만원 100만원 1100만원
총 원금 상환액 5000만원 + 총 이자 지불액 1500만원 = 총 6500만원

원금균등상환은 위에 표와 같이 매년 원금 1000만원을 균등하게 지불하고, 이자가 계속 줄어들어서 원리금이 매년 감소하는 것을 알 수 있다.

그리하여 총 원금 5000만원을 갚았고, 이자로만 1500만원을 지불해서 결과적으로 총 6500만원을 낸 셈이 된다.

이와 같이 원금을 균등하게 갚는 것을 원금균등상환이라고 한다.

 

원리금균등상환

원금균등상환에서 원금을 균등하게 갚았다면 원리금균등상환은 원리금을 균등하게 갚는 것이다.

매년 갚아야 하는 원리금 상환액은 저당상수에 의해 결정된다.

원금에 저당상수를 곱하면 매년 갚아야하는 원리금이 나온다.

아래와 같은 조건으로 대출을 받았다고 가정해보자
원금 기간 이자율
5000만원 5년 10%

위와 같은 조건의 저당상수는 0.2638이고, 대출 원금 5000만원에 0.2638을 곱하면 1,319만원이다.

즉 매년 원리금 1,319만원을 갚아야 하는 것이다.

기간 대출 잔액 원금 상환액 이자 지불액 원리금 상환액
0년 5000만원 0원 0원 0원
1년 4181만원 819만원 500만원 1319만원
2년 3280만원 901만원 418만원 1319만원
3년 2289만원 991만원 328만원 1319만원
4년 1199만원 1090만원 229만원 1319만원
5년 0원 1199만원 120만원 1319만원
총 원금 상환액 5000만원 + 총 이자 지불액 1595만원 = 총 6595만원

원리금균등상환은 위의 표와 같이 매년 동일한 원리금상환액을 지불하며, 초반엔 원금을 조금 갚고 나중에는 원금을 많이 갚는 것을 볼 수 있다.

그리하여 총 원금 5000만원을 갚았고, 이자로만 1595만원을 지불해서 결과적으로 총 6595만원을 낸 셈이 된다.

원금을 초반에 적게 내서 이자가 더 붙게 되는 것이다.

이와 같이 원리금을 균등하게 갚는 것을 원리금균등상환이라고 한다.

 

원금균등상환 VS 원리금균등상환

결과적으로는 원금균등상환이 원금+이자가 적다.

하지만 초반에 원리금균등상환보다 갚아야 하는 금액이 더 많다.

원리금균등상환은 결과적으로 원금+이자가 많다.

하지만 초반에 원금균등상환보다 갚아야하는 금액이 더 적다.

 

따라서 자신이 현재 처한 상황에 따라서 어떤 대출을 할지 정하는 것이 중요하다.

혼자 공부하는 자바 (저자 : 신용권)의 내용을 개인적으로 정리하는 글임을 알립니다.


데이터 중에는 몇 가지로 한정된 값만을 갖는 경우가 있다.

예를 들어 요일에 대한 데이터는 월, 화, 수, 목, 금, 토, 일이라는 7개의 값만을 갖고, 계절에 대한 데이터는 봄, 여름, 가을, 겨울이라는 4개의 값만을 가진다. 이와 같이 한정된 값만을 갖는 타입을 열거 타입(enumeration type)이라 한다.

 

열거 타입은 한정된 값인 열거 상수 중에서 하나의 상수를 저장하는 타입이다.

 

다음은 요일이라는 7개의 값을 갖는 데이터의 열거 타입 week를 선언한 것이다.

 

열거 타입 선언

열거 타입을 선언하기 위해서는 먼저 열거 타입의 이름을 정하고 해당 이름으로 소스 파일(.java)을 생성해야 한다.

열거 타입 이름은 관례적으로 첫 글자를 대문자로 하고 나머지는 소문자로 구성한다.

만약 여러 단어로 구성된 이름이라면 각 단어의 첫 글자는 대문자로 하는 것이 관례이다.

 

public enum 키워드는 열거 타입을 선언하기 위한 키워드이고, 열거 타입 이름은 소스 파일 이름과 대소문자가 모두 일치해야 한다.

public enum 열거타입이름 { ... }

열거 타입을 선언했다면 이제 열거 상수를 선언한다.

열거 상수는 열거 타입의 값으로 사용되는데, 관례적으로 열거 상수는 모두 대문자로 작성한다.

public enum Week { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY }

만약 열거 상수가 여러 단어로 구성될 경우에는 단어 사이를 밑줄(_)로 연결하는 것이 관례이다.

 

열거 타입 변수

열거 타입도 하나의 타입이므로 변수를 선언하고 사용해야 한다.

열거타입 변수이름;
Week today;

열거 상수는 단독으로 사용할 수 없고 반드시 '열거 타입.열거 상수' 형태로 사용된다.

Week today = Week.FRIDAY;

 

메모리와 열거 타입

참조 타입과 메모리의 관계를 잘 모른다면 아래의 글을 읽는 것을 추천

2022.12.26 - [Language/JAVA] - [JAVA] 참조 타입과 참조 변수

 

[JAVA] 참조 타입과 참조 변수

데이터 타입은 기본 타입과 참조 타입으로 나눠지며, 기본 타입은 이전에 정리한 바가 있다. 2022.12.22 - [Language/JAVA] - [JAVA] 기본 타입 [JAVA] 기본 타입 변수를 선언할 때 주어지는 타입에 따라 변수

rebugs.tistory.com


열거 타입은 참조 타입이기 때문에 열거 상수는 객체이다.

열거 타입 변수 Week의 경우 MONSDAY~SUNDAY까지의 열거 상수는 열거 객체로 생성된다.

메소드 영역에 생성된 열거 상수가 해당 Week 객체를 각각 차조하게 된다.

 

열거 타입 변수에 열거 상수를 대입하면 아래와 같다.

Week today = Week.FRIDAY;

열거 타입 변수 today는 스택 영역에 생성되고, today에 저장되는 값은 Week.FRIDAY 열거 상수가 참조하는 객체의 주소이다. 그래서 열거 상수 Week.FRIDAY와 today 변수는 서로 같은 Week 객체를 참조하게 된다.

 

실습

File - New - Enum 클릭

 

열거 타입을 사용할 패키지 이름을 확인하고 열거 타입 이름을 설정한다.

 

소스파일 이름과 열거 타입 이름이 일치하는지 확인 후 열거 상수 작성

 

package TestPakage;
import java.util.Calendar;
public class Test {
	public static void main(String[] args) {
		Week today = null;
		
		Calendar cal = Calendar.getInstance();
		int week = cal.get(Calendar.DAY_OF_WEEK); //오늘 요일을 받아옴
		
		switch(week) {
			case 1:
				today = Week.SUNDAY; break;
			case 2:
				today = Week.MONDAY; break;
			case 3:
				today = Week.TUESDAY; break;
			case 4:
				today = Week.WEDNESDAY; break;
			case 5:
				today = Week.THURSDAY; break;
			case 6:
				today = Week.FRIDAY; break;				
			case 7:
				today = Week.SATURDAY; break;		
		}
		
		System.out.println("오늘 요일: "+ today);
		
		if(today == Week.FRIDAY) {
			System.out.println("금요일엔 열심히 술을 마신다");
		} else {
			System.out.println("열심히 일을 한다");
		}
	}
}
/*
오늘 요일: MONDAY
열심히 일을 한다
*/

'Java Category > Java' 카테고리의 다른 글

[JAVA] 클래스(Class)  (0) 2022.12.30
[JAVA] 객체 지향 프로그래밍(OOP)  (0) 2022.12.29
[JAVA] 배열(Array)  (0) 2022.12.27
[JAVA] 참조 타입과 참조 변수  (0) 2022.12.26
[JAVA] 연산자  (2) 2022.12.25

본 게시글은 유튜브 : 경제 TV 너무경 : 너무 쉬운 경제 윤성종 님의 유튜브 영상을 참고하였습니다. 개인적으로 정리하는  글임을 알립니다.


금융용어정리 - 만기 수익률

만기 수익률

만기 수익률이란 채권의 시장 가격과 미래 현금 흐름의 현재가치를 일치시켜주는 할인율을 뜻한다.

 

예를 들어 액면가 100억, 액면 이자율 10% 만기가 2년인 채권이 있다고 하자

채권 시장에서도 채권 가격은 100억이고, 채권 이자율도 10%였는데

경기 침체가 우려되어 안전 자산인 채권 수요가 증가해서 채권 가격이 상승했다고 해서

채권의 가격이 113.4억이 되었다.

이 때의 가격을 수식을 나타내면 아래와 같다.

위 수식에서 r(할인율)을 구하는 방법은 계산기 없이 구하는 것은 매우 복잡하다.

계산기든 뭐든 어떤 수단으로 r을 구해보면 0.03이다

위의 그림을 보면 채권의 가격이 상승하면 채권의 이자율(할인율)이 하락하는 것을 볼 수 있다.

 

다시 만기 수익률의 뜻을 살펴보면

만기 수익률 : 채권의 시장 가격과 미래 현금 흐름의 현재 가치를 일치시켜주는 할인율

빨갛게 표시한 숫자가 만기 수익률이다.

혼자 공부하는 자바 (저자 : 신용권)의 내용을 개인적으로 정리하는 글임을 알립니다.


참조 타입과 메모리 관련된 설명이 많이 나옵니다.

참조 타입과 메모리와의 연관성을 모르시면 아래의 글을 읽고 오시는 것을 추천드립니다.

2022.12.26 - [Language/JAVA] - [JAVA] 참조 타입과 참조 변수

 

[JAVA] 참조 타입과 참조 변수

데이터 타입은 기본 타입과 참조 타입으로 나눠지며, 기본 타입은 이전에 정리한 바가 있다. 2022.12.22 - [Language/JAVA] - [JAVA] 기본 타입 [JAVA] 기본 타입 변수를 선언할 때 주어지는 타입에 따라 변수

rebugs.tistory.com


배열 개요

배열은 같은 타입의 데이터를 연속된 공간(메모리)에 나열하고, 각 데이터에 인덱스를 부여해 놓은 자료구조이다.

  • 배열은 같은 타입의 데이터만 저장할 수 있다.
  • 한 번 생성된 배열은 길이를 늘이거나 줄일 수 없다.

배열은 객체이므로 힙 영역에 생성되고, 배열 변수는 힙 영역의 배열 객체를 참조하게 된다.

배열 선언

배열 변수 선언은 다음과 같이 두 가지이다.

  1. 타입[ ] 변수;
  2. 타입 변수 [ ];
//1번째 배열 변수 선언 방법
int[] intArray;
double[] doubleArray;
String[] strArray;
//2번째 배열 변수 선언 방법
int intArray[];
double doubleArray[];
String strArray[];

 

배열 생성

배열 객체를 생성하려면 다음과 같은 방법이 있다.

  1. 값 목록으로 배열 생성
  2. new 연산자로 배열 생성

값 목록으로 배열 생성

타입[ ] 변수 = { 값1, 값2, 값3, 값4, 값5 } 와 같은 방법으로 배열 객체를 생성할 수 있다.

String[] Value = {"값0", "값1", "값2", "값3", "값4"};

위에서 말했듯이 Value라는 배열 변수는 "값 0~4"를 가지는 배열 객체를 참조하고 있는 것이다.

이해를 위해 임의로 주소를 100으로 설정한 것이다. 실제는 다르다.

※주의※
배열 변수를 이미 선언한 후에는 다른 실행문에서 중괄호를 사용한 배열 생성이 허용되지 않음
int[] value;
value = {1, 2, 3}; //자바에선 이런 문법을 허용하지 않음​
배열 변수를 미리 선언한 후 값 목록들이 나중에 결정되는 상황이라면 new연산자를 사용해서 값 목록을 지정해 줘야 함

메소드의 매개 변수값이 배열일 경우에도 마찬가지로 값 목록으로 배열을 생성함과 동시에 메소드의 매개값으로 사용하고자 할 때는 new 연산자를 사용해야 한다.
int add(int[] scores) {...}
int result = add({95, 85 ,90}); //컴파일 에러
int result = add(new int[]{95, 85,90}); //new 연산자를 이용한 값 목록 지정

아래의 예제를 참고하자
package TestPakage;
public class Test {
	public static void main(String[] args) {
		int[] scores;
		scores = new int[] { 83, 90, 87 };
		int sum1 = 0;
		for(int i=0; i<3; i++) {
			sum1 += scores[i];
		}
		System.out.println("총합 : " + sum1);	
		
		int sum2 = add( new int[] { 83, 90, 87 } );
		System.out.println("총합 : " + sum2);	
		System.out.println();
	}
	public static int add(int[] scores) {
		int sum = 0;
		for(int i=0; i<3; i++) {
			sum += scores[i];
		}
		return sum;
	}
}
/*
총합 : 260
총합 : 260
*/​

 

new 연산자로 배열 생성

값의 목록을 가지고 있지 않지만, 향후 값들을 저장할 배열을 미리 만들고 싶다면 new 연산자로 다음과 같이 배열 객체를 생성할 수 있다.

타입[ ] 변수 = new 타입[길이];

길이는 배열이 저장할 수 있는 값의 개수를 말함. 이미 배열 변수가 선언된 경우에도 new 연산자로 배열을 생성할 수 있다.

//기본적 new연산자로 배열 생성
int[] intArray = new int[5];
//값 목록 생성으론 안되었던 문법
int[] intArray;
intArray = new int[5]; //new연산자를 사용하면 컴파일 에러 안남

new 연산자로 배열을 처음 생성할 경우 배열은 자동적으로 기본값으로 초기화된다.

분류 타입 초기값
기본 타입(정수) byte[ ]
char[ ]
short[ ]
int[ ]
long[ ]
0
'\u0000'
0
0
0L
기본 타입(실수) float[ ]
double[ ]
0.0F
0.0
기본 타입(논리) boolean[ ] false
참조 타입 클래스[ ] null
인터페이스[ ] null
package TestPakage;
public class Test {
	public static void main(String[] args) {
		int[] arr1 = new int[3];
		for(int i=0; i<3; i++) {
			System.out.println("arr1[" + i + "] : " + arr1[i]);
		}
		arr1[0] = 10;
		arr1[1] = 20;
		arr1[2] = 30;
		for(int i=0; i<3; i++) {
			System.out.println("arr1[" + i + "] : " + arr1[i]);
		}
		
		double[] arr2 = new double[3];
		for(int i=0; i<3; i++) {
			System.out.println("arr2[" + i + "] : " + arr2[i]);
		}
		arr2[0] = 0.1;
		arr2[1] = 0.2;
		arr2[2] = 0.3;
		for(int i=0; i<3; i++) {
			System.out.println("arr2[" + i + "] : " + arr2[i]);
		}
		
		String[] arr3 = new String[3];
		for(int i=0; i<3; i++) {
			System.out.println("arr3[" + i + "] : " + arr3[i]);
		}
		arr3[0] = "1월";
		arr3[1] = "2월";
		arr3[2] = "3월";
		for(int i=0; i<3; i++) {
			System.out.println("arr3[" + i + "] : " + arr3[i]);
		}
	}
}
/*
arr1[0] : 0
arr1[1] : 0
arr1[2] : 0
arr1[0] : 10
arr1[1] : 20
arr1[2] : 30
arr2[0] : 0.0
arr2[1] : 0.0
arr2[2] : 0.0
arr2[0] : 0.1
arr2[1] : 0.2
arr2[2] : 0.3
arr3[0] : null
arr3[1] : null
arr3[2] : null
arr3[0] : 1월
arr3[1] : 2월
arr3[2] : 3월
*/

 

배열 길이

int[ ] arr = {1,2,3,4,5}; 에서 arr의 길이는 5개인 것을 쉽게 알 수 있다.

하지만 데이터가 너무 많아서 알기 힘든 경우는 분명히 생긴다. 이때 유용한 것이 length필드이다.

int[] array = {1,2,3,4,5};
System.out.println(array.length); //5

밑은 응용 예제

package TestPakage;
public class Test {
	public static void main(String[] args) {
int[] scores = { 83, 90, 87 };
		
		int sum = 0;
		for(int i=0; i<scores.length; i++) {
			sum += scores[i];
		}
		System.out.println("총합 : " + sum);
		
		double avg = (double) sum / scores.length;
		System.out.println("평균 : " + avg);
	}
}
/*
총합 : 260
평균 : 86.66666666666667
*/

 

다차원 배열

지금까지 살펴본 배열은 1차원 배열이다. 이와 달리 값들이 행과 열로서 구성된 배열을 2차원 배열이라고 한다. 2차원 배열은 수학의 행렬을 떠올리면 된다.

2차원 배열은 실무에서 자주 사용되지만, 3차원 이상은 실무에서 잘 쓰이지 않을뿐더러 매우 복잡하므로 다루지 않겠다.

int[][] scores = new int[2][3];

위의 코드는 2행 3열의 행렬을 생성하고 scores 변수가 참조하도록 한 것이다.

이를 스택과 힙 영역에서 보면 아래와 같다.

 

위 그림에서 보는 것과 같이 메모리 상에는 2행 3열의 행렬이 생성되는 것이 아니라 1차원 배열 3개가 생성되고

길이가 2인 배열이 각각 길이가 3인 배열 객체의 주소값을 참조하는 형식이다.

 

이처럼 자바는 1차원 배열이 서로 연결된 구조로 다차원 배열을 구현하기 때문에 수학 행렬 구조가 아닌 계단식 구조를 가질 수 있음.

 

위 코드는 아래와 같이 메모리에 배열 객체를 생성

 

 

위와 같은 계단식 배열을 아무 생각 없이 for문을 돌리면 인덱스 오류가 난다.

각 1차원 배열의 정확한 길이를 알고 코딩하는 것이 중요한데, length 필드를 이용하면 편하게 할 수 있다

 

package TestPakage;
public class Test {
	public static void main(String[] args) {
		int[][] mathScores = new int[2][3];
		for(int i=0; i<mathScores.length; i++) {
			for(int k=0; k<mathScores[i].length; k++) {
				System.out.println("mathScores["+i+"]["+k+"]="
						+mathScores[i][k]);
			}
		}
		System.out.println();
		
		int[][] englishScores = new int[2][];
		englishScores[0] = new int[2];
		englishScores[1] = new int[3];
		for(int i=0; i<englishScores.length; i++) {
			for(int k=0; k<englishScores[i].length; k++) {
				System.out.println("englishScores["+i+"]["+k+"]=" + englishScores[i][k]);
			}
		}
		System.out.println();		
		
		int[][] javaScores = { {95, 80}, {92, 96, 80} };
		for(int i=0; i<javaScores.length; i++) {
			for(int k=0; k<javaScores[i].length; k++) {
				System.out.println("javaScores["+i+"]["+k+"]="
						+javaScores[i][k]);
			}
		}
	}
}
/*
mathScores[0][0]=0
mathScores[0][1]=0
mathScores[0][2]=0
mathScores[1][0]=0
mathScores[1][1]=0
mathScores[1][2]=0

englishScores[0][0]=0
englishScores[0][1]=0
englishScores[1][0]=0
englishScores[1][1]=0
englishScores[1][2]=0

javaScores[0][0]=95
javaScores[0][1]=80
javaScores[1][0]=92
javaScores[1][1]=96
javaScores[1][2]=80
*/

 

다차원 배열은 new연산자 말고도 값 목록으로도 생성할 수 있다.

int[][] scores = {{95,80},{92,96}}; //값 목록을 이용한 2행 2열 배열 생성

 

객체를 참조하는 배열

기본 타입(byte, int등등) 배열은 각 항목에 직접 값을 갖고 있지만, 참조타입(클래스, 인터페이스) 배열은 각 항목에 객체의 번지를 가지고 있다. 예를 들어 String은 클래스이므로 String[]배열은 각 항목에 문자열이 아니라, String 객체의 번지를 가지고 있다. 즉 String[] 배열은 String 객체를 참조하게 된다.

String[] array = new String[3];
array[0] = "Java";
array[1] = "C++";
array[2] = "C#";

위 코드는 배열 변수 array를 선언하고 3개의 문자열을 참조하는 배열을 생성

그림으로 표현하면 아래와 같다

 

자바에서 String은 new연산자로 생성한 것이 아니고 문자열이 같다면 같은 객체를 참조하게 되어있다.

String[] array = new String[3];
array[0] = "Java";
array[1] = "Java";
array[2] = new String("Java");

따라서 문자열 자체를 비교하려면 equals()메소드를 사용하여 비교해야 한다.

package TestPakage;
public class Test {
	public static void main(String[] args) {
		String[] strArray = new String[3];
		strArray[0] = "Java";
		strArray[1] = "Java";
		strArray[2] = new String("Java");

		System.out.println( strArray[0] == strArray[1]);
		System.out.println( strArray[0] == strArray[2] );    
		System.out.println( strArray[0].equals(strArray[2]) );
	}
}
/*
true
false
true
*/

 

배열 복사

배열을 복사하는 방법은 3가지이다.

  1. for문을 이용하여 복사(참조 복사)
  2. System.arraycopy() 메소드를 이용하여 복사(참조 복사)
  3. clone() 메소드를 이용하여 복사(배열 자체 복사)

 

for문을 이용하여 복사

package TestPakage;
public class Test {
	public static void main(String[] args) {
		int[] oldIntArray = { 1, 2, 3 };
		int[] newIntArray = new int[5];
		
		for(int i=0; i<oldIntArray.length; i++) {
			newIntArray[i] = oldIntArray[i];
		}
		
		for(int i=0; i<newIntArray.length; i++) {
			System.out.print(newIntArray[i] + ", ");
		}
	}
}
/*
1, 2, 3, 0, 0, 
*/

 

System.arraycopy() 메소드를 이용하여 복사

System.arraycopy() 메소드의 매개 값은 다음과 같다

System.arraycopy(원본 배열, 원본 배열의 복사를 시작할 인덱스, 대상배열, 대상 배열에 복사를 할 인덱스, 몇 개를 복사할지)무슨 소리인지 모르겠다면 아래 예제를 참고하면 된다.

package TestPakage;
public class Test {
	public static void main(String[] args) {
		String[] oldStrArray = { "java", "array", "copy" };
		String[] newStrArray = new String[5];
		
		System.arraycopy( oldStrArray, 0, newStrArray, 0, oldStrArray.length);
		
		for(int i=0; i<newStrArray.length; i++) {
			System.out.print(newStrArray[i] + ", ");
		}
	}
}
/*
java, array, copy, null, null, 
*/

 

배열을 복사하는 for문을 이용한 방법과 System.arraycopy() 모두 복사되는 값이 객체의 주소이므로 새 배열의 항목은 이전 배열의 항목이 참조하는 객체와 동일하다.

 

clone() 메소드를 이용하여 복사

public class Main{
	public static void main(String[] args) {
		int []a = {1,2,3,4,5};
		int []b = a.clone();
		
		b[3] = 0;
		
		System.out.print("a = ");
		for(int i = 0; i < 5; ++i)
		{
			System.out.print(" " + a[i]);
		}
		System.out.println();
		System.out.print("b = ");
		for(int i = 0; i < 5; ++i)
		{
			System.out.print(" " + b[i]);
		}
	}
}
/*
a =  1 2 3 4 5
b =  1 2 3 0 5
*/

위 코드와 같이 '배열변수이름.clone()' 으로 함수를 호출할 수 있으며, 배열을 복제하고 복제한 배열에 대한 참조를 생성한다.

clone() 메소드를 이용한 복제는 단순히 객체의 주소만 복사하는 것이 아니라, 배열 자체를 복사하고 복사된 배열의 주소값을 리턴한다는 것이다.

즉, a와 b는 서로 다른 배열 객체의 주소값을 가리키고 있는 것이다.

하지만 다차원 배열의 복제는 최상위 1레벨만 수행한다. 아래 코드에서 c[0]과 c[1]만 복제되고, 그 아래 레벨의 배열은 복제되지 않고 공유된다.

int [][] c = {{1,2,3,4}, {5,6,7}}; //2차원 배열
int [][] d = c.clone(); //2차원 배열의 복제

public class Main{
	public static void main(String[] args) {
		int[] a = {1,2,3,4}; //1차원 배열
		int[] b = a.clone(); //1차원 배열의 복제
		int [][] c = {{1,2,3,4}, {5,6,7}}; //2차원 배열
		int [][] d = c.clone(); //2차원 배열의 복제
		
		System.out.println(a == b); //a와 b가 같은 객체를 참조하는지 비교
		System.out.println(c == d); //c와 d가 같은 객체를 참조하는지 비교
		for(int i = 0; i < c.length; ++i)
		{
			for(int j = 0; j < c[i].length; ++j)
			{
				System.out.println(c[i][j] == d[i][j]); //각 배열의 요소가 같은 객체를 참조하는지 비교
			}
		}
		
	}
}
/*
false
false
true
true
true
true
true
true
true
*/

위 코드의 실행결과와 마찬가지로 배열변수 c와 d의 최상위 1레벨 참조는 다르지만 그 아래 레벨의 배열의 참조는 같은 것을 확인할 수 있다.

따라서 다차원 배열을 복사하기 위해서는 for문을 돌리면서 일일이 복사해주어야 한다.

'Java Category > Java' 카테고리의 다른 글

[JAVA] 객체 지향 프로그래밍(OOP)  (0) 2022.12.29
[JAVA] 열거 타입(enum)  (0) 2022.12.28
[JAVA] 참조 타입과 참조 변수  (0) 2022.12.26
[JAVA] 연산자  (2) 2022.12.25
[JAVA] 시스템 입출력  (0) 2022.12.24

본 게시글은 유튜브 : 경제 TV 너무경 : 너무 쉬운 경제 윤성종 님의 유튜브 영상을 참고하였습니다. 개인적으로 정리하는  글임을 알립니다.


금융용어정리 - 부동산의 가치평가(원가, 비교, 수익 방식)

부동산의 가치평가

부동산의 가치 평가 방법으로는 원가, 비교, 수익 방식이 있다.

각각의 방식으로 가치 평가를 하기도 하지만 일반적으로는 세 가지의 방식을 모두 고려해서 평가를 함

 

원가 방식

건물을 지을 때 필요한 건축비, 인건비 등등의 모든 비용을 합친 비용이 건물의 가치라고 판단하는 방식

 

비교 방식

가치 평가를 할 건물 근처에 비슷한 건물의 가치를 비교해서 판단하는 방식

 

ex) A건물을 가치 판단하고 싶은데, B라는 건물이 A건물 근처에 있고 비슷하면 B라는 건물이 5억이면 A 건물도 5억 정도 하겠다고 판단함

 

수익 방식

채권의 미래 가치를 현재 가치로 환산하듯이, 부동산의 미래 가치를 현재 가치로 환산하여 계산하는 방식

할인율을 결정하는 요소(처분손익, 임대료 변화 등)가 복잡하며 감가상각률도 고려해야 한다.

 

ex) A부동산을 100억에 매수하고 임대료는 매수액의 10%인 10억이고 3년 보유 후 처분한다고 할 때, 처분 시점인 3년 뒤의 얻을 이익을 현재 가치로 환산

 

부동산은 건물의 특성 때문에 감가상각을 고려해야 함

감가상각은 현재 가치를 낮추게 하는 요소이며 위 수식에서 할인율에 감가상각률을 더해서 현재 가치를 낮게 한다.