Edited, memorised or added to reading queue

on 03-Oct-2017 (Tue)

Do you want BuboFlash to help you learning these things? Click here to log in or create user.

Flashcard 1621036764428

Tags
#cashflow-statement
Question
Free cash flow = [...]
Answer
CFO - Capex

statusnot learnedmeasured difficulty37% [default]last interval [days]               
repetition number in this series0memorised on               scheduled repetition               
scheduled repetition interval               last repetition or drill

Subject 3. Cash Flow Statement Analysis
sential to the ongoing nature of the business. The basic definition is cash from operations less the amount of capital expenditures required to maintain the company's present productive capacity. <span>Free cash flow = CFO - capital expenditure Free Cash Flow to the Firm (FCFF): Cash available to shareholders and bondholders after taxes, capital investment, and WC investment. FCF







5-2 메쏘드
#has-images #메쏘드

05-2 메소드 (Method)

보통 다른언어에는 함수라는 것이 별도로 존재한다. 하지만 자바는 클래스를 떠나 존재하는 것은 있을 수 없기 때문에 자바의 함수는 따로 존재하지 않고 클래스 내에 존재한다. 자바는 이 클래스 내의 함수를 메소드라고 부른다.

※ 보통 함수와 메소드가 공존하는 언어(예:파이썬)에서는 두 개를 구분하여 말하기도 하지만 자바는 보통 메소드와 함수를 구분하여 말하지 않는다. 다만 자바에서 사용되는 함수의 정확한 명칭은 메소드이다.

메소드에 대해서 이미 알아 보았지만 이곳에서는 입출력 위주로 메소드에 대해서 좀 더 자세히 알아보기로 하자.

메소드를 설명하기 전에 믹서기를 생각해보자. 우리는 믹서기에 과일을 넣는다. 그리고 믹서를 이용해서 과일을 갈아서 과일 쥬스를 만들어 낸다. 우리가 믹서기에 넣는 과일은 입력이 되고 과일 쥬스는 그 출력(리턴값)이 된다. 그렇다면 믹서기는 무엇인가?

바로 우리가 여기서 알고자 하는 메소드이다. 입력을 가지고 어떤 일을 수행한 다음에 결과물을 내어놓는 것, 이것이 메소드가 하는 일이다.

메소드를 사용하는 이유?

가끔 프로그래밍을 하다 보면 똑같은 내용을 자신이 반복해서 적고 있는 것을 발견할 때가 있다. 이 때가 바로 메소드가 필요한 때이다. 여러 번 반복해서 사용된다는 것은 언제고 또다시 사용할 만한 가치가 있는 부분이라는 뜻이다. 즉, 이러한 경우 이것을 한 뭉치로 묶어서 “어떤 입력값을 주었을 때 어떤 리턴값을 돌려준다”라는 식의 메소드를 작성하는 것이 현명한 일일 것이다.

가장 간단하지만 많은 것을 설명해 주는 다음의 예를 보도록 하자.

public int sum(int a, int b) {
    return a+b;
}

위 메소드의 의미는 다음과 같이 정의된다.

“sum이라는 메소드는 입력값으로 두개의 값(int 자료형 a, int 자료형 b)을 받으며 리턴값은 두 개의 입력값을 더한 값(int 자료형)이다.”

여기서 return은 메소드의 결과 값을 돌려주는 명령어이다. 직접 위의 메소드를 만들어 보고 사용해 보자.

Test.java

public class Test {
    public int sum(int a, int b) {
        return a+b;
    }

    public static void main(String[] args) {
        int a = 3;
        int b = 4;

        Test myTest = new Test();
        int c = myTest.sum(a, b);

        System.out.println(c);
    }
}

위 코드는 sum메소드에 3, 4 라는 입력값을 전달하여 7이라는 값을 돌려받는 예제이다.

실행해보면 7이라는 값이 출력되는 것을 확인할 수 있다.

7

메소드의 입력값과 리턴값

프로그래밍을 공부할 때 어려운 부분 중 하나가 용어의 혼용이라고 할 수 있다. 많은 원서들을 보기도 하고 누군가의 번역본을 보기도 하면서 우리는 갖가지 용어들을 익힌다. 입력 값을 다른 말로 메소드의 인수, 입력인수 등으로 말하기도 하고 리턴 값을 출력 값, 결과 값, 돌려주는 값 등으로 말하기도 한다. 이렇듯 많은 용어들이 다른 말로 표현되지만 의미는 동일한 경우가 많다. 이런 것들에 대해 기억해 놓아야만 머리가 덜 아플 것이다.

메소드는 들어온 입력값을 가지고 어떤 처리를 하여 적절한 리턴값을 돌려주는 블랙박스와 같다.

입력값 ---> 메소드(블랙박스) ----> 리턴값

메소드에 들어오는 입력값과 리턴값에 대해서 자세히 알아보도록 하자.

메소드의 구조

자바의 메소드 구조는 아래와 같다.

public 리턴자료형 메소드명(입력자료형1 입력변수1, 입력자료형2 입력변수2, ...) {
    ...    
    return 리턴값;  // 리턴자료형이 void 인 경우에는 return 문이 필요없다.
}

리턴자료형은 메소드 수행 후 돌려줄 값의 자료형을 의미한다. 메소드의 리턴값은 return 이라는 명령을 사용한다.

메소드는 입출력 유무에 따라 다음과 같이 4가지로 분류할 수 있다.

  • 입력과 출력이 모두 있는 메소드
  • 입력과 출력이 모두 없는 메소드
  • 입력은 없고 출력은 있는 메소드
  • 입력은 있고 출력은 없는 메소드

이것들에 대해서 자세히 알아보도록 하자.

평범한 메소드

입력 값이 있고 리턴값이 있는 메소드가 평범한 메소드이다.

평범한 메소드의 전형적인 예를 한번 보도록 하자.

public int sum(int a, int b) {
    return a+b;
}

sum 메소드의 입출력 자료형은 다음과 같다.

  • 입력 값 - int 자료형 a, int 자료형 b
  • 리턴 값 - int 자료형

sum 메소드는 두 개의 입력값을 받아서 서로 더한 결과값을 돌려주는 메소드이다.

위처럼 입력값과 리턴값이 있는 메소드는 다음처럼 사용된다.

리턴값받을변수 = 객체.메소드명(입력인수1, 입력인수2, ...)

실제코드의 예는 다음과 같다.

Test myTest = new Test();
int c = myTest.sum(a, b);

위에서 보듯이 myTest.sum(a,b) 호출 후 리턴값을 저장하는 c 의 자료형은 int 로 해야만 한다. 왜냐하면 sum 메소드의 리턴타입이 int로 되어 있기 때문이다. sum 메소드의 리턴타입은 public int sum(int a, int b) { ... 에서 보듯이 메소드명(sum) 바로 좌측에 표기하도록 되어 있다.

입력값이 없는 메소드

입력값이 없는 메소드가 존재할까? 당연히 그렇다. 다음을 보자.

public String say() {
    return "Hi";
}

say 메소드의 입출력 자료형은 다음과 같다.

  • 입력 값 - 없음
  • 리턴 값 - String 자료형

say라는 이름의 메소드를 만들었다. 하지만 입력 인수부분을 나타내는 괄호 안이 비어있다.

이 메소드는 어떻게 쓸 수 있을까? 다음과 같이 따라해 보자.

Test myTest = new Test();
String a = myTest.say();
System.out.println(a);

위의 메소드를 쓰기 위해서

...
statusnot read reprioritisations
last reprioritisation on suggested re-reading day
started reading on finished reading on




#메쏘드
보통 함수와 메소드가 공존하는 언어(예:파이썬)에서는 두 개를 구분하여 말하기도 하지만 자바는 보통 메소드와 함수를 구분하여 말하지 않는다.
statusnot read reprioritisations
last reprioritisation on suggested re-reading day
started reading on finished reading on

5-2 메쏘드
05-2 메소드 (Method) 보통 다른언어에는 함수라는 것이 별도로 존재한다. 하지만 자바는 클래스를 떠나 존재하는 것은 있을 수 없기 때문에 자바의 함수는 따로 존재하지 않고 클래스 내에 존재한다. 자바는 이 클래스 내의 함수를 메소드라고 부른다. ※ 보통 함수와 메소드가 공존하는 언어(예:파이썬)에서는 두 개를 구분하여 말하기도 하지만 자바는 보통 메소드와 함수를 구분하여 말하지 않는다. 다만 자바에서 사용되는 함수의 정확한 명칭은 메소드이다. 메소드에 대해서 이미 알아 보았지만 이곳에서는 입출력 위주로 메소드에 대해서 좀 더 자세히 알아보기로 하자. 메소드를 설명하기 전에 믹서기를 생각해보자. 우리는 믹서기에 과일을 넣는다. 그리고 믹서를 이용해서 과일을




#메쏘드
return 문만을 써서 메소드를 빠져나가는 이 방법은 리턴자료형이 void형인 메소드에만 해당된다. 리턴자료형이 명시되어 있는 메소드에서 return 문만 작성하면 컴파일 시 오류가 발생한다.)
statusnot read reprioritisations
last reprioritisation on suggested re-reading day
started reading on finished reading on

5-2 메쏘드
출력한다는 것과 리턴값이 있다는 것은 전혀 다른 말이다. 혼동하지 말도록 하자, 메소드의 리턴값은 오로지 return문에 의해서만 생성된다. 이 메소드는 입력값으로 'fool'이라는 값이 들어오면 문자열을 출력하지 않고 메소드를 즉시 빠져나간다. 이렇게 메소드 수행 시 특정 조건에 따라 메소드를 즉시 빠져나가고 싶은 경우 return 문을 이용하면 된다. 이 방법은 실제 프로그래밍에서 자주 쓰인다. (참고. <span>return 문만을 써서 메소드를 빠져나가는 이 방법은 리턴자료형이 void형인 메소드에만 해당된다. 리턴자료형이 명시되어 있는 메소드에서 return 문만 작성하면 컴파일 시 오류가 발생한다.) 메소드 내에서 선언된 변수의 효력 범위 메소드안에서 사용하는 변수의 이름을 메소드 밖에서 사용한 이름과 동일하게 사용한다면 어떻게 될까? 이런 궁금증이 떠올랐던 독자라면 이곳에서 확실하게 알 수 있을 것이다. 아래의 예를 보자.




#메쏘드

아래의 예를 보자.

class Test { 
	public void vartest(int a) { 
    	a++; 
    } 
    public static void main(String[] args) {
        int a = 1; 
		Test myTest = new Test(); 
        myTest.vartest(a); 
        System.out.println(a); 
    }
}

위 예제의 vartest 메소드는 입력으로 들어온 int 자료형의 값을 1만큼 증가시키는 역할을 한다.
// 그러나 a가 전달되는 것이 아니다.

statusnot read reprioritisations
last reprioritisation on suggested re-reading day
started reading on finished reading on

5-2 메쏘드
는 이 방법은 리턴자료형이 void형인 메소드에만 해당된다. 리턴자료형이 명시되어 있는 메소드에서 return 문만 작성하면 컴파일 시 오류가 발생한다.) 메소드 내에서 선언된 변수의 효력 범위 메소드안에서 사용하는 변수의 이름을 메소드 밖에서 사용한 이름과 동일하게 사용한다면 어떻게 될까? 이런 궁금증이 떠올랐던 독자라면 이곳에서 확실하게 알 수 있을 것이다. <span>아래의 예를 보자. class Test { public void vartest(int a) { a++; } public static void main(String[] args) { int a = 1; Test myTest = new Test(); myTest.vartest(a); System.out.println(a); } } 위 예제의 vartest 메소드는 입력으로 들어온 int 자료형의 값을 1만큼 증가시키는 역할을 한다. main메소드를 순서대로 분석해 보자. 먼저 main메소드에서 a라는 int 자료형의 변수를 생성하고 1을 대입했다. 그리고 vartest 메소드를 입력 값 a를 주어 호출했다. 그 다음에 a의 값을 출력하게 하였다. 당연히 vartest 메소드에서 a의 값을 1만큼 증가시켰으니 2가




#메쏘드
만약 vartest의 입력값이 int 자료형이 아닌 객체였다면 얘기가 다르다. 객체를 메소드의 입력으로 넘기고 메소드가 객체의 속성값(객체변수 값)을 변경한다면 메소드 수행 이후에도 객체는 변경된 속성값을 유지한다. 이러한 차이가 나는 이유는 메소드에 전달하는 입력 자료형의 형태 때문인데 메소드에 값을 전달하느냐 아니면 객체를 전달하느냐에 따라 차이가 난다.
statusnot read reprioritisations
last reprioritisation on suggested re-reading day
started reading on finished reading on

5-2 메쏘드
artest메소드는 다음처럼 변수이름을 b로한 vartest와 기능적으로 완전히 동일하다. public void vartest(int b) { b++; } 즉 메소드에서 쓰이는 변수는 메소드 밖의 변수이름들과는 전혀 상관 없다. 그래서 이렇게 메소드 내에서만 쓰이는 변수를 로컬 변수(local variable)라고도 말한다. ※ <span>만약 vartest의 입력값이 int 자료형이 아닌 객체였다면 얘기가 다르다. 객체를 메소드의 입력으로 넘기고 메소드가 객체의 속성값(객체변수 값)을 변경한다면 메소드 수행 이후에도 객체는 변경된 속성값을 유지한다. 이러한 차이가 나는 이유는 메소드에 전달하는 입력 자료형의 형태 때문인데 메소드에 값을 전달하느냐 아니면 객체를 전달하느냐에 따라 차이가 난다. 그렇다면 vartest라는 메소드를 이용해서 메소드 외부의 a를 1만큼 증가시킬 수 있는 방법은 없을까? 다음과 같이 vartest메소드와 main메소드를 변경해 보자. public int vartest(int a) { a++;




#메쏘드

렇다면 vartest라는 메소드를 이용해서 메소드 외부의 a를 1만큼 증가시킬 수 있는 방법은 없을까?

다음과 같이 vartest메소드와 main메소드를 변경해 보자.


public class Test{

public int vartest(int a) {
    	a++;
        return a;
    }
public static void main(String[] args) {
    	int a = 1;
        Test myTest = new Test();
        a = myTest.vartest(a);
        System.out.println(a);
    }
}

해법은 위 예처럼 vartest메소드에 return문을 이용하는 방법이다. vartest 메소드는 입력으로 들어온 값을 1만큼 증가시켜 리턴한다. 따라서 a = myTest.vartest(a)처럼 하면 a의 값은 다시 vartest메소드의 리턴값으로 대입된다. (1만큼 증가된 값으로 a의 값이 변경된다.)
//myTest.a 는 아무런 변화가 없이 0인 상태로 있게 된다.

statusnot read reprioritisations
last reprioritisation on suggested re-reading day
started reading on finished reading on

5-2 메쏘드
13; ※ 만약 vartest의 입력값이 int 자료형이 아닌 객체였다면 얘기가 다르다. 객체를 메소드의 입력으로 넘기고 메소드가 객체의 속성값(객체변수 값)을 변경한다면 메소드 수행 이후에도 객체는 변경된 속성값을 유지한다. 이러한 차이가 나는 이유는 메소드에 전달하는 입력 자료형의 형태 때문인데 메소드에 값을 전달하느냐 아니면 객체를 전달하느냐에 따라 차이가 난다. 그<span>렇다면 vartest라는 메소드를 이용해서 메소드 외부의 a를 1만큼 증가시킬 수 있는 방법은 없을까? 다음과 같이 vartest메소드와 main메소드를 변경해 보자. public int vartest(int a) { a++; return a; } public static void main(String[] args) { int a = 1; Test myTest = new Test(); a = myTest.vartest(a); System.out.println(a); } 해법은 위 예처럼 vartest메소드에 return문을 이용하는 방법이다. vartest 메소드는 입력으로 들어온 값을 1만큼 증가시켜 리턴한다. 따라서 a = myTest.vartest(a) 처럼 하면 a의 값은 다시 vartest메소드의 리턴값으로 대입된다. (1만큼 증가된 값으로 a의 값이 변경된다.) 이번에는 아까 잠깐 언급한 객체를 넘기는 방법에 대해서 알아보자. 다음의 예를 보자. public class Test { int a; // 객체변수 a public void vartest(Test test) { te




#메쏘드

다음의 예를 보자.


public class Test { 
	int a; // 객체변수 a 
    
    public void vartest(Test test) { 
    	test.a++; 
    } 
    
    public static void main(String[] args) { 
    	Test myTest = new Test(); 
        myTest.a = 1; 
        myTest.vartest(myTest); 
        System.out.println(myTest.a); 
     }
}
//객체를 전달하여서 객체를 직접 수정
statusnot read reprioritisations
last reprioritisation on suggested re-reading day
started reading on finished reading on

5-2 메쏘드
#13; 해법은 위 예처럼 vartest메소드에 return문을 이용하는 방법이다. vartest 메소드는 입력으로 들어온 값을 1만큼 증가시켜 리턴한다. 따라서 a = myTest.vartest(a) 처럼 하면 a의 값은 다시 vartest메소드의 리턴값으로 대입된다. (1만큼 증가된 값으로 a의 값이 변경된다.) 이번에는 아까 잠깐 언급한 객체를 넘기는 방법에 대해서 알아보자. <span>다음의 예를 보자. public class Test { int a; // 객체변수 a public void vartest(Test test) { test.a++; } public static void main(String[] args) { Test myTest = new Test(); myTest.a = 1; myTest.vartest(myTest); System.out.println(myTest.a); } } 이전 예제에서는 a 라는 int 자료형 변수를 main메서드에 선언했는데 위 예제에는 다음과 같이 Test 클래스의 객체변수로 선언했다. int a; // 객체변수 a 그리고 vartest 메소드는 다음과 같이 Test클래스의 객체를 입력받아 해




#메쏘드
메소드의 입력항목이 값인지 객체인지를 구별하는 기준은 입력항목의 자료형이 primitive 자료형인지 아닌지에 따라 나뉜다. int 자료형과 같은 primitive 자료형인 경우 값이 전달되는 것이고 그 이외의 경우(reference 자료형)는 객체가 전달된다.
statusnot read reprioritisations
last reprioritisation on suggested re-reading day
started reading on finished reading on

5-2 메쏘드
었는데 vartest 메소드 실행 후 1만큼 증가되어 2라는 값이 출력되는 것을 확인할 수 있다. 여기서 주목해야 하는 부분은 vartest메소드의 입력 파라미터가 값이 아닌 Test클래스의 객체라는데 있다. 이렇게 메소드가 객체를 전달 받으면 메소드 내의 객체는 전달받은 객체 그 자체로 수행된다. 따라서 입력으로 전달받은 myTest 객체의 객체변수 a의 값이 증가하게 되는 것이다. <span>메소드의 입력항목이 값인지 객체인지를 구별하는 기준은 입력항목의 자료형이 primitive 자료형인지 아닌지에 따라 나뉜다. int 자료형과 같은 primitive 자료형인 경우 값이 전달되는 것이고 그 이외의 경우(reference 자료형)는 객체가 전달된다. 위 예제에는 다음과 같은 문장이 있다. myTest.vartest(myTest); myTest라는 객체를 이용하여 vartest라는 메소드를 호출할 경우 굳이 myTest라는 객체를 전달할 필요




#메쏘드

myTest라는 객체를 이용하여 vartest라는 메소드를 호출할 경우 굳이 myTest라는 객체를 전달할 필요가 없다. 왜냐하면 전달하지 않더라도 vartest 메소드는 this라는 키워드를 이용하여 객체에 접근할 수 있기 때문이다. this를 이용하여 vartest메소드를 수정한 버전은 다음과 같다.


public class Test { 
	int a; // 객체변수 a 
    
    public void vartest() { 
    	this.a++; 
    } 
    
    public static void main(String[] args) { 
    	Test myTest = new Test(); 
        myTest.a = 1; 
        myTest.vartest(); 
        System.out.println(myTest.a); 
    }
}
statusnot read reprioritisations
last reprioritisation on suggested re-reading day
started reading on finished reading on

5-2 메쏘드
준은 입력항목의 자료형이 primitive 자료형인지 아닌지에 따라 나뉜다. int 자료형과 같은 primitive 자료형인 경우 값이 전달되는 것이고 그 이외의 경우(reference 자료형)는 객체가 전달된다. 위 예제에는 다음과 같은 문장이 있다. myTest.vartest(myTest); <span>myTest라는 객체를 이용하여 vartest라는 메소드를 호출할 경우 굳이 myTest라는 객체를 전달할 필요가 없다. 왜냐하면 전달하지 않더라도 vartest 메소드는 this라는 키워드를 이용하여 객체에 접근할 수 있기 때문이다. this를 이용하여 vartest메소드를 수정한 버전은 다음과 같다. public class Test { int a; // 객체변수 a public void vartest() { this.a++; } public static void main(String[] args) { Test myTest = new Test(); myTest.a = 1; myTest.vartest(); System.out.println(myTest.a); } } <span><body><html>




05-3 Call by value
#자바

05-3 Call by value

메소드에 값(primitive type)을 전달하는 것과 객체(reference type)를 전달하는 것에는 큰 차이가 있다. 이것은 매우 중요하기 때문에 이전에 잠깐 언급했지만 다시한번 자세히 알아보도록 하자.

결론부터 얘기한다면 메소드로 객체를 전달할 경우 메소드에서 객체의 객체변수(속성) 값을 변경할 수 있게 된다.

다음의 예제를 보자.

Counter.java

class Updator {
    public void update(int count) {
        count++;
    }
}

public class Counter {
    int count = 0;  // 객체변수
    public static void main(String[] args) {        
        Counter myCounter = new Counter();        
        System.out.println("before update:"+myCounter.count);
        Updator myUpdator = new Updator();
        myUpdator.update(myCounter.count);
        System.out.println("after update:"+myCounter.count);
    }
}

Counter.java라는 파일 내에 Updator와 Counter라는 클래스 2개가 등장했다. 이것은 조금 특이하지만 물론 가능한 코드이다. 하나의 java파일내에는 여러개의 클래스를 선언할 수 있다. 단 파일명이 Counter.java라면 Counter.java 내의 Counter라는 클래스는 public 으로 선언하라는 관례(규칙)가 있다.

Updator 클래스는 전달받은 숫자를 1만큼 증가시키는 update라는 메소드를 가지고 있다. Counter 클래스는 count라는 객체변수를 가지고 있다. Counter클래스의 main메소드는 Counter클래스에 의해 생성된 객체의 객체변수 count의 값을 Updator클래스를 이용하여 증가시키려고 시도하는 예제이다.

실행 해 보면 다음과 같은 결과 값이 나온다.

before update:0
after update:0

객체 변수 count의 값을 update메소드에 넘겨서 변경시키더라도 값에 변화가 없다. 그 이유는 이전 챕터에서 알아본 것과 같이 update 메소드는 값(int 자료형)을 전달받았기 때문이다.

이제 예제를 다음과 같이 변경 해 보자.

class Updator {
    public void update(Counter counter) {
        counter.count++;
    }
}

public class Counter {
    int count = 0;
    public static void main(String[] args) {
        Counter myCounter = new Counter();
        System.out.println("before update:"+myCounter.count);
        Updator myUpdator = new Updator();
        myUpdator.update(myCounter);
        System.out.println("after update:"+myCounter.count);
    }
}

이전 예제와의 차이점은 update 메소드의 입력항목이다. 이전에는 int count와 같이 값을 전달받았다면 지금은 Counter counter와 같이 객체를 전달받도록 변경한 것이다.

update 메소드를 호출하는 부분도 다음처럼 바뀌었다.

myUpdator.update(myCounter);

이제 변경된 클래스를 실행 해 보면 다음과 같은 결과가 출력된다.

before update:0
after update:1

myCounter 객체의 count 값이 1만큼 증가되었다.

이렇게 메소드의 입력으로 객체를 전달받는 경우에는 메소드가 입력받은 객체를 그대로 사용하기 때문에 메소드가 객체의 속성값을 변경하면 메소드 수행 후 객체의 변경된 속성값이 유지되게 된다.


statusnot read reprioritisations
last reprioritisation on suggested re-reading day
started reading on finished reading on




#자바

메소드에 값(primitive type)을 전달하는 것과 객체(reference type)를 전달하는 것에는 큰 차이가 있다. 이것은 매우 중요하기 때문에 이전에 잠깐 언급했지만 다시한번 자세히 알아보도록 하자.

결론부터 얘기한다면 메소드로 객체를 전달할 경우 메소드에서 객체의 객체변수(속성) 값을 변경할 수 있게 된다.

statusnot read reprioritisations
last reprioritisation on suggested re-reading day
started reading on finished reading on

05-3 Call by value
05-3 Call by value 메소드에 값(primitive type)을 전달하는 것과 객체(reference type)를 전달하는 것에는 큰 차이가 있다. 이것은 매우 중요하기 때문에 이전에 잠깐 언급했지만 다시한번 자세히 알아보도록 하자. 결론부터 얘기한다면 메소드로 객체를 전달할 경우 메소드에서 객체의 객체변수(속성) 값을 변경할 수 있게 된다. 다음의 예제를 보자. Counter.java class Updator { public void update(int count) { count++; } } public class Counter { int count




#자바
이렇게 메소드의 입력으로 객체를 전달받는 경우에는 메소드가 입력받은 객체를 그대로 사용하기 때문에 메소드가 객체의 속성값을 변경하면 메소드 수행 후 객체의 변경된 속성값이 유지되게 된다.
statusnot read reprioritisations
last reprioritisation on suggested re-reading day
started reading on finished reading on

05-3 Call by value
pdate 메소드를 호출하는 부분도 다음처럼 바뀌었다. myUpdator.update(myCounter); 이제 변경된 클래스를 실행 해 보면 다음과 같은 결과가 출력된다. before update:0 after update:1 myCounter 객체의 count 값이 1만큼 증가되었다. <span>이렇게 메소드의 입력으로 객체를 전달받는 경우에는 메소드가 입력받은 객체를 그대로 사용하기 때문에 메소드가 객체의 속성값을 변경하면 메소드 수행 후 객체의 변경된 속성값이 유지되게 된다. <span><body><html>




#자바
Counter.java라는 파일 내에 Updator와 Counter라는 클래스 2개가 등장했다. 이것은 조금 특이하지만 물론 가능한 코드이다. 하나의 java파일내에는 여러개의 클래스를 선언할 수 있다. 단 파일명이 Counter.java라면 Counter.java 내의 Counter라는 클래스는 public 으로 선언하라는 관례(규칙)가 있다.

//다른 하나의 클래스에는 public 이라는 키워드를 사용하면 안된다. public class 이름{}에서 public은 해당 파일 명과 같다는 의미이다. 메쏘드 앞에 사용하는 public은 외부에서 접근가능하다는 의미로 다른 뜻으로 사용된다.
statusnot read reprioritisations
last reprioritisation on suggested re-reading day
started reading on finished reading on

05-3 Call by value
tln("before update:"+myCounter.count); Updator myUpdator = new Updator(); myUpdator.update(myCounter.count); System.out.println("after update:"+myCounter.count); } } <span>Counter.java라는 파일 내에 Updator와 Counter라는 클래스 2개가 등장했다. 이것은 조금 특이하지만 물론 가능한 코드이다. 하나의 java파일내에는 여러개의 클래스를 선언할 수 있다. 단 파일명이 Counter.java라면 Counter.java 내의 Counter라는 클래스는 public 으로 선언하라는 관례(규칙)가 있다. Updator 클래스는 전달받은 숫자를 1만큼 증가시키는 update라는 메소드를 가지고 있다. Counter 클래스는 count라는 객체변수를 가지고 있다. Counter클래스의 main메소드는 Counter클래스에 의해 생성된 객체의 객체변수 count의 값을 Updator클래




#자바

이제 예제를 다음과 같이 변경 해 보자.


class Updator { 
	public void update(Counter counter) { 
    	counter.count++; 
    }
}

public class Counter { 
	int count = 0; 
    public static void main(String[] args) { 
    	Counter myCounter = new Counter(); 
    	System.out.println("before update:"+myCounter.count); 
        Updator myUpdator = new Updator(); 
        myUpdator.update(myCounter); 
        System.out.println("after update:"+myCounter.count); 
    }
}
statusnot read reprioritisations
last reprioritisation on suggested re-reading day
started reading on finished reading on

05-3 Call by value
시키려고 시도하는 예제이다. 실행 해 보면 다음과 같은 결과 값이 나온다. before update:0 after update:0 객체 변수 count의 값을 update메소드에 넘겨서 변경시키더라도 값에 변화가 없다. 그 이유는 이전 챕터에서 알아본 것과 같이 update 메소드는 값(int 자료형)을 전달받았기 때문이다. <span>이제 예제를 다음과 같이 변경 해 보자. class Updator { public void update(Counter counter) { counter.count++; } } public class Counter { int count = 0; public static void main(String[] args) { Counter myCounter = new Counter(); System.out.println("before update:"+myCounter.count); Updator myUpdator = new Updator(); myUpdator.update(myCounter); System.out.println("after update:"+myCounter.count); } } 이전 예제와의 차이점은 update 메소드의 입력항목이다. 이전에는 int count 와 같이 값을 전달받았다면 지금은 Counter counter 와 같이 객체를 전달받도록 변경한 것이다. update 메소드를 호출하는 부분도 다음처럼 바뀌었다. &#13




Although many studies demonstrate the bene- fits of using mnemonics to enhance immediate recall in second language learning, evidence does not support the efficacy of mnemonics for long term retention [which is why: mnemonics to memorize, followed by SRS--Bam!]
statusnot read reprioritisations
last reprioritisation on suggested re-reading day
started reading on finished reading on

pdf

cannot see any pdfs




Strategies involving verbal or visual mnemonics were considerably more effective than a repetition technique, and students using a self-generated visual mne- monic outperformed those using a supplied mnemonic.
statusnot read reprioritisations
last reprioritisation on suggested re-reading day
started reading on finished reading on

pdf

cannot see any pdfs




Sócrates – Fala, pois, e diz-me então que espécie de coisa é a piedade e a impiedade? Êutifron – Digo que a piedade é o que eu agora faço: é perseguir os que cometem injustiças – por homicídio, roubo de coisas sagradas, ou qualquer outra falta dessas – quer sejam pai, mãe ou outro qualquer; e não os perseguir é que é a impiedade.
statusnot read reprioritisations
last reprioritisation on suggested re-reading day
started reading on finished reading on

pdf

cannot see any pdfs




Êutifron – É então a piedade o que é agradável aos deuses; o que não é agradável é a impiedad
statusnot read reprioritisations
last reprioritisation on suggested re-reading day
started reading on finished reading on

pdf

cannot see any pdfs