728x90

 

 

오버라이딩(Overriding)

자식이 부모한테 상속받은 메소드를 재작성하는 것

부모 클래스가 가진 기능을 자식 클래스가 재정의(추가,수정 등)하는 것

    *부모클래스를 자식클래스가 호출하는 개념

 

조건

  1. 부모 메소드 이름과 같아야한다
  2. 매개변수 전부 동일
  3. 반환타입 동일  ↔ 오버로딩은 반환타입 영향x 매개변수만 영향
  4. 부모 메소드가 private이면, 그 메소드는 오버라이딩 불가
  5. final 메소드 오버라이딩 불가

*final 종단 의미. 변경 불가, 여기까지 끝

변수 외에도 메소드,클래스에도 가능(예약어)

 

 

상속불가 조건

부모가 final,private면 상속불가

[접근제한자] [예약어] 반환형 메소드명 ( [매개변수] ) {}

  상속불가 조건                     선언부라고 부름

                           (선언부가 부모자식 동일해야함)

 

상속불가 조건 선언부라고 부름

 

 

@Override 

오버라이드 어노테이션

오버라이딩 했다는 표시 : 어노테이션(Annotation, 주석)

첫글자 대문자 아니면 빨간줄 에러남

@Override 붙이고 메소드명 변경하면 빨간줄 에러 발생

오버라이딩이 잘되고 있는지 검사해서 알려주는 것이 @Override

 

 


 

 

오버로딩(overloading)

한 클래스 내에서 같은 이름의 메소드를 여러 개 정의하는 것

 

조건

같은 메소드 이름 다른 매개변수 선언부(매개변수 타입, 개수, 순서)

메소드의 리턴타입은 오버로딩 조건과 관계 없음

 

 

 

상속에서 오버라이딩한 예

 

toString 작성하는 것도 오버라이딩 한 것

@Override
public String toString() {
	return "Sub [x=" + x + ", y=" + y + ", a=" + a + "]";
}

 

 

728x90
반응형
728x90

 

사용 프로그램

java + eclipse

 

메세지

Exception in thread "main" java.lang.Error: Unresolved compilation problem :

The constructor User(String,String) is undefined

 

상황

생성자 매개변수 실험

 

원인

실행 클래스의 매개변수 생성자에서 값 초기화를 3개했는데 

new User() 생성자에서는 매개변수를 2개만 줬기 때문에 에러발생

 

해결

매개변수 2개를 3개로 맞춘다

new User("user1","pass1","pass2")

 

728x90
반응형
728x90

 

메소드(method)

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

자바는 이러한 클래스 내의 함수를 메소드라고 부른다.

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

위 내용의 출처 : 점프투자바

 

역할

입력을 가지고 어떤 일을 수행한 다음에 결과물을 내어놓는 것, 이것이 메소드가 하는 일

 

구조

입력값 -> 메소드 -> 리턴값

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

기능부분에 생성자도 있지만 메소드도 있다

 

 

메인메소드( main method)

메인메소드는 모든 형태를 다 가지고 있다

public static void main(String[] args) {
[접근제한자] [예약어] 반환타입 메소드명(매개변수) {

  - 생략가능 : 접근제한자 예약어 매개변수

 

  1. 접근 제한자
  2. 예약어
  3. 반환타입
  4. 매개변수
  5. 표현식 종류 4가지

 

접근제한자 : public private protected default

예약어 : static final 등

반환타입 :

     A. void : 반환할 게 없음. 반환값이 없다고해서 안쓰면 생성자처럼 됨. 필히 쓸 것

     B.기본자료형을 반환하는 메소드

           ex) Integer.parseInt, chataAt(), Math.random(), String.equals(),String.length() 등등

C.배열을 반환 : Arrays.copyOf()

D.클래스를 반환 : Scanner.nextLine() .nextInt 등등

메소드명

매개변수

 


1) 접근 제한자

 

2) 예약어

 

3) 메소드 반환형

 

4)메소드 매개변수

1.() : 매개변수 없음 = 전달할 값이 없음

2.기본자료형

3.배열 : 얇은 복사(주소값)

4.클래스

5.가변인자 : 매개변수의 개수가 정해지지 않은 유동적 설정

      ex)printf() - 공식API문서 printstream 확인가능

자료형... 변수명 // ...은 가변의미를 나타냄

 

※ 매개변수와 인수

public class Sample {
    int sum(**int a, int b**) {  // a, b 는 **매개변수**
        return a+b;
    }

    public static void main(String[] args) {
        Sample sample = new Sample();
        int c = sample.sum(**3, 4**);  // 3, 4는 **인수**

        System.out.println(c);  // 7 출력
    }
}

 

5) 표현식 종류 4가지

1)반환타입 o 매개변수 o 메소드

2)반환타입 o 매개변수 x 메소드

3)반환타입 x 매개변수 o 메소드

4)반환타입 x 매개변수 x 메소드

 

 


 

메소드와 생성자 구분법

구분기준 : 반환 여부

public Book() {

} // 반환타입이 없으므로 생성자

반환타입 o : 메소드

반환타입 x : 생성자

728x90
반응형
728x90

 

OOP 공부하면서 캡슐화 개념 이해 + 입출금 잔액조회

코드 해보기!

머릿 속에 다른 클래스의 인자에서 해당 클래스의 매개변수로 데이터 넣기가 포인트 찍힘

 

 

package chap05_OOP.A_encapsulation;

public class Run {

	public static void main(String[] args) {

		
		Encapsulation01 encap = new Encapsulation01();
		encap.deposit(100);
		encap.withdraw(50);
		encap.withdraw(150);
		encap.checkBalance();
	}

}

 

728x90
반응형
728x90

 

변수란?

하나의 값을 저장할 수 있는 공간

메모리에 값을 저장할 수 있는 공간

변수는 상자

*전역변수 = 멤버변수 = 멤버필드 = 필드 : 클래스영역에 작성하는 변수

 

변수의 선언이란?

메모리 공간에 데이터를 저장할 수 있는 공간을 할당하는 것

변수의 선언 : stack에 뭔가 공간에 잡히는 것

  • stack : 컴퓨터가 사용하는 영역
  • heap :개발자가 사용하는 영역
  • static : 공용으로 사용할 수 있는 공간

선언하다 : stack에 변수명의 공간이 잡히는 것

int age; // 선언하면 stack에 4byte짜리(int 공간) 공간하나가 생긴다

값을 대입한다 : 변수에 값 저장

초기화 : 변수에다 값을 처음 넣는 것. 객체 선언을 하고 값을 최초로 할당하는 것

변수의 값 대입

대입연산자(=)**를 이용하여 오른쪽에 있는 값(리터럴)을 왼쪽에 넣는다(변수)

 

데이터타입 2가지

1.기본형(primitive)

  • boolean(논리), char(문자), String(문자열),
  • byte, short, int, long // double, float

2.참조형(non-primitive)

 

접미사

대소문자 모두 가능하나 관용적으로 long의 L은 대문자로

long = 0L

float = 0f

double = 0 또는 0d

 

위의 자료형명대소문자 구분 확실히!

-Double 대문자면 클래스로 쓰일 수도 있어 완전 쓰임새가 달라짐

 

int가 정수형의 기본이 된 이유

    - 4byte가 컴퓨터가 계산하기 좋은 크기라서라고 함

double이 실수형의 기본이 된 이유

    - 소수점이 있는 실수를 정확하게 계산할 수 없음(오차발생 필연적). 부동소수점. 최대한 오차를 줄이기 위해 double이 8바이트지만 기본형이 됨.

 

 


 

변수 명명규칙

(클래스명에도 적용됨)

1.대소문자 구분되며, 길이 제한이 없다

길이 제한이 없는 이유 :예약어(reserved word) 때문

 

2.예약어(reserverd word)를 사용하면 안된다

ex) true, final, String 등

 

3.숫자로 시작하면 안된다

ex)age1은 가능하지만 1age불가

 

4.특수문자는 ‘_’와 ‘$’만을 허용한다

-’$’는 내부 클래스에서 사용

-’_’ 사용 시 컴파일 에러는 없지만 관례상 사용하지 않는 것이 좋음

ex)sh@rp는 불강하지만 $harp는 가능

 

5.여러 단어 이름은 단어의 첫글자를 대문자로 한다

(단, 첫 시작 글자는 소문자로 하는 것이 관계)

ex)ageOfVampire,userName

 

클래스명 첫글자 대문자

세미콜론( ; )의 의미 : 한문장의 마침을 알림

 

 

 

※ 변수, 인자, 매개변수 구분

  • 변수 인자 매개변수 구분인자는 값을 넣는 쪽
  • 파라미터는 값을 받는 쪽
  • 각각 변수의 종류

 

728x90
반응형
728x90

 

함수 선언

1.선언적 함수

함수function에 이름을 집어넣는 것 선언적함수라함

<button onclick="test1();"> 선언적 함수 </button>
<script>
    function test1(){
        console.log('test1함수 실행'); // 선언적 함수
    }
</script>

2.익명 함수

fuction 뒤에 함수명이 없는 함수 함수를 변수에 넣고 변수명으로 호출

이유 : 호출할려해도 이름이 없기에 변수에 넣고 변수명으로 대체

<button onclick="test2();"> 익명 함수 </button>
<script>
    var test2 = function**()** {    // fuction 뒤에 이름이 없는 함수
       // 함수를 변수에 넣고 변수명으로 호출
        console.log('test2함수 실행'); // 
    }
</script>

 


 

함수 전달인자와 매개변수

1.매개인자로 전달하기

지정된 매개변수보다 많은 개수를 호출하는 것을 허용, 초과된 인자는 무시됨
지정된 매개변수보다 적은 개수를 호출하는 것을 허용, 전달되지 않은 매개변수는 undefined

함수 위아래 2개가 있고 위의 함수(익명함수)가 아래 함수(선언적 함수)를 호출하는 형태

위쪽 익명함수가 test3(인자o), test3(인자x) 순으로 아래 선언적함수를 2번 호출하는 형태

<script>
  document.getElementById('btn1').onclick = function(){ // getElement로 속성 접근. 클릭하면 해당 함수를 실행하라는 의미
    test3('안녕','반가워');
    test3();    // 자바에서 매개변수 있는 메소드에 매개변수 전달 안하면 
                // 에러가 났는데, 얘는 undefined를 출력
                // 지정된 매개변수보다 적은 개수를 호출하는 것을 허용, 전달되지 않은 매개변수는 undefined
  }
  function test3(value){  // 매개변수 1개인데 위의 test3는 2개이므로 자바라면 에러나지만, js는 오류 안나고 실행됨. 반가워는 안찍힘
    console.log('test3호출');   // test3호출
    console.log(value);         // 안녕 // 위의 test3('안녕','반가워');에서 인자가 안녕,반가워 2개인데 value로 앞의 '안녕'만 들어감
                                // undefined // 두번째로 test3()로 호출되서 test3()에서는 인자가 없으므로 undefined
    console.log(arguments); // Arguments(2) ['안녕', '반가워', callee: ƒ, Symbol(Symbol.iterator): ƒ]
                            // Arguments [callee: ƒ, Symbol(Symbol.iterator): ƒ]    // test3()의 호출. 인자가 없으므로 argument도 받은 인자x
    // arguments : 내가 넘겨 받아온 것을 다 담아오는 것 // arguments 처음 사용
    // 안녕,반가워를 위에서 받은거를 arguments에 다 배열로 저장하는 식
  }
</script>

arguments

넘겨받은 모든 인자들을 저장해두는 ‘배열’

ex)안녕,반가워를 위에서 받은거를 arguments에 다 배열로 저장

(대괄호[]로 남겨있는걸 보면 배열인걸 알 수 있음)

js내장함수

 

 

2.매개인자로 스스로를 전달하기

2가지 방법

방법1 : 인자 직접 설정

button 태그 test4() 안 매개변수인 js,jquery를 function test4(subject) 안에 넣어주고 얘는 다시 alert(subject)로 넣어준다

<button onclick='test4("JavaScript--");'>방법1 : JavaScript</button>
<button onclick='test4("jQuery--");'>방법1 : jQuery</button>
<script>
  // 방법1
// 인자 직접 설정해주는 것이 가장 간단한 방법
// button 태그 test4() 안 매개변수인 js,jquery를 
// function test4(subject) 안에 넣어주고 얘는 다시 alert(subject)로 넣어준다
  function test4(subject){    
      alert('오늘 배울 내용은 '+ subject + '입니다.');    // 오늘 배울 내용은 jQuery--입니다.
  }
</script>

 

방법2 : this를 통한 button 요소값 전달 + innerHTML

button 태그 test5() 안 매개변수인 this는 버튼의 내용인 '방법2 : JavaScript'를 인자로 받아 function test5(subject) 안에 넣어주고 얘는 여기서 다시 alert(subject.innerHTML)로 넣어준다

<button onclick='test5(this);'>방법2 : JavaScript</button>
<button onclick='test5(this);'>방법2 : jQuery</button> <!-- this : 지금 현재 내가 있는 곳에 대한 코드를 의미 -->
<script>
  // 방법2
	// this를 통한 button 요소값 전달 + innerHTML
// button 태그 test5() 안 매개변수인 this는 버튼의 내용인 '방법2 : JavaScript'를 인자로 받아  
// function test5(subject) 안에 넣어주고 얘는 여기서 다시 alert(subject.innerHTML)로 넣어준다
  function test5(subject){   
  // 온클릭 this에서 함수 파라미터인 subject에 넣을 때 뭐라고 찍히나 확인해보자   
      console.log(subject) // <button onclick='test5(this);'>JavaScript</button>
      alert('오늘 배울 내용은 '+ subject.innerHTML + '입니다.'); // 오늘 배울 내용은 방법2 : jQuery입니다.
  }
</script>

 

 

 

3.함수의 리턴처리

함수에서 다른 함수를 호출하여 리턴값 받아오기

test6() 함수에서 값을 리턴하는 returnFunc()함수를 호출하여 test6()에서도 값 리턴할 수 있게 만든 구조

<button onclick="test6();">함수 리턴처리</button>
<script>
  function test6(){
      // 반환타입이 없다고 리턴할 수 없는건 아님
      var ran = returnFunc ();
      alert(ran); // 알림창으로 값 리턴됨 : 68.4503529682732
  }
  function returnFunc(){
      return Math.random() * 100 + 1; // Math.random() : 랜덤값 부여 함수. 범위:0~1까지
      // test6()에 리턴해줌. 위의 test6()함수의 ran 변수가 해당 함수의 리턴값을 받아 담음. 
  }
</script>

<innerText & innerHTML 차이>

// innerText : 해당 태그의 텍스트만 가져온다
function setInnerText()  {
    const element = document.getElementById('content');
    element.innerText = "<div style='color:red'>A</div>"; -> 출력값 : <div style='color:red'>A</div>
}

// innerHTML : html 요소를 적용시킨 상태에서 값을 반환한다. 즉, html의 태그들을 적용시키고 태그사이의 값을 반환한다
function setInnerHTML()  {
    const element = document.getElementById('content');
    element.innerHTML = "<div style='color:red'>A</div>"; -> 출력값 : (빨간색 글씨) A
}

자료출처 : https://hianna.tistory.com/480

 

 

4.매개변수로 함수 전달

함수도 매개변수로 전달하고 리턴받을 수 있음

내부 로직 설명

1)button test7(calledFunction)의 calledFunction인자가 function test(v)의 매개변수인 (v)로 들어감 2)v();의 v에는 calledFunction이 담겨있으므로 아래의 fuction calledFunction(){} 함수를 호출

 

<button onclick='test7(calledFunction);'> 매개변수로 함수 전달</button>
<script>
  function test7(v){  // v가 calledFunction을 받아옴
      v();     //실행시키면 v가 calledFunction을 실행시키게 됨 
  }
  function calledFunction(){
      alert('calledFunction 실행');   // calledFunction 실행
  }
// 내부 로직 설명
// 1)button test7(calledFunction)의 calledFunction인자가 function test(v)의 매개변수인 (v)로 들어감
// 2) v();의 v에는 calledFunction이 담겨있으므로 아래의 fuction calledFunction(){} 함수를 호출
</script>

 

5.함수 리턴

함수에서 다른 함수를 호출하여 리턴값 받아오기

내부 로직 설명

1)button 태그에서 test8()함수 호출

2)function test8() 함수 내부에서 return 으로 함수 리턴시킴

3)return으로 받아온 함수가 button test8()을 들어감

받아온 함수 실행을 위해 button test8()에 소괄호()를 추가

<!-- function 받아와서 실행시켜줘야해서 onclick="test8()();"에다가 ()소괄호 추가 -->
<button onclick="test8()();">함수 리턴</button> <!-- 실행을 위한 소괄호() 한번 더 붙임 -->
<script>
  function test8(){     
    return function(){  // 함수 반환    // 익명함수
        alert('함수 반환 성공');   // 결과값이 아무것도 나타나지는 않으나 펑션을 반환받음. test8이 펑션 자체임
    }  // 내가 받아온 것을 실행시키기 위해 button test8()에 ()를 추가. 실행시켜야되니 뒤에 소괄호 한번 더 붙여줌
}      // function test8()에서 button test8()으로 펑션만 받아온거지 실행한게 아니라서 실행용 소괄호를 넣어줘야함
</script>

 

 


 

내장 함수

1. eval()

문자열을 JS코드로 변환해서 실행시켜주는 함수

내장함수 eval()

<input type="text" id="test1"><button onclick="test9();"> 내장함수 : eval()</button>
    <script>
        function test9(){
            var test = document.getElementById('test1').value;
            console.log(test); // 1+1   // // input창에 있는 입력값이 콘솔에 잘 출력됨. 
            console.log(eval(test));    // 1+1을 입력하면 2를 출력함.     
            //문자열을 자바스크립트 코드로 변환해서 실행을 시켜주는것. 
            // 1+1 문자열이 아닌 자바스크립트 코드로 변환을 하니 
            // 계산식이 되어 2가 출력된것. 

            var str = '';
            str += 'var num1 = Number(prompt(" 2"));';
            str += 'var num2 = Number(prompt(" 2"));';
            str += 'var sum = num1 + num2;';
            str += 'alert(num1 + " + " + num2 + " = "+ sum);';
            
            console.log(str); 
            eval(str);  // eval()을 통해 진짜 코드로 바꿔보겠다

        }
    </script>

 

2.infinity & NaN

infinity와 NaN을 찍어보면 넘버타입

 

방법1 : == 사용

infinity는 ==, isFinite() 둘다 가능 NaN는 isNaN()만 가능

 

방법2 : isFinite() & isNaN() 사용

isFinite 유한한지,정해진 수가 있는지 물어보는 것 isFinite()를 쓰면 매개변수 안에 숫자가 유한한지 물어보는 거기 때문에 무한인 Infinity니가 들어가면 false로 뜨는 것

NaN은 == 비교 불가능(isNaN으로 확인해야함)

function test10(){
  var num1 = 10 / 0; // -> 자바에서 이러면 바로  ArithmeticException예외
  var num2 = 10 / '강건강' ;
  console.log(num1); // Infinity
  console.log(num2); // NaN(Not a Number)

  // 에러가 나지 않고 콘솔창보면 인피티니와 NaN(Not a Number)이 뜸
  // 데이터 확인해보면 str이 아닌number 타입이 나옴

  console.log(typeof num1); // number타입
  console.log(typeof num2);

  // 인피와 nan인지 아닌지 확인방법  
  // 방법1
  // num1 == Infinity
  console.log(num1 == Infinity);  // true
  // 방법2
  // isFinite 유한한지 정해진 수가 있는지 물어보는 것
  console.log(isFinite(num1));    // false
  // Infinity니까 무한하지

  console.log(isNaN(num2));       // true
  console.log(num2 == NaN); 
  // 이렇게는 안됨, isNaN으로 확인해야함.

  // 음의 무한대와 양의 무한대가 존재함
  var num3 = -10 /0 ;
  console.log(num3);// 음의 무한대
  console.log(num3 == -Infinity); // true // 인피티 앞에 마이너스(-) 붙음
}

 

 

 

 

 

728x90
반응형
728x90

 

JAVA method - 4. 메소드의 입력

 

단순 반복만 대체가 아닌 함수 괄호 안에 입력값에 따라 메소드가 다르게 작동하게 하는 방법?

 - 해당 메소드 안 println() 안에 변수명으로 바꿔주면, 밖에서 해당 메소드 호출하고 ()안에 입력되는 값에 따라 출력된다

 - 아래 코드표 참조

 

메인 메소드 main(String[] args) {의 디테일한 의미

main이라는 메소드 있어야 자바가 프로그램을 호출한다는 약속

String뒤에 []는 문자열 배열

args는 자바가 메인메소드를 실행할 때, 입력해주는 입력값이 args를 통해서 들어가게됨

 

 

public static void printTwoTimes(String text) { 이 코드를 자바가 어떻게 받아들일까?

- printTwoTimes라는 메소드를 정의하고 있고, 이 메소드 ()안에 들어온 첫번째 값은 반드시 String타입으로 받으며, {}안에서 text라는 변수의 값이 되겠구나라고 생각한다

- 이 메소드 밖에서 printTwoTimes 메소드를 호출하면 printTwoTimes()안에 첫째값을 "a"이구나 그럼 자바는 text 값은 {}안에서 "a"이구나라고 생각

- printTwoTimes메소드 안에 "a”를 변수명 text로 변경하면, 메소드 데이터를 추가해야할 것을 더이상 수정할 필요가 없게됨

- 메소드명(데이터타입 변수명) {메소드 작동내용}

 

만약 위의 구분표시----를 다른걸로 메소드처럼 일괄 변환하고 싶다면?(두번째 변수 추가)

public static void printTwoTimes2(String text, String delimiter) {처럼 두번째 파라미터 추가와 메소드 밖에서 호출할 메소드 ()에도 인자를 추가해주면 된다

// delimiter 매개변수를 추가함
public static void printTwoTimes2(String text, String delimiter) {
		System.out.println(delimiter); // delimiter 구분자라는 의미
		System.out.println(text);	
		System.out.println(text);

 

 

  • 매개변수(parameter) : 아래 새로 만든 메소드 안에 변수명을 매개변수한다
  • 메소드 밖에서 메소드를 사용하는 쪽으로 주입한 값을 메소드 안으로 흘려보내주는 매개자라고 해서 매개변수
  • 인자(arguement) : 해당 메소드 밖에서 호출하는 메소드명 ()안에 입력값을 인자라 한다

 

 

public class method04 {

	public static void main(String[] args) { // main이라는 메소드 있어야 자바가 프로그램을 호출한다는 약속
// String뒤에 []는 문자열 배열. args는 자바가 메인메소드를 실행할 때, 입력해주는 입력값이 args를 통해서 들어가게됨
		printTwoTimes("a");	
		// 1억번 코드 반복
		printTwoTimes("b");	
		// 1억번 코드 반복
		
		
		printTwoTimes2("a","----");	// delimiter(구분자) 적용 메소드 호출
		printTwoTimes2("a","****");	
		printTwoTimes2("b","%%%%");	
		printTwoTimes2("b","!!!!");	
								// 위의 함수 안에 입력 된 값을 인자(argument) 
	}
								// 아래 text, delimiter와 같은 변수를 파라미터(parameter)라고 부름. 
								// 메소드 밖에서 메소드를 사용하는 쪽으로 주입한 값을 메소드 안으로 흘려보내주는 매개자라고 해서 매개변수
	public static void printTwoTimes(String text) {// 이 코드를 자바가 어떻게 받아들일까? 
		System.out.println("----");		 // printTwoTimes라는 메소드를 정의하고 있고
		System.out.println("a");		 // 이 메소드 ()안에 들어온 첫번째 값은 반드시 String타입으로 받으며
		System.out.println(text);		 // {}안에서 text라는 변수의 값이 되겠구나라고 생각한다
	}									 // 메소드명(데이터타입 변수명) {메소드 작동내용}
	// 이 메소드 밖에서 printTwoTimes 메소드를 호출하면 printTwoTimes()안에 첫째값을 "a"이구나 
	// 그럼 자바는 text 값은 {}안에서 "a"이구나라고 생각
	
	// printTwoTimes메소드 안에 "a'를 변수명 text로 변경하면, 추가되거나 수정할 메소드 데이터를 더이상 할 필요가 없게됨

	// 만약 위의 구분표시----를 다른걸로 메소드처럼 일괄 변환하고 싶다면?
	public static void printTwoTimes2(String text, String delimiter) {
		System.out.println(delimiter); // delimiter 구분자라는 의미
		System.out.println(text);	     // 
		System.out.println(text);
	}

}

 

 

728x90
반응형
728x90

 

JAVA1 - 12.4 직접 컴파일하고 실행하기 : 라이브러리 사

cmd

OkJavaGoInHome.java 입력

import org.opentutorials.iot.Elevator;

→ 의미 : org 밑에 opentutorials 밑에 iot 밑에 Elevator 불러 상태. Elevator 치면 이녀석인 . OkJavaGoInHome.java 같은 디렉토리에 있는 org폴더에 opentutorials폴더에 iot폴더 안에 있는

     - import '불러오다'라는 뜻

     - org부터 iot까지 패키지라고 부름

 

개념정리

Elevator.java 컴파일하면 Elevator.class파일이 생기고, 클래스 파일을 로딩하는 코드가 import org.opentutorials.iot.Elevator; 이것. 이런 절차로 Elevator 사용할 있게 된다

 

-classpath = -cp

 

이렇게 다른 라이브러리를 끌어와 쓸 때 필히 경로지정이 필수인데 이 경로가 변경될 경우 로딩시 에러난다.

어떻게 해결할까?

여기서 찾아주세요 하는게 --class-path 또는 -cp

(현재 디렉토리에서도 찾아야 하니 .이라고 치고, 윈도에서는 ;세미콜론으로 구분하고 ,리눅스에서는 :콜론)

 - 새경로 지정 & 컴파일 명령어 : javac -cp ".;폴더명" 파일명

 - ex) javac -cp ".;lib" OkJavaGoInHome.java

 

위의 경우 lib폴더 같은 경로에 있으면 찾아지나 lib폴더 밑에있다면 에러뜬다. lib 안에 있다고 명시적으로 컴퓨터한테 알려줘야한다

 - java -cp "lib" OkJavaGoInHome : 명시적으로 "lib"이라고 해줘야 lib에서만 찾게됨. 같은 디렉토리에서는 찾지않음

 - java -cp ".;lib" OkJavaGoInHome : 현재디렉토리라는 의미의 .; 추가

 

 

※ 소프트웨어는 혼자 만드는게 아닌 다른 사람들이 만든 라이브러리들 이용해서 나의 소프트웨어를 만들어가는 것이기에 다른 사람들이 만든 라이브러리 살펴보는 것은 견문을 넓히는 중요한

 

 

 


 

 

JAVA1 - 12.5 직접 컴파일하고 실행하기 : 입력과 출력

컴파일시 입력값을 줘서 입력값에 따라서 다르게 동작하는 프로그램을 어떻게 실행시킬지 알아볼

 

javac OkJavaGoInHomeInput.java 컴파일하면 OkJavaGoInHome.java class파일이 생기고,

파일이 쓰는 다른 class파일들도 자동으로 컴파일 된다

 

args 프로그램의 입력값을 받는 녀석

args 같아야함

들어오는 값은 args[0] 두번째 값은 args[1] 써서 가져올 있음

 

*첫째값과 두번째값을 주는 방법

첫번째값, 두번째값 표시는 띄어쓰기

cmd 명령어 : java OkJavaGoInHomeInput "Java APT 507" 15.0

                                                        (첫번째값)    (두번째값)

메커니즘

첫번째값 Java APT 507 args[0]으로 들어가서 String id String타입 id값이 되고,

두번째값 15.0 args[1] 들어가서 String bright String타입 bright 값이 되는

 

그럼 id bright 들어가 있는 아래의 Elevator(id), Security(Id) 등에 변수로 한번에 적용되는 메커니즘이다

 

 

cmd에서 인수(args) 넣을 첫번째값,두번째 값을 아래처럼 바꾸면 된다

 

 

 

 

 

728x90
반응형
728x90

 

JAVA1 - 11.1. 입력과 출력

프로그램은 들어오는 정보인 입력을 처리해서 출력을 만들어내는

우리가 사용하는 프로그램의 입력값을 어떻게 주는지 알아볼

다양한 것들이 입력값이 될 수 있는데

 

Argument : 프로그램을 실행할 어떤 텍스트 정보를 주는

File : 어떤 파일의 내용을 읽어서 입력되는 경우, 파일의 내용이 입력값

Network : 웹사이트 이용으로 정보를 받아서 쓰는 것도 입력

Audio : 말을 해서 프로그램이 이걸 알아듣는 경우 ex) iPhone Siri

Program : 다른 프로그램이 실행한 출력결과를 입력 받아 쓰는 경우

 

 

id값을 프로그램 실행시마다 바꾸는건 상당히 피곤한

사용자가 텍스트값을 입력해서 세팅할 있게 있을까?

검색 : java popup input text swing

JOptionpane 기능 쓸려면 임포트

 

복수 데이터를 입력하고 싶다면?

JOptionpane 가진 변수 하나더 만들어서 두번 받기

String id = JOptionPane.showInputDialog("Enter a ID");

String bright = JOptionPane.showInputDialog("Enter a Bright level");

 

 

import org.opentutorials.iot.Elevator;
import org.opentutorials.iot.Security;


// Elevator call
Elevator myElevator = new Elevator("JAVA APT 507");
myElevator.callForup(1);


// Security off
Security mySecurity = new Security("JAVA APT 507"); // 누구의 시큐리티인지 알리기해 ()작성
mySecurity.off();


// Light on
Lighting hallLamp = new Lighting("JAVA APT 507 / Hall Lamp"); // 자바 아파트 507호의 홀램프라는 의미
hallLamp.on();


Lighting floorLamp = new Lighting("JAVA APT 507 / floor Lamp");
floorLamp.on();


DimmingLights moodLamp = new DimmingLights(id+" moodLamp");
moodLamp.setBright(Double.parseDouble(bright)); //setBright()가 실수만 받아서 str을 double로 컨버팅하는 .parseDouble() 메소드사용
moodLampe.on();

 

 


 

JAVA1 - 11.2 . 입력과 출력 : arguments & parameter

 

parameter = 매개변수

args = arguments = 인자

 

args 얘도 변수

프로그램과 프로그램을 사용하는 사람 사이에 값을 매개해준다고 해서 매개변수라고 한다

 

*개념

arguments 값이 public static void main(String[] args) { 부분의 args 들어간다

위의 String[](대괄호가 붙은 문자열) 문자열로만 이루어져 있는 배열이라고 하는 데이터

(배열은 추후 배울 예정이니 지금은 스킵)

 

핵심은 args 사용자가 입력한 값이 들어올 것이고, {} 안에서는 args 사용자가 입력한 값이다

args에서 첫번째 값은 0이다. (프로그램에서는 0부터 시작하는게 )

두번째는 1

 

 

자바에서 입력값을 받는 방법은

JOptionPane.showInputDialog("");

같은 방법도 있지만 일반적으로는 인자(args) 사용한다

 

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형
728x90

020. 매개변수(parameter) 종류와 순서 

 

 

예를 보자

def personal_info(**kwargs):  # info 뒤 ( ) 안이 매개변수
    for key, value in kwargs.items():
        print(key, ': ', value, sep = '')

y = {'name': '홍길동', 'age': 30, 'address': '서울시 용산구 이촌동'}
personal_info(**y)

결과값
name: 홍길동
age: 30
address: 서울시 용산구 이촌동

*설명

맨 아랫줄 인수 personal_info(**y)에 바로 윗줄 y변수의 정보가 들어가고 **이게 붙어서

키워드 매개변수로써 첫째줄의 def의 매개변수 자리에 들어가서 함수 def personal_info가 작동한다

 

  • def : 함수를 만들 때 사용하는 예약어
  • 매개변수(parameter) : 함수에 입력으로 전달된 값을 받는 변수
                  함수 이름 뒤 괄호 안의 것
  • 인수(arguements) : 함수를 호출할 때 전달하는 입력값

 

 

사용법

함수를 정의하고 거기에 함수 밖에서 보내올 데이터(변수)를 받을 매개변수 타입을 지정하고, 작성한 함수에 밖에서 변수(인수)를 지정하면 작동된다.

 

종류

세가지는 혼용가능

  1. 고정 매개변수(parameter) : args = 1 or True
  2. 가변 매개변수(parameter) : *args
  3. 키워드 매개변수(parameter) : **kwargs

 

 

1)고정 매개변수(parameter)

매개변수 값을 지정하여 변동이 없게하는 매개변수

여러개 써도 순서는 상관x

ex) a=1, man=True

 

아래에서 a=3,b=7이 매개변수를 지정한 것으로 고정매개변수

def add(a, b):
    return a+b

result = add(a=3, b=7)  # a에 3, b에 7을 전달
print(result)

결과값
10

숫자 뿐 아니라, True나 False도 미리 지정해두고 사용가능

man = True

def say_myself(name, old, man=True): 
    print("나의 이름은 %s 입니다." % name) 
    print("나이는 %d살입니다." % old) 
    if man: 
        print("남자입니다.")
    else: 
        print("여자입니다.")
        
say_myself("박응용", 27)
say_myself("박응용", 27, True)

결과값
나의 이름은 박응용입니다.
나이는 27살입니다.
남자입니다.

 

 

2)가변 매개변수(parameter)

매개변수 앞에 *을 하나 붙인 것이며, 여러 개의 입력값을 입력가능. 튜플로 출력됨.

값이 몇 개가 될지 모를 때 사용하며, 입력값을 전부 모아서 Tuple로 만듬

def add_many(*args): 
    result = 0 
    for i in args: 
        result = result + i 
    return result
    
result = add_many(1,2,3)
print(result)
결과값 : 6

result = add_many(1,2,3,4,5,6,7,8,9,10)
print(result)
결과값 : 55

 

3)키워드 매개변수(parameter)

매개변수 앞에 **을  붙인 것이며, 딕셔너리로 출력됨

def print_kwargs(**kwargs):
    print(kwargs)
    
print_kwargs(a=1)

결과값 : {'a': 1}

print_kwargs(name='foo', age=3)
결과값 : {'age': 3, 'name': 'foo'}

 

※  args는 매개변수(arguments)의 약자로, 관례적으로 자주 사용

※ kwargs는 keyword arguments의 약자이며, args와 마찬가지로 관례적으로 사용한다.

 

사용순서

함수에서 매개변수를 종류별로 사용할 때, 순서를 지키지않으면 에러가 발생한다

고정 매개변수 - 가변 매개변수 - 키워드 매개변수

def parameter(args=1, *args, **kwargs)

 

 

728x90
반응형

+ Recent posts