no image
금융용어정리 - 권리락(신주배정기준일, 권리락기준가, 권리락적용일)
본 게시글은 유튜브 : 경제 TV 너무경 : 너무 쉬운 경제 윤성종 님의 유튜브 영상을 참고하였습니다. 개인적으로 정리하는 글임을 알립니다. 금융용어정리 - 권리락(신주배정기준일, 권리락기준가, 권리락적용일) 권리락 무상증자와 유상증자 등으로 인하여 신주배정일 이후에 주주 명부에 기재되어 신주인수권 등이 없어진 상태를 뜻한다. 신주 배정일 이전에 주식을 산 주주들에게는 신주인수권이 포함되어 있지만 이후에 주식을 산 주주들에게는 신주인수권이 없기 때문에 그만큼 저렴한 가격에 주가(권리락 기준가)를 책정하는 것이다. 쉽게 말하자면 기존 주가가 5천원이었는데 이 5천원에는 신주를 배정받을 권리가 있지만, 신주배정기준일 이후 주주 명부에 등재된 주주는 신주를 배정받을 권리가 없으므로 그만큼 저렴한 주가에 매도할..
2023.01.23
no image
[JAVA] Math 클래스(올림, 내림, 반올림, 절댓값, 난수 등)
본 게시글은 혼자 공부하는 자바 (저자 : 신용권)의 책과 유튜브 영상을 참고하였고, 개인적으로 정리하는 글임을 알립니다. java.lang.Math 클래스는 수학 계산에 사용할 수 있는 메소드를 제공하고 있다. Math 클래스가 제공하는 메소드는 모두 정적(static) 메소드이므로 바로 사용할 수 있다. Math.abs(a) 메소드 int abs(int a) double abs(double a) a의 절댓값을 리턴 int v1 = Math.abs(-5); //5 double v2 = Math.abs(-3.14); //3.14 Math.ceil(a) 메소드 double ceil(double a) a의 올림값을 리턴 double v3 = Math.ceil(5.3); //6.0 double v4 = Mat..
2023.01.23
no image
[JAVA] n진수 변환 알고리즘
Do it! 자료구조와 함께 배우는 알고리즘 입문[자바편] 연습문제와 실습문제입니다. 10진수를 n진수로 변환하는 방법을 모른다면 아래의 포스팅에서[10진수-n진수 변환] 부분을 읽고 오시는 것을 추천합니다. 2022.11.29 - [Math/이산수학] - 진수, 진법 변환, 보수 진수, 진법 변환, 보수 [진수] [10진수] 기수가 10인 수 0, 1, 2 ,3, 4, 5, 6 ,7, 8, 9 -> 10개 수로 표현 [2진수] 기수가 2인 수 0, 1 두개의 수로 표현 [8진수와 16진수] [8진수] 0~7까지 8개의 수로 표현 2진수 3자리는 8진수 1자리 2진수 rebugs.tistory.com 10진수를 2~36진수로 변환하는 알고리즘 static void cardConvR(int x, int r..
2023.01.23
no image
[JAVA] 배열 비교, 복사, 역순으로 복사 알고리즘
Do it! 자료구조와 함께 배우는 알고리즘 입문[자바편] 연습문제와 실습문제입니다. 배열 비교 두 배열의 모든 요소의 값이 같은지를 판단하는 알고리즘 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) { i..
2023.01.22
no image
[JAVA]Wrapper(포장) 클래스
본 게시글은 혼자 공부하는 자바 (저자 : 신용권)의 책과 유튜브 영상을 참고하였고, 개인적으로 정리하는 글임을 알립니다. 자바는 기본 타입 의 값을 갖는 객체를 생성할 수 있다. 이런 객체를 포장 객체라고 하는데, 포장 객체의 특징은 포장하고 있는 기본 타입 값은 외부에서 변경할 수 없다는 점이다. 만약 내부의 값을 변경하고 싶다면 새로운 포장 객체를 만들어야 한다. 박싱(Boxing)과 언박싱(Unboxing) 박싱 : 기본 타입의 값을 포장 객체로 만드는 과정 언박싱 : 포장 객체에서 기본 타입의 값을 얻어내는 과정 //Boxing Integer obj1 = new Integer(100); //생성자 이용 Integer obj2 = new Integer("200"); //생성자 이용 Integer ..
2023.01.22
no image
[JAVA] 배열 요소를 역순으로 정렬하는 알고리즘
Do it! 자료구조와 함께 배우는 알고리즘 입문[자바편] 연습문제와 실습문제입니다. 배열의 요소가 1, 2, 3, 4, 5, 6, 7 이렇게 7개 있다고 하면 역순으로 정렬하면 7, 6, 5, 4, 3, 2, 1이다. 그림에서 보는 것과 같이 요소들을 서로 바꿔주면 된다. 요소들을 바꿔주려면 먼저 swap함수를 정의해야한다. static void swap(int[] arr, int a, int b) //배열의 요소 값을 스왑 { int temp; temp = arr[a]; arr[a]= arr[b]; arr[b] = temp; } 매개변수 a와 b에 교환할 배열의 인덱스를 받고, 인덱스 a의 값과 인덱스 b의 값을 바꾼다.(swap) 이 swap 메소드를 응용해서 요소를 역순으로 정렬하는 알고리즘을 구..
2023.01.21
no image
[JAVA] String 클래스
본 게시글은 혼자 공부하는 자바 (저자 : 신용권)의 책과 유튜브 영상을 참고하였고, 개인적으로 정리하는 글임을 알립니다. String 생성자 소스상에서 문자열 리터럴은 String 객체로 자동 생성되지만, String 클래스의 다양한 생성자를 이용해서 직접 String 객체를 생성할 수도 있다. 어떤 생성자를 이용해서 String 객체를 생성할지는 제공되는 매개값의 타입에 달려있다. 아래는 사용 빈도수가 높은 생성자들이다. 파일의 내용을 읽거나, 네트워크를 통해 받은 데이터는 보통 byte [] 배열이므로 이것을 문자열로 변환하기 위해 사용된다. //배열 전체를 String 객체로 생성 String str = new String(byte[] bytes); //지정된 문자셋으로 디코딩 String str..
2023.01.21
no image
금융용어정리 - 무상증자
본 게시글은 유튜브 : 경제 TV 너무경 : 너무 쉬운 경제 윤성종 님의 유튜브 영상을 참고하였습니다. 개인적으로 정리하는 글임을 알립니다. 금융용어정리 - 무상증자 무상증자 주식을 발행하여, 주주에게 대가를 받지 않고 주식을 줌으로써 자본금을 늘리는 것을 말한다. 무상증자는 아래와 같은 특징을 가진다. 잉여금이 자본금으로 바뀌게 되어서 잉여금은 감소하고, 자본금은 증가한다. 자본은 불변 외부에서 자본잠식을 걱정할 필요 없이 잉여금이 충분히 있다고 인식하게 된다. 시가총액은 변함이 없다.(주가를 떨어트리기 때문에) 주식수가 많아지고 주가는 내려가서 유동성이 커지게 된다. 주식시장에서 호재로 작용한다.(2,4번 때문에) 1번, 2번 설명 예를 들어, 자본 5천만원(자본금 1천만원 + 잉여금 4천만원)이 있..
2023.01.20

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


금융용어정리 - 권리락(신주배정기준일, 권리락기준가, 권리락적용일)

권리락

무상증자와 유상증자 등으로 인하여 신주배정일 이후에 주주 명부에 기재되어 신주인수권 등이 없어진 상태를 뜻한다.

신주 배정일 이전에 주식을 산 주주들에게는 신주인수권이 포함되어 있지만 이후에 주식을 산 주주들에게는 신주인수권이 없기 때문에 그만큼 저렴한 가격에 주가(권리락 기준가)를 책정하는 것이다.

쉽게 말하자면 기존 주가가 5천원이었는데 이 5천원에는 신주를 배정받을 권리가 있지만, 신주배정기준일 이후 주주 명부에 등재된 주주는 신주를 배정받을 권리가 없으므로 그만큼 저렴한 주가에 매도할 수 있다.

신주인수권
증자를 위하여 신주가 발행되는 경우 우선적으로 인수를 청구할 수 있는 권리.
=신주를 배정받을 권리

 

신주배정기준일

주식회사가 신주를 발행할 때 신주를 배정 받을 자를 정하기 위해 특정한 날에 주주 명부에 기재된 주주를 신주배정을 받을 수 있는 권리인으로 확정하게 되는데 그 기준일을 신주배정기준일이라고 한다.

예를 들어
1월 24일이 신주배정기준일이라고 하면, 1월 24일 까지 주주명부에 등재되지 않으면 신주를 받을 수 없다.

 

권리락적용일

권리락이 적용되는 날짜를 말한다.

추가 설명
주식시장에서 주식을 매수하면 통장에서 그 즉시 돈이 빠져나갈지는 몰라도, 주주 명부에 기재되는데 까지는 최소 2 영업일이 소요된다. 
1월 24일이 신주배정기준일이라면 적어도 1월 22일에 주식을 매수해야 24일에 주주 명부에 기재될 수 있다.
1월 23일에 주식을 매수하면 24일에 주주 명부에 기재 될 수 없으므로(신주를 배정받을 수 없으므로), 권리락 기준일은 23일이 된다.

 

권리락 기준가

권리락으로 인하여 주가가 변동되는데, 기존 주가에서 변동된 주가를 뜻한다.

 

'금융 & 경제' 카테고리의 다른 글

금융용어정리 - 따상  (0) 2023.01.29
금융용어정리 - 주식발행초과금  (1) 2023.01.24
금융용어정리 - 무상증자  (0) 2023.01.20
금융용어정리 - 유상감자  (1) 2023.01.19
금융용어정리 - 무상감자  (0) 2023.01.18

본 게시글은 혼자 공부하는 자바 (저자 : 신용권)의 책과 유튜브 영상을 참고하였고, 개인적으로 정리하는 글임을 알립니다.


java.lang.Math 클래스는 수학 계산에 사용할 수 있는 메소드를 제공하고 있다. Math 클래스가 제공하는 메소드는 모두 정적(static) 메소드이므로 바로 사용할 수 있다.

 

Math.abs(a) 메소드

  • int abs(int a)
  • double abs(double a)

a의 절댓값을 리턴

int v1 = Math.abs(-5); //5
double v2 = Math.abs(-3.14); //3.14

 

Math.ceil(a) 메소드

  • double ceil(double a)

a의 올림값을 리턴

double v3 = Math.ceil(5.3); //6.0
double v4 = Math.ceil(-5.3); //-5.0

 

Math.floor(a) 메소드

  • double floor(double a)

a의 내림값을 리턴

double v5 = Math.floor(5.3); //5.0
double v6 = Math.floor(-5.3); //-6.0

 

 

Math.max(a, b) 메소드

  • int max(int a, int b)
  • double max(double a, double b)

a와 b 중 더 큰 값을 리턴

int v7 = Math.max(5, 9); //9
double v8 = Math.max(5.3, 2.5); //5.3

 

 

Math.min(a,b) 메소드

  • int min(int a, int b)
  • double min(double a, double b)

a와 b 중 더 작은 값을 리턴

int v9 = Math.min(5, 9); //5
double v10 = Math.min(5.3, 2.5); //2.5

 

 

Math.random() 메소드

0.0과 1.0 사이(0.0 포함, 1.0 미포함) 범위에 속하는 하나의 double 타입의 값을 리턴

double v11 = Math.random(); //0.47464615326686044

 

1부터 n까지 자연수를 추출하는 코드는 아래와 같다.

int num = (int) (Math.random()*n) + 1;

0부터 n까지 자연수를 추출하려면 위 코드에서 +1을 지워주면 된다.

 

Math.rint(a) 메소드

  • double rint(double a)

a의 가장 가까운 정수의 실수값을 리턴

double v12 = Math.rint(5.3); //5.0
double v13 = Math.rint(5.7); //6.0

 

 

Math.round(a) 메소드

  • long round(double a)

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
*/

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

 

10진수를 n진수로 변환하는 방법을 모른다면 아래의 포스팅에서[10진수-n진수 변환] 부분을 읽고 오시는 것을 추천합니다.

2022.11.29 - [Math/이산수학] - 진수, 진법 변환, 보수

 

진수, 진법 변환, 보수

[진수] [10진수] 기수가 10인 수 0, 1, 2 ,3, 4, 5, 6 ,7, 8, 9 -> 10개 수로 표현 [2진수] 기수가 2인 수 0, 1 두개의 수로 표현 [8진수와 16진수] [8진수] 0~7까지 8개의 수로 표현 2진수 3자리는 8진수 1자리 2진수

rebugs.tistory.com


10진수를 2~36진수로 변환하는 알고리즘

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
*/

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


배열 비교

두 배열의 모든 요소의 값이 같은지를 판단하는 알고리즘

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
*/

 

위 알고리즘이 이해가 안간다면 아래의 글을 읽는 것을 추천합니다.

2023.01.21 - [Data Structure & Algorithm] - [JAVA] 배열 요소를 역순으로 정렬하는 알고리즘

본 게시글은 혼자 공부하는 자바 (저자 : 신용권)의 책과 유튜브 영상을 참고하였고, 개인적으로 정리하는 글임을 알립니다.


자바는 기본 타입 의 값을 갖는 객체를 생성할 수 있다.

이런 객체를 포장 객체라고 하는데, 포장 객체의 특징은 포장하고 있는 기본 타입 값은 외부에서 변경할 수 없다는 점이다. 만약 내부의 값을 변경하고 싶다면 새로운 포장 객체를 만들어야 한다.

 

박싱(Boxing)과 언박싱(Unboxing)

  • 박싱 : 기본 타입의 값을 포장 객체로 만드는 과정
  • 언박싱 : 포장 객체에서 기본 타입의 값을 얻어내는 과정

 

//Boxing
Integer obj1 = new Integer(100); //생성자 이용
Integer obj2 = new Integer("200"); //생성자 이용
Integer obj3 = Integer.valueOf("300"); //valueOf() 메소드 이용

//Unboxing
int value1 = obj1.intValue();
int value2 = obj2.intValue();
int value3 = obj3.intValue();

System.out.println(value1);
System.out.println(value2);
System.out.println(value3);
/*
100
200
300
*/

위 예제에서 보는 것과 같이 박싱을 하는 방법은 생성자를 이용하는 방법과, valueOf() 메소드를 이용하는 방법이 있다.

언박싱을 하기 위해서는 각 포장 클래스마다 가지고 있는 기본타입이름 + Value() 메소드를 호출하면 된다.

 

 

자동 박싱과 언박싱

기본 타입 값을 직접 박싱, 언박싱하지 않아도 자동적으로 박싱과 언박싱이 일어나는 경우가 있다.

자동 박싱은 포장 클래스 타입에 기본값이 대입될 경우에 발생한다.

자동 언박싱은 기본 타입에 포장 객체가 대입되는 경우와 연산에서 발생한다.

//자동 Boxing
Integer obj = 100;
System.out.println("value: " + obj.intValue());

//대입 시 자동 Unboxing
int value = obj;  	
System.out.println("value: " + value);

//연산 시 자동 Unboxing
int result = obj + 100;
System.out.println("result: " + result);

/*
value: 100
value: 100
result: 200
*/

 

 

문자열을 기본 타입 값으로 변환

  • 포장 클래스의 주요 용도는 기본 타입의 값을 박싱 해서 포장 객체로 만드는 것이지만, 문자열을 기본 타입 값으로 변환할 때에도 많이 사용된다. 
  • 대부분의 포장 클래스에는 parse+기본 타입 이름으로 되어있는 정적 메소드가 있다. 정적 메소드는 문자열을 매개값으로 받아 기본 타입 값으로 변환한다.
int value1 = Integer.parseInt("10");
double value2 = Double.parseDouble("3.14");
boolean value3 = Boolean.parseBoolean("true");

System.out.println("value1: " + value1);
System.out.println("value2: " + value2);
System.out.println("value3: " + value3);

/*
value1: 10
value2: 3.14
value3: true
*/

 

문자열을 기본 타입 값으로 변환할 때 많이 쓰는 방법은 아래와 같다.

 

 

포장 값 비교

  • 포장 객체는 내부의 값을 비교하기 위해 ==와 != 연산자를 사용하지 않는 것이 좋다. 이 연산자는 내부의 값을 비교하는 것이 아니라 포장 객체의 참조를 비교하기 때문이다.
  • 포장 객체 내부의 값을 비교하려면 equals() 메소드를 이용하는 것이 좋다.

박싱 된 값이 다음 표에 나와 있는 범위의 값이라면 ==와 !=연산자로 내부의 값을 바로 비교할 수 있지만, 그 이외의 경우에는 언박싱한 값을 얻어서 비교를 하거나 equals() 메소드를 이용해야 한다.

 

예제 코드

System.out.println("[-128~127 초과값일 경우]");
Integer obj1 = 300;
Integer obj2 = 300;
System.out.println("==결과: " + (obj1 == obj2));
System.out.println("언박싱후 ==결과: " + (obj1.intValue() == obj2.intValue()));
System.out.println("equals() 결과: " + obj1.equals(obj2));
System.out.println();

System.out.println("[-128~127 범위값일 경우]");
Integer obj3 = 10;
Integer obj4 = 10;
System.out.println("==결과: " + (obj3 == obj4));
System.out.println("언박싱후 ==결과: " + (obj3.intValue() == obj4.intValue()));
System.out.println("equals() 결과: " + obj3.equals(obj4));

/*
[-128~127 초과값일 경우]
==결과: false
언박싱후 ==결과: true
equals() 결과: true

[-128~127 범위값일 경우]
==결과: true
언박싱후 ==결과: true
equals() 결과: true
*/

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


배열의 요소가 1, 2, 3, 4, 5, 6, 7 이렇게 7개 있다고 하면 역순으로 정렬하면 7, 6, 5, 4, 3, 2, 1이다.

 

 

그림에서 보는 것과 같이 요소들을 서로 바꿔주면 된다.

요소들을 바꿔주려면 먼저 swap함수를 정의해야한다.

static void swap(int[] arr, int a, int b) //배열의 요소 값을 스왑
	{
		int temp;
		temp = arr[a];
		arr[a]= arr[b];
		arr[b] = temp;
	}

매개변수 a와 b에 교환할 배열의 인덱스를 받고, 인덱스 a의 값과 인덱스 b의 값을 바꾼다.(swap)

 

이 swap 메소드를 응용해서 요소를 역순으로 정렬하는 알고리즘을 구현할 수 있다.

static void reverseArray(int[] arr) //배열 요소를 역순으로 정렬
	{
		for(int i = 0; i < arr.length/2; ++i)
		{
			swap(arr, i, arr.length - i-1);
		}
	}

arr.length(배열의 길이)가 홀수여도 상관없다. arr.length가 7이라고 가정하면 arr.length / 2 는 3이기 때문이다.(i는 int형 타입이기 때문에 3.5가 아니다.)

(arr.length(배열의 길이)가 짝수면 당연히 상관없음)

0부터 arr.length까지 반복을 진행하고, swap 메소드의 매개값에 배열, i, arr.length -i -1을 넘겨준다.

왜 이러한 매개값을 넘기는지는 아래와 같다.

  • 배열(arr) : 매개값으로 참조된 배열의 값을 정렬하기 위해
  • i : 배열(arr)의 i번째 인덱스의 값과 arr.length- i -1번째 인덱스의 값을 바꾸기 위해
  • arr.length -i -1 : 위와 동일

배열의 인덱스는 0부터 시작함을 염두하고 잘 생각해 보면 이해가 될 것이다.

 

위의 swap메소드와 reverseArray메소드를 합치면 아래와 같다.

static void reverseArray(int[] arr) //배열 요소를 역순으로 정렬
{
    for(int i = 0; i < arr.length/2; ++i)
    {
        int temp = arr[i];
        arr[i]= arr[arr.length - i-1];
        arr[arr.length - i-1] = temp;
    }
}

 

아래의 코드는 실행 예제이다.

public class Main{
	static void reverseArray(int[] arr) //배열 요소를 역순으로 정렬
	{
			
		for(int i = 0; i < arr.length/2; ++i)
		{
			int temp = arr[i];
			arr[i]= arr[arr.length - i-1];
			arr[arr.length - i-1] = temp;
		}
	}
	
	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};
		printArray(array);
		reverseArray(array);
		printArray(array);
	}
}
/*
1, 2, 3, 4, 5, 6, 7
7, 6, 5, 4, 3, 2, 1
*/

 

좀 더 자세히 스왑과정을 보여주는 예제
public class Main{
	static void swap(int[] arr, int a, int b) //배열의 요소 값을 스왑
	{
		int temp;
		temp = arr[a];
		arr[a]= arr[b];
		arr[b] = temp;
		System.out.println("Index " + a + "와(과) " + b + "를 교환");
		printArray(arr);
	}
	
	static void reverseArray(int[] arr) //배열 요소를 역순으로 정렬
	{
		for(int i = 0; i < arr.length/2; ++i)
		{
			swap(arr, i, arr.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};
		printArray(array);
		reverseArray(array);
		//printArray(array);
	}
}
/*
1, 2, 3, 4, 5, 6, 7
Index 0와(과) 6를 교환
7, 2, 3, 4, 5, 6, 1
Index 1와(과) 5를 교환
7, 6, 3, 4, 5, 2, 1
Index 2와(과) 4를 교환
7, 6, 5, 4, 3, 2, 1
*/​

본 게시글은 혼자 공부하는 자바 (저자 : 신용권)의 책과 유튜브 영상을 참고하였고, 개인적으로 정리하는 글임을 알립니다.


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바이트가 된다.

따라서 인코딩할 때 사용한 문자셋으로 디코딩을 해야만 한글이 올바르게 복원될 수 있다.

 

아래는 인코딩과 디코딩을 하는 예제이다.

import java.util.Arrays;

public class BytesToStringExample {
	public static void main(String[] args) throws Exception  {
		String data = "자바";
		
		//String -> byte 배열(기본: UTF-8 인코딩)
		byte[] arr1 = data.getBytes();
		//byte[] arr1 = data.getBytes("UTF-8");
		System.out.println("arr1: " + Arrays.toString(arr1));
		
		//byte 배열 -> String(기본: UTF-8 디코딩)
		String str1 = new String(arr1);
		//String str1 = new String(arr1, "UTF-8");
		System.out.println("str1: " + str1);
		
		//String -> byte 배열(EUC-KR 인코딩)
		byte[] arr2 = data.getBytes("EUC-KR");
		System.out.println("arr2: " + Arrays.toString(arr2));
		
		//byte 배열 -> String(기본: UTF-8 디코딩)
		String str2 = new String(arr2, "EUC-KR");
		System.out.println("str2: " + str2);
	}
}
/*
arr1: [-20, -98, -112, -21, -80, -108]
str1: 자바
arr2: [-64, -38, -71, -39]
str2: 자바
*/

 


String 메소드

문자 추출(charAt())

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())

종종 문자열을 바이트 배열로 변환하는 경우가 있다.

예를 들어 네트워크로 문자열을 전송하거나, 문자열을 암호화할 때 문자열을 바이트 배열로 변환하는 경우가 있다.

문자열을 바이트 배열로 변환하는 메소드는 다음 두 가지가 있다.

  1. byte[] bytes = "문자열".getBytes();
  2. byte[] bytes = "문자열".getBytes(Charset charset);

getBytes() 메소드는 시스템의 기본 문자셋으로 인코딩된 바이트 배열을 리턴한다.

만약 특정 문자셋으로 인코딩된 바이트 배열을 얻으려면 두 번째 메소드를 사용하면 된다.

import java.io.UnsupportedEncodingException;
public class Main{
	public static void main(String[] args) {
		String str = "문자열예제";
		
		byte[] bytes1 = str.getBytes(); //인코딩
		System.out.println("bytes1.length: " + bytes1.length);
		String str1 = new String(bytes1); //디코딩
		System.out.println("bytes1->String: " + str1);
		
		try {
			
			byte[] bytes2 = str.getBytes("EUC-KR"); //인코딩
			System.out.println("bytes2.length: " + bytes2.length);
			String str2 = new String(bytes2, "EUC-KR"); //디코딩
			System.out.println("bytes2->String: " + str2);
			
			
			byte[] bytes3 = str.getBytes("UTF-8"); //인코딩
			System.out.println("bytes3.length: " + bytes3.length);
			String str3 = new String(bytes3, "UTF-8"); //디코딩
			System.out.println("bytes3->String: " + str3);		
			
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
	}
}
/*
bytes1.length: 15
bytes1->String: 문자열예제
bytes2.length: 10
bytes2->String: 문자열예제
bytes3.length: 15
bytes3->String: 문자열예제
*/

어떤 문자셋으로 인코딩하느냐에 따라 바이트 배열의 크기가 달라지는데, 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() 메소드는 주어진 인덱스에서 문자열을 추출한다. 매개값의 수에 따라 두 가지 형태로 사용된다.

  1. substring(int beginIndex)
  2. 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() 메소드는 문자열을 모두 대문자로 바꾼 새로운 문자열을 생성한 후 리턴한다.

public class Main{
	public static void main(String[] args) {
		String str = "Java Programming";
		String lower = str.toLowerCase();
		String upper = str.toUpperCase();
		System.out.println(str);
		System.out.println(lower);
		System.out.println(upper);
		
	}
}
/*
Java Programming
java programming
JAVA PROGRAMMING
*/

문자열 앞뒤 공백 잘라내기(trim())

trim() 메소드는 문자열 앞뒤 공백을 제거한 새로운 문자열을 생성하고 리턴한다.
trim() 메소드는 앞뒤 공백만 제거할 뿐 중간의 공백은 제거하지 않는다.

public class Main{
	public static void main(String[] args) {
		String tel1 ="   02";
		String tel2 ="123     ";
		String tel3 ="   4567    ";
		String tel = tel1.trim() + tel2.trim() + tel3.trim();
		System.out.println(tel);
	}
}
/*
021234567
*/

문자열 변환(valueOf())

valueOf() 메소드는 기본 타입의 값을 문자열로 변환하는 기능을 가지고 있다.
String 클래스에는 매개 변수의 타입별로 valueOf() 메소드가 아래와 같이 오버로딩되어 있다.

static String valueOf(boolean b)
static String valueOf(char c)
static String valueOf(int i)
static String valueOf(long l)
static String valueOf(double d)
static String valueOf(float f)

 
아래는 실행 예제

public class Main{
	public static void main(String[] args) {
		String str1 = String.valueOf(10);
		String str2 = String.valueOf(10.5);
		String str3 = String.valueOf(true);
		System.out.println(str1);
		System.out.println(str2);
		System.out.println(str3);
	}
}
/*
10
10.5
true
*/

문자열 분리(split())

문자열이 구분자를 사용하여 여러 개의 문자열로 구성되어 있을 경우, 이를 따로 분리해서 얻고 싶다면 split()메소드를 사용한다.

String board = "번호, 제목, 내용, 성명";
String[] arr = board.split(",");

board는 쉼표로 구분된 문자열을 가지고 있다.

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 너무경 : 너무 쉬운 경제 윤성종 님의 유튜브 영상을 참고하였습니다. 개인적으로 정리하는  글임을 알립니다.


금융용어정리 - 무상증자

무상증자

주식을 발행하여, 주주에게 대가를 받지 않고 주식을 줌으로써 자본금을 늘리는 것을 말한다.

무상증자는 아래와 같은 특징을 가진다.

  1. 잉여금이 자본금으로 바뀌게 되어서 잉여금은 감소하고, 자본금은 증가한다. 자본은 불변
  2. 외부에서 자본잠식을 걱정할 필요 없이 잉여금이 충분히 있다고 인식하게 된다.
  3. 시가총액은 변함이 없다.(주가를 떨어트리기 때문에)
  4. 주식수가 많아지고 주가는 내려가서 유동성이 커지게 된다.
  5. 주식시장에서 호재로 작용한다.(2,4번 때문에)
1번, 2번 설명
예를 들어, 자본 5천만원(자본금 1천만원 + 잉여금 4천만원)이 있고, 액면가는 1000원이고, 주식은 총 1만 주가 있는 기업이 있다.
주주에게 1주당 1주를 무상증자 한다고 하면
주식의 수는 2만 주로 증가된다. 또한 잉여금 4천만원이 3천만원으로 감소하고, 자본금은 1천만원에서 2천만원으로 증가하게 된다.
잉여금을 자본금으로 변환한 것이다. 즉, 잉여금과 자본금은 변동이 있지만 자본은 그대로인 상태가 된다.

위와 같은 경우 무상증자를 하기 전보다 하고 난 후가 자본잠식의 위험성이 큰데, 그만큼 자본잠식을 걱정할 필요 없이 잉여금이 충분히 있다고 외부에서 인식하게 된다. 
4번 설명
초코파이를 예로 들면, 초코파이에 들어가는 재료의 양은 똑같은데 전보다 많이 만들어야 된다면, 초코파이를 작게 만들 수밖에 없다. 이와 같이 시가총액은 변함이 없어야 하는데, 주식의 수가 많아졌으므로 주가를 떨어트릴 수밖에 없다 
주가가 내려가면 매수를 할 때 부담감이 적어져서 유동성이 커진다.