본 게시글은 유튜브 : 경제 TV 너무경 : 너무 쉬운 경제 윤성종 님의 유튜브 영상을 참고하였습니다. 개인적으로 정리하는 글임을 알립니다.
금융용어정리 - 권리락(신주배정기준일, 권리락기준가, 권리락적용일)
권리락
무상증자와 유상증자 등으로 인하여 신주배정일 이후에 주주 명부에 기재되어 신주인수권 등이 없어진 상태를 뜻한다.
신주 배정일 이전에 주식을 산 주주들에게는 신주인수권이 포함되어 있지만 이후에 주식을 산 주주들에게는 신주인수권이 없기 때문에 그만큼 저렴한 가격에 주가(권리락 기준가)를 책정하는 것이다.
쉽게 말하자면 기존 주가가 5천원이었는데 이 5천원에는 신주를 배정받을 권리가 있지만, 신주배정기준일 이후 주주 명부에 등재된 주주는 신주를 배정받을 권리가 없으므로 그만큼 저렴한 주가에 매도할 수 있다.
신주인수권 증자를 위하여 신주가 발행되는 경우 우선적으로 인수를 청구할 수 있는 권리. =신주를 배정받을 권리
신주배정기준일
주식회사가 신주를 발행할 때 신주를 배정 받을 자를 정하기 위해 특정한 날에 주주 명부에 기재된 주주를 신주배정을 받을 수 있는 권리인으로 확정하게 되는데 그 기준일을 신주배정기준일이라고 한다.
예를 들어 1월 24일이 신주배정기준일이라고 하면, 1월 24일 까지 주주명부에 등재되지 않으면 신주를 받을 수 없다.
권리락적용일
권리락이 적용되는 날짜를 말한다.
추가 설명 주식시장에서 주식을 매수하면 통장에서 그 즉시 돈이 빠져나갈지는 몰라도, 주주 명부에 기재되는데 까지는 최소 2 영업일이 소요된다. 1월 24일이 신주배정기준일이라면 적어도 1월 22일에 주식을 매수해야 24일에 주주 명부에 기재될 수 있다. 1월 23일에 주식을 매수하면 24일에 주주 명부에 기재 될 수 없으므로(신주를 배정받을 수 없으므로), 권리락 기준일은 23일이 된다.
a의 소수점 첫째 자리가 5 이상이면 다음 큰 정수값을, 4 이하이면 다음 작은 정수값을 리턴한다.
long v14 = Math.round(5.3); //5
long v15 = Math.round(5.7); //6
만약 원하는 소수 자릿수에서 반올림된 값을 얻기 위해서는 반올림할 자릿수가 소수점 첫째 자리가 되도록 10^n을 곱한 후, round()메소드의 리턴값을 얻고 다시 10^n.0을 나눠주면 된다.
n=2 즉, 소수점 두 번째 자리가 반올림되는 코드는 아래와 같다.
double value = 12.3456;
double temp1 = value * 100; //1234.56
long temp2 = Math.round(temp1); //1235
double v16 = temp2 / 100.0; //12.35
Math.pow(N, M) 메소드
N의 M제곱을 리턴하는 메소드
리턴 타입은 double이다.
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws Exception{
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int M = sc.nextInt();
double result = Math.pow(N, M); //N의 M제곱
System.out.println(N + "^" + M + "= "+ result);
}
}
/*
2 5
2^5= 32.0
*/
static void cardConvR(int x, int r)
{
char []d = new char[32];
int digits = 0; //변환된 진수의 자릿수를 저장
String dchar = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
do {
d[digits++] = dchar.charAt(x % r); // r로 나눈 나머지를 저장
x /= r;
} while (x != 0);
for(int i = digits-1; i>=0; i--) System.out.print(d[i]);
}
설명
위와 같은 결과로 이루어진 배열을 역순으로 출력하면 진수변환이 되는 것이다.
문자 추출 charAt() 메소드 charAt() 메소드는 매개값으로 주어진 인덱스의 문자를 리턴한다. dchar.charAt(x % r)에서 x는 59 r이 16이라고 가정하면 59를 16로 나눈 후 나머지는 11이다 dchar배열의 인덱스 11은 B이므로 B가 리턴된다.
실행 예제
import java.util.Scanner;
public class Main{
static void cardConvR(int x, int r)
{
char []d = new char[32];
int digits = 0; //변환된 진수의 자릿수를 저장
String dchar = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
do {
d[digits++] = dchar.charAt(x % r); // r로 나눈 나머지를 저장
x /= r;
} while (x != 0);
for(int i = digits-1; i>=0; i--) System.out.print(d[i]);
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("변환할 정수 입력 : ");
int num = sc.nextInt();
System.out.print("진수 입력 : ");
int n = sc.nextInt();
cardConvR(num,n);
}
}
/*
변환할 정수 입력 : 59
진수 입력 : 2
111011
*/
자세한 계산과정을 출력하는 알고리즘
static void cardConvR(int x, int r)
{
char []d = new char[32];
int digits = 0; //변환된 진수의 자릿수를 저장
String dchar = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
System.out.printf("%2d | %6d\n",r,x);
System.out.println(" + -------");
do {
d[digits++] = dchar.charAt(x % r); // r로 나눈 나머지를 저장
if((x/r) == 0) System.out.printf(" %6d ... %2c\n", x/r, dchar.charAt(x % r));
else System.out.printf("%2d | %6d ... %2c\n", r, x/r, dchar.charAt(x % r));
x /= r;
if(x != 0) System.out.println(" + -------");
} while (x != 0);
System.out.print("변환된 값 : ");
for(int i = digits-1; i>=0; i--) System.out.print(d[i]);
}
실행예제
import java.util.Scanner;
public class Main{
static void cardConvR(int x, int r)
{
char []d = new char[32];
int digits = 0; //변환된 진수의 자릿수를 저장
String dchar = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
System.out.printf("%2d | %6d\n",r,x);
System.out.println(" + -------");
do {
d[digits++] = dchar.charAt(x % r); // r로 나눈 나머지를 저장
if((x/r) == 0) System.out.printf(" %6d ... %2c\n", x/r, dchar.charAt(x % r));
else System.out.printf("%2d | %6d ... %2c\n", r, x/r, dchar.charAt(x % r));
x /= r;
if(x != 0) System.out.println(" + -------");
} while (x != 0);
System.out.print("변환된 값 : ");
for(int i = digits-1; i>=0; i--) System.out.print(d[i]);
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("변환할 정수 입력 : ");
int num = sc.nextInt();
System.out.print("진수 입력 : ");
int n = sc.nextInt();
cardConvR(num,n);
}
}
/*
변환할 정수 입력 : 59
진수 입력 : 8
8 | 59
+ -------
8 | 7 ... 3
+ -------
0 ... 7
변환된 값 : 73
*/
static boolean equals(int[] a, int[] b)
{
if(a.length != b.length) return false; //배열의 길이가 다르면 false 리턴
for(int i = 0; i < a.length; ++i) if(a[i] != b[i]) return false; //요소의 값이 다르면 false 리턴
return true; //배열의 길이가 같고, 모든 요소의 값이 같으면 true 리턴
}
아래는 실행예제
public class Main{
static boolean equals(int[] a, int[] b)
{
if(a.length != b.length) return false; //배열의 길이가 다르면 false 리턴
for(int i = 0; i < a.length; ++i) if(a[i] != b[i]) return false; //요소의 값이 다르면 false 리턴
return true; //배열의 길이가 같고, 모든 요소의 값이 같으면 true 리턴
}
public static void main(String[] args) {
int[] array = {1,2,3,4,5,6,7};
int[] array2 = {1,2,3,4,5,6};
int[] array3 = {2,5,3,6,7,7,8};
int[] array4 = {1,2,3,4,5,6,7};
System.out.println(equals(array, array2));
System.out.println(equals(array, array3));
System.out.println(equals(array, array4));
}
}
/*
false
false
true
*/
배열 복사
배열 a와 b를 매개값으로 받아서 배열b의 요소를 a배열로 복사하는 메소드를 작성
static void copy(int[] a, int[] b)
{
if(a.length < b.length) //b의 길이가 a보다 크면
{
System.out.println("배열의 길이가 모자릅니다.");
return;
}
for(int i = 0; i < b.length; ++i) a[i] = b[i]; //배열 요소 복사
}
아래의 코드는 a배열의 길이가 더 작아도 작은 길이 만큼만 복사하는 알고리즘
static void copy(int[] a, int[] b)
{
int num = a.length <= b.length ? a.length : b.length;
for (int i = 0; i < num; i++) a[i] = b[i];
}
실행 예제
public class Main{
static void copy(int[] a, int[] b)
{
if(a.length < b.length) //b의 길이가 a보다 크면
{
System.out.println("배열의 길이가 모자릅니다.");
return;
}
for(int i = 0; i < b.length; ++i) a[i] = b[i]; //배열 요소 복사
}
static void printArray(int[] array) //배열 요소 출력
{
for(int i = 0; i < array.length; ++i)
{
if(i == array.length-1) {System.out.println(array[i]); break;}
System.out.print(array[i] + ", ");
}
}
public static void main(String[] args) {
int[] array = {5,3,32,9,6,3,8};
int[] array2 = {1,2,3,4,5,6,7};
printArray(array);
copy(array,array2); //array2를 array에 복사
printArray(array);
}
}
/*
5, 3, 32, 9, 6, 3, 8
1, 2, 3, 4, 5, 6, 7
*/
배열 역순으로 복사
배열 a와 b를 매개값으로 받아서 배열 b의 요소를 a배열로 역순으로 복사하는 메소드를 작성
static void rcopy(int[] a, int[] b)
{
if(a.length < b.length) //배열 b의 길이가 더 크면
{
System.out.println("배열의 길이가 모자릅니다.");
return;
}
for(int i = 0; i < b.length; ++i) a[i] = b[b.length-i -1]; //배열 요소 복사
}
아래의 코드는 a배열의 길이가 더 작아도 작은 길이 만큼만 복사하는 알고리즘
static void rcopy(int[] a, int[] b) {
int num = a.length <= b.length ? a.length : b.length;
for (int i = 0; i < num; i++)a[i] = b[b.length - i - 1];
}
실행예제
public class Main{
static void rcopy(int[] a, int[] b)
{
if(a.length < b.length) //배열의 길이가 서로 다르면
{
System.out.println("배열의 길이가 모자릅니다.");
return;
}
for(int i = 0; i < b.length; ++i) a[i] = b[b.length-i -1]; //배열 요소 복사
}
static void printArray(int[] array) //배열 요소 출력
{
for(int i = 0; i < array.length; ++i)
{
if(i == array.length-1) {System.out.println(array[i]); break;}
System.out.print(array[i] + ", ");
}
}
public static void main(String[] args) {
int[] array = {1,2,3,4,5,6,7};
int[] array2 = {10,11,12,13,14,15,16};
printArray(array);
rcopy(array,array2);
printArray(array);
}
}
/*
1, 2, 3, 4, 5, 6, 7
16, 15, 14, 13, 12, 11, 10
*/
본 게시글은 혼자 공부하는 자바 (저자 : 신용권)의 책과 유튜브 영상을 참고하였고, 개인적으로 정리하는 글임을 알립니다.
String 생성자
소스상에서 문자열 리터럴은 String 객체로 자동 생성되지만, String 클래스의 다양한 생성자를 이용해서 직접 String 객체를 생성할 수도 있다.
어떤 생성자를 이용해서 String 객체를 생성할지는 제공되는 매개값의 타입에 달려있다.
아래는 사용 빈도수가 높은 생성자들이다. 파일의 내용을 읽거나, 네트워크를 통해 받은 데이터는 보통 byte [] 배열이므로 이것을 문자열로 변환하기 위해 사용된다.
//배열 전체를 String 객체로 생성
String str = new String(byte[] bytes);
//지정된 문자셋으로 디코딩
String str = new String(byte[] bytes, String charsetName);
//배열의 offset 인덱스 위치부터 length만큼 String 객체로 생성
String str = new String(byte[] bytes, int offset, int length);
//지정한 문자셋으로 디코딩
String str = new String(byte[] bytes, int offset, int length, String charsetName);
바이트 배열을 이용한 인코딩과 디코딩
인코딩 : String -> 바이트 배열
디코딩 : 바이트 배열 -> String
문자셋을 지정하지 않으면 IDE에서 기본으로 설정된 문자셋으로 인코딩 및 디코딩이 된다.
한글 1글자를 UTF-8로 인코딩하면 3바이트가 되고, EUC-KR로 인코딩하면 2바이트가 된다.
charAt() 메소드는 매개값으로 주어진 인덱스의 문자를 리턴한다. 아래의 코드는 charAt() 메서드를 이용한 주민등록번호상에서 남자인지 여자인지를 구분하는 코드이다.
public class Main{
public static void main(String[] args) {
String ssn = "010624-1230123";
char sex = ssn.charAt(7);
switch (sex) {
case '1':
case '3':
System.out.println("남자");
break;
case '2':
case '4':
System.out.println("여자");
break;
}
}
}
/*
남자
*/
문자열 비교(equals(), compareTo())
equals() 메소드는 문자열이 같은지를 비교할 때 쓰는 메소드이다. 문자열을 비교할 때 == 연산자를 쓰면 원치 않는 결과가 나온다. String객체끼리 ==연산자를 사용하면 주솟값이 같은지를 true 또는 false로 리턴하기 때문이다.
public class Main{
public static void main(String[] args) {
String strVar1 = new String("김민수");
String strVar2 = "김민수";
if(strVar1 == strVar2) {
System.out.println("같은 String 객체를 참조");
} else {
System.out.println("다른 String 객체를 참조");
}
if(strVar1.equals(strVar2)) {
System.out.println("같은 문자열");
} else {
System.out.println("다른 문자열");
}
}
}
/*
다른 String 객체를 참조
같은 문자열
*/
compareTo() 메소드는 인수로 전달받은 문자열과 비교(대소 관계를 판단)하는 메소드이다.
주어진 문자열과 비교 대상 문자열 간의 사전적 순서를 기준으로 비교하며, 결과에 따라 음수, 0, 양수를 반환한다.
반환 값이 음수: 호출된 문자열이 비교 대상 문자열보다 사전적으로 앞에 위치.
반환 값이 0: 두 문자열이 사전적으로 동일.
반환 값이 양수: 호출된 문자열이 비교 대상 문자열보다 사전적으로 뒤에 위치.
public static void main(String[] args) {
String str1 = "apple";
String str2 = "banana";
String str3 = "apple";
// str1과 str2 비교
int result1 = str1.compareTo(str2);
System.out.println("Comparison of str1 and str2: " + result1);
// str1과 str3 비교
int result2 = str1.compareTo(str3);
System.out.println("Comparison of str1 and str3: " + result2);
// str2과 str1 비교
int result3 = str2.compareTo(str1);
System.out.println("Comparison of str2 and str1: " + result3);
}
바이트 배열로 변환(getBytes())
종종 문자열을 바이트 배열로 변환하는 경우가 있다.
예를 들어 네트워크로 문자열을 전송하거나, 문자열을 암호화할 때 문자열을 바이트 배열로 변환하는 경우가 있다.
어떤 문자셋으로 인코딩하느냐에 따라 바이트 배열의 크기가 달라지는데, EUC-KR은 알파벳은 1바이트, 한글은 2바이트로 변환하고, UTF-8은 알파벳은 1바이트, 한글은 3바이트로 변환한다. getBytes(Charset charset) 메소드는 잘못된 문자셋을 매개값으로 줄 경우, UnsupportedEncodingException이 발생하므로 예외 처리가 필요하다. 바이트 배열을 다시 문자열로 변환(디코딩)할 때에는 어떤 문자셋으로 인코딩 된 바이트 배열이냐에 따라서 디코딩 방법이 다르다.
단순하게 String(byte[] bytes) 생성자를 이용해서 디코딩하면 시스템의 기본 문자셋을 이용한다. 시스템 기본 문자셋과 다른 문자셋으로 인코딩 된 바이트 배열일 경우 아래와 같은 String 생성자를 이용해서 디코딩해야 한다.
String str = new String(byte[] bytes, String charsetName);
str.getBytes().length
str.getBytes().length는 문자를 내부적으로 저장하는 배열의 크기, 곧 바이트 단위 크기를 반환한다. 여기서 인코딩 방식은 자바가 내부적으로 데이터를 저장하는 인코딩 방식을 의미한다. 이것을 프로그램 소스코드를 저장하는 인코딩 방식과 혼동하면 안 된다.
public class Main {
public static void main(String[] args) {
String str = "abc";
String str2 = "감자";
System.out.println("바이트 배열의 길이: " + str.getBytes().length);
System.out.println("바이트 배열의 길이: " + str2.getBytes().length);
}
}
//바이트 배열의 길이: 3
//바이트 배열의 길이: 6
문자열 찾기(indexOf(), contains(), lastIndexOf())
indexOf()메소드는 매개값으로 주어진 문자열이 시작되는 인덱스를 리턴한다. 만약 주어진 문자열이 포함되어 있지 않으면 -1을 리턴한다.
public class Main{
public static void main(String[] args) {
String str = "이것은 문자열 입니다.";
System.out.println(str.indexOf("문자열"));
System.out.println(str.indexOf("가나다라마바사하"));
}
}
/*
4
-1
*/
위 예제에서 "이것은 문자열 입니다."에서 "문자열"이 시작되는 인덱스인 4가 리턴된 것이다. "가나다라마바사하"는 "이것은 문자열 입니다."에 포함되어 있지 않기 때문에 -1이 리턴된 것이다.
lastIndexOf() 메소드는 매개값으로 주어진 문자열이 끝나는 인덱스를 리턴한다. 만약 주어진 문자열이 포함되어 있지 않으면 -1을 리턴한다.
public static void main(String[] args) {
String text = "Hello, World! Hello";
String pattern = "Hello";
int lastIndex = text.lastIndexOf(pattern);
System.out.println("마지막으로 발견된 위치: " + lastIndex);
// 두 번째로 마지막으로 발견된 위치를 찾기
int secondLastIndex = text.lastIndexOf(pattern, lastIndex - 1);
System.out.println("두 번째로 마지막으로 발견된 위치: " + secondLastIndex);
}
contains()메소드는 매개값으로 주어진 문자열이 있다면 true, 없다면 false를 리턴한다.
public class Main{
public static void main(String[] args) {
String str = "이것은 문자열 입니다.";
System.out.println(str.contains("문자열"));
System.out.println(str.contains("가나다라마바사하"));
}
}
/*
true
false
*/
위 예제에서 "이것은 문자열 입니다."에서 "문자열"이 포함되어 있기 떄문에 true가 리턴된 것이다. "가나다라마바사하"는 "이것은 문자열 입니다."에 포함되어 있지 않기 때문에 false가 리턴된 것이다.
문자열 길이(length())
length()메소드는 문자열의 길이(문자의 수)를 리턴한다.(공백 포함)
public class Main{
public static void main(String[] args) {
String str = "이것은 문자열 입니다.";
System.out.println(str.length());
System.out.println("아무 문자열이나 입력하는 중입니다.".length());
}
}
/*
12
19
*/
문자열 대치(replace())
replace() 메소드는 첫 번째 매개값인 문자열을 찾아 두 번째 매개값인 문자열로 대치한 새로운 문자열을 생성하고 리턴한다.
String 객체의 문자열은 변경이 불가능한 특성을 갖기 때문에 replace() 메소드가 리턴하는 문자열은 원래 문자열의 수정본이 아니라 완전히 새로운 문자열이다.
public class Main{
public static void main(String[] args) {
String oldStr = "이 문자열은 문자열입니다.";
String newStr = oldStr.replace("문자열", "새로운 문자열");
System.out.println(oldStr);
System.out.println(newStr);
}
}
/*
이 문자열은 문자열입니다.
이 새로운 문자열은 새로운 문자열입니다.
*/
newStr이 참조하는 객체는 oldStr이 참조하는 객체와는 다른 객체이다.
문자열 잘라내기(substring())
substring() 메소드는 주어진 인덱스에서 문자열을 추출한다. 매개값의 수에 따라 두 가지 형태로 사용된다.
substring(int beginIndex)
substring(int beginIndex, int endIndex)
첫 번째는 주어진 인덱스부터 끝까지 문자열을 추출하고, 두 번째는 주어진 시작(포함)과 끝 인덱스(제외) 사이의 문자열을 추출한다.
public class Main{
public static void main(String[] args) {
String str = "가나다라마바사하자차카타파하";
System.out.println(str.substring(0,7));
System.out.println(str.substring(7));
}
}
/*
가나다라마바사
하자차카타파하
*/
str.substring(7)은 인덱스 7을 포함해서 문자열 끝까지 문자열을 추출한 것이다. str.substring(0,7)은 인덱스 0(포함) ~ 7(제외) 사이의 문자열을 추출한 것이다.
알파벳 소·대문자 변경(toLowerCase(), toUpperCase())
toLowerCase() 메소드는 문자열을 모두 소문자로 바꾼 새로운 문자열을 생성한 후 리턴한다. toUpperCase() 메소드는 문자열을 모두 대문자로 바꾼 새로운 문자열을 생성한 후 리턴한다.
split()메소드를 호출할 때 쉼표를 제공하면 분리된 문자열로 구성된 배열을 얻을 수 있다.
public class Main {
public static void main(String[] args) {
String board = "1,자바 학습,참조 타입 String을 학습합니다.,홍길동";
//문자열 분리
String[] tokens = board.split(",");
//인덱스별로 읽기
System.out.println("번호: " + tokens[0]);
System.out.println("제목: " + tokens[1]);
System.out.println("내용: " + tokens[2]);
System.out.println("성명: " + tokens[3]);
System.out.println();
//for 문을 이용한 읽기
for (int i = 0; i < tokens.length; i++) {
System.out.println(tokens[i]);
}
}
}
/*
번호: 1
제목: 자바 학습
내용: 참조 타입 String을 학습합니다.
성명: 홍길동
1
자바 학습
참조 타입 String을 학습합니다.
홍길동
*/
본 게시글은 유튜브 : 경제 TV 너무경 : 너무 쉬운 경제 윤성종 님의 유튜브 영상을 참고하였습니다. 개인적으로 정리하는 글임을 알립니다.
금융용어정리 - 무상증자
무상증자
주식을 발행하여, 주주에게 대가를 받지 않고 주식을 줌으로써 자본금을 늘리는 것을 말한다.
무상증자는 아래와 같은 특징을 가진다.
잉여금이 자본금으로 바뀌게 되어서 잉여금은 감소하고, 자본금은 증가한다. 자본은 불변
외부에서 자본잠식을 걱정할 필요 없이 잉여금이 충분히 있다고 인식하게 된다.
시가총액은 변함이 없다.(주가를 떨어트리기 때문에)
주식수가 많아지고 주가는 내려가서 유동성이 커지게 된다.
주식시장에서 호재로 작용한다.(2,4번 때문에)
1번, 2번 설명 예를 들어, 자본 5천만원(자본금 1천만원 + 잉여금 4천만원)이 있고, 액면가는 1000원이고, 주식은 총 1만 주가 있는 기업이 있다. 주주에게 1주당 1주를 무상증자 한다고 하면 주식의 수는 2만 주로 증가된다. 또한 잉여금 4천만원이 3천만원으로 감소하고, 자본금은 1천만원에서 2천만원으로 증가하게 된다. 잉여금을 자본금으로 변환한 것이다. 즉, 잉여금과 자본금은 변동이 있지만 자본은 그대로인 상태가 된다.
위와 같은 경우 무상증자를 하기 전보다 하고 난 후가 자본잠식의 위험성이 큰데, 그만큼 자본잠식을 걱정할 필요 없이 잉여금이 충분히 있다고 외부에서 인식하게 된다.
4번 설명 초코파이를 예로 들면, 초코파이에 들어가는 재료의 양은 똑같은데 전보다 많이 만들어야 된다면, 초코파이를 작게 만들 수밖에 없다. 이와 같이 시가총액은 변함이 없어야 하는데, 주식의 수가 많아졌으므로 주가를 떨어트릴 수밖에 없다 주가가 내려가면 매수를 할 때 부담감이 적어져서 유동성이 커진다.