728x90

 

프로그래밍, 엑셀의 매크로, 포토샵의 액션 : 시간의 순서에 따라서 명령을 실행시키는 기능들

"시간의 순서에 따라서 명령을 실행시킨다"로 대부분의 작업을 한다

 

 

흐아 완강!!

뿌듯!!

728x90
반응형
728x90

 

JAVA1 - 14.9. 나의 만들기 - 메소드(Method)

 

만약 아래의 변수에 들어가는 식이 엄청나게 복잡하다면….?

복잡한 식들을 getVAT()같은 이름으로 바꾸고 복잡한 식들을 숨겨놓은다면 앱이 심플해질

 

double valueOfSupply = Double.parseDouble(arg[0]);
double vatRate = 0.1;
double expenseRate = 0.3;
double vat = valueOfSupply * vatRate;
double total = valueOfSupply + vat;
double expense = valueOfSupply * expenseRate;
double income = valueOfSupply - expense;

double dividend1 = income * 0.5;
double dividend2 = income * 0.3;
double dividend3 = income * 0.2;

 

 

이클립스 Refactor - 메소드로 변경 기능

[바꾸기를 원하는 코드 선택 우클릭 Refactor ] - [Extract Method]

메소드 이름을 getVAT 이름 지었고 아래에 private static… return 문장이 새로생겼다

 

 

 

메소드 작동 메커니즘

1 변수valueOfSupply 값인 10000.0 2 getVAT valueOfSupply 넣어짐

2번의 2번을 거친 valueOfSupply 다시 메소드로 만들어진 3번의 getVAT valueOfSupply 값이 넣어지고

4번은 메소드를 만드는 코드. 메소드에서 최종 계산된 값이 return코드를 통해 2getVAT 들어간다.

* 메소드를 통해 1억줄의 코드도 간단하게 해결가능

 

 

코드를 깔끔하게 하고자 getVAT() 안에 값을 지운다면?

위의 valueOfSupply있어서 같은데 에러가난다 why?

valueOfSupply 현재 main {} 안에서 선언됬기 때문

, main메소드 안에서만 작동하는 지역변수(local variable)

 - 해결 : 모든 매소드에서 접근할 있도록, main메소드 밖에서 선언해줄

 

 

 

이클립스 Refactor - 지역변수→전역변수 변경 기능

[바꾸기를 원하는 코드 위에서 좌클릭하고 우클릭 Refactor] - [Convert Local Variable to Field]

 

변수의 식마다 메소드 설정 & 지역변수 to 전역변수로 변경

프린트코드는 한번에 지정해서 메소드설정

*자바에서는 전역변수(Global Variable)를 필드(Field)라고함

 

 

메소드(Method)란?

서로 연관된 코드 모아서 다시말해서 그루핑(grouping)해서 이름을 붙인 정리정돈의 상자

 

 


 

JAVA1 - 14.10. 나의 만들기 - 클래스(Class)

 

많은 라이브러리들이 객체지향 방법으로 만들어졌기에 객체지향이 대강 뭔지는 알아둘 필요가 있다

객체는 클래스라는 표현을 쓰기도 (완전히 동일한건x)

 

클래스(Class)란?

서로 연관된 메소드와 변수를 그루핑(grouping) . 그리고 거기에 naming .

정리정돈의 상자이다

 

앱에 여러가지 기능들이 많이 붙고

변수와 메소드가 앱에 너무 많으면 햇갈리고 생산성이 많이 떨어지게 된다

이런 상황에서 도움이 되는 것이 바로 클래스(class)

컴퓨터로 치면 디렉토리로 파일 정리하는 격

 

 

클래스(Class) 써서 정리하기

1)전역변수 세개를 Class Accounting 안으로 이동

(public static double valueOfSupply, vatRate, expenseRate;)

2)밑에 모여있는 메소드들도 Class Accounting 안으로 이동

 - 혹시 앞에 public 아니라 private이라면 public으로

3)public static void main(String[] args) { 아래 valueOfSupply,vatRate, expenseRate,print 4개의 변수명 앞에

클래스명인 Accounting. 붙여주면 전과 같은 기능으로 작동

 

 

*나중에 public private 차이 알아보자

 


 

JAVA1 - 14.11. 나의 만들기 - 인스턴스(Instance)

 

인스턴스(Instance)는

하나의 클래스를 복제해서 서로 다른 데이터의 값과 서로 같은 메소드를 가진 복제본을 만드는 이다

 

 

메인메소드 안에

Accounting.valueOfSupply = 10000.0;
Accounting.vatRate = 0.1;
Accounting.expenseRate = 0.3;
Accounting.print();

이런 물건들이 몇천개 있다고 , 어쩌다가 새상품이 하나 들어왔다고 해보자

위의 4개코드의 과정을 새상품이 들어올 때마다 세팅해줘야한다

ex)

Accounting.valueOfSupply = 10000.0;
Accounting.vatRate = 0.1;
Accounting.expenseRate = 0.3;
Accounting.print();

Accounting.valueOfSupply = 20000.0;
Accounting.vatRate = 0.05;
Accounting.expenseRate = 0.2;
Accounting.print();

   . 
   .
   .

이런 과정이 여러번 반복되다보면

클래스의 내부적인 상태를 바꾸는 행위가 버그를 유발할 가능성이 굉장히 높다

 

프로그래밍을 잘하는 사람이라면 이렇게 바꿀

Accounting class 이름을 Accounting1으로 변경하고 카피해서 Accounting2,3,4 계속 만들고

아래와 같이 클래스별로 따로 값을 관리한다

# main{} 안에 있는

Accounting1.valueOfSupply = 10000.0;
Accounting1.vatRate = 0.1;
Accounting1.expenseRate = 0.3;
Accounting1.print();

Accounting2.valueOfSupply = 20000.0;
Accounting2.vatRate = 0.5;
Accounting2.expenseRate = 0.2;
Accounting2.print();

클래스를 복제해서 서로 다른 상태, 서로 같은 메소드를 갖도록

하나의 클래스를 돌려막기한 것이 아니라, 복제된 클래스를 이용해서 편리하고 버그가 적은

코딩을 있게

 

그런데 이것도 좋지만 클래스의 정보를 바꿀려면 만든 모든 클래스의 정보를 바꿔줘야하기에

많이 번거로워질 (클래스를 생성할 때마다, 정보를 일일히 추가해줘야함…)

자바를 만든 사람들은 클래스라는 것을 복제할 있는 기능 만들었다

 

Accounting 앞에 new 붙여 복제

new Accounting();

Accounting a1 = new Accounting();

변수a1 앞에 Accounting 붙여서 a1변수값에는 반드시 Accounting 복제본만 들어올 있다라고 명시를 해줌

Accounting a1 = new Accounting();
a1.valueOfSupply = 10000.0;
a1.vatRate = 0.1;
a1.expenseRate = 0.3;
a1.print();

Accounting a2 = new Accounting();
a2.valueOfSupply = 50000.0;
a2.vatRate = 0.5;
a2.expenseRate = 0.5;
a2.print();

이렇게 복제가 가능하고, 여기서 다시 a1.print(); 해도 정상적으로 작동함

클래스를 복제하지 않아도 된다

 

인스턴스(Instance)란?

class 앞에 new 붙여서 만들어진 무언가 인스턴스

 

*인스턴스를 썼으면 위에 class Accounting에서 public 다음 static 사용되면 안되기에 지워야함

 

 

※ 자바에서는 메소드로 구조를 잡고

메소드와 변수를 grouping해서 클래스로 구조를 잡고

클래스를 복제한 인스턴스를 통해서 다른 구조를 만드는 구조가 자바와 다른 컴퓨터 언어들의 특징

 

 

 

728x90
반응형
728x90

 

JAVA1 - 14.6. 나의 만들기 - 조건문

 

double valueOfSupply = Double.parseDouble(args[0]); //
double vatRate = 0.1;
double expenseRate = 0.3;
double vat = valueOfSupply*vatRate;
double total = valueOfSupply + vat;
double expense = valueOfSupply*expenseRate;
double income = valueOfSupply - expense;

double dividend1 = (valueOfSupply - expense) * 0.5;
double dividend2 = (valueOfSupply - expense) * 0.3;
double dividend3 = (valueOfSupply - expense) * 0.2;

if (income > 10000.0) {
dividend1 = income * 0.5;
dividend2 = income * 0.3;
dividend3 = income * 0.2;
} else {
dividend1 = income * 1.0;
dividend2 = income * 0;
dividend3 = income * 0;
}

run configuration에서 arguments 50000.0 5000.0 세팅

 


 

JAVA1 - 14.7. 나의 만들기 - 배열(Array)

수식배분 0.5,0.3,0.2 변수 전환 rate1,2,3

흔한 변수와 변수가 많아질 수록(코드가 길어질 수록) 문제발생

다른 사람이 같은 변수를 만든다던가 만든 나도 까먹는다던가

해결책은 배열(array)

 

배열(Array) 사용장점

변수가 세개에서 하나로 줄고, dividendRates[0~2] 연관된 값이라는 것을 직관적으로 있고,

변수가 오염될 가능성이 현저하게 감소, 연관된 자료 정리정돈 기능

 

*코드가 길고 복잡해지기 마련이기에 항상 코드 정리정돈할

*반복문과 배열을 사용면 폭팔적인 효과가 있음

 

 

public static void main(String[] args) {

 - 여기 String[] args 문자열로 이루어진 배열이라는 의미

 - 바로 아래 Double.parseDouble(args[0]); 위의 String[] args배열의 값을 꺼내오는 (배열값 도입)

 

double[] 변수명 = new double[3]; // double[] 의미 : 더블형으로 이루어진 배열이다

                // new double[3] 의미 : 더블형 데이터를 세개 담을 있는 공간 만들어진

 

 

아래 rate1,2,3 배열을 사용하여 dividendRates[0~2] 변경

double[] dividendRates = new double[3];
dividendRates[0] = 0.5;
dividendRates[1] = 0.3;
dividendRates[2] = 0.2;

double dividend1 = (valueOfSupply - expense) * dividendRates[0];
double dividend2 = (valueOfSupply - expense) * dividendRates[1];
double dividend3 = (valueOfSupply - expense) * dividendRates[2];

 

 


 

 

JAVA1 - 14.8. 나의 만들기 - 반복문(Loop)

배열과 반복문은 같이 쓰는게 시너지가 크다

 

수익 배분해야하는 투자자가 만명이 넘는 기업에서 일한다고 상상해보자

dividend 코드줄이 엄청나게 많아야한다면…?

반복문(loop) 해결가능

 

double dividend1 = income * dividendRates[0];
double dividend2 = income * dividendRates[1];
double dividend3 = income * dividendRates[2];

// println()을 반복문으로 해결

 

int i = 0; // 변수 초기화 및 반복문수 기록

while(i < dividendRates.length) { # dividend의 수(투자자수)만큼 반복해야함 // arguments에 입력값 입력        
System.out.println("Dividend 1 : " + (income * dividendRates[i]));  # dividend1을 dividendRates[i]로 변경

i = i + 1;

}

print문을 수천 수억개의 코드를 반복문 하나로 해결!

수정,유지보수도 이거 하나만 고치면 된다

 

728x90
반응형
728x90

 

JAVA1 - 14.1. 나의 앱 만들기 - 오리엔테이션1

 

사업의 메커니즘

 

나의 현실을 자바를 통해서 어떻게 구원받을 것인가?

다음시간부터는 궁리한 것을 구현하는 방법을 배워보자

 

 

 

JAVA1 - 14.2. 나의 만들기 - 기본 기능 구현

 

내가 팔고 싶은 물건의 부가가치세 10% 알아내야한다

System.out.println("Value of supply : " + 10000.0);
System.out.println("Value of supply : " + 10000.0*0.1);

결과값 1000.0

여기까지는 계산기가 편하겠지만 아래부터는 자바가 좋다

 

System.out.println("Value of supply : " + 10000.0);
System.out.println("VAT : " + 10000.0*0.1);
System.out.println("Total : " + ( 10000.0 + 10000.0*0.1)); // 공급가+부가가치세로 최종 판매가 도출
System.out.println("Expense : " + ( 10000.0*0.3)); // 얼마를 벌었는지 알려면? 쓴 비용을 빼야함(ex:재료값,장비값,인건비등)
System.out.println("income : " + ( 10000.0 - 10000.0*0.3)); // 공급가-비용=수입

System.out.println("Dividend 1 : " + ( 10000.0 - 10000.0*0.3) * 0.5); // 배당1
System.out.println("Dividend 2 : " + ( 10000.0 - 10000.0*0.3) * 0.3); // 배당2
System.out.println("Dividend 3 : " + ( 10000.0 - 10000.0*0.3) * 0.2); // 배당3
결과값
Value of supply : 10000.0
Value of supply : 1000.0
Total : 11000.0
Expense : 3000.0
income : 7000.0
Dividend : 3500.0
Dividend : 2100.0
Dividend : 1400.0

 

이클립스 Find/Replace 기능

원하는 문자 또는 숫자를 원하는 내용으로 스위칭해주는 기능

[상단search 버튼] or [상단 Edit ]-[Find/Replace]

 


 

 

JAVA1 - 14.3. 나의 만들기 - 변수도입

 

 

한번에 같은 변수명으로 변경하는 기능

   - 10000.0이라는 공급가 숫자를 변수 valueOfSupply 한방에 바꿔줌

   - Preview기능 참고

   - 주의사항 : 일괄변환시 의도치않은 바꿔선 안될 글자도 바꿀 있기에 조심(코드양이 많을시 특히)

 

[바꾸기를 원하는 글자 우클릭]-[Refactor]-[Extract Local Variale]

 

 

이클립스, 써져있는 숫자를 아직 만들지 않은 변수로 바꿀 경우

빨간밑줄 에러 표시 뜨고 해결책으로 해당 변수명을 만들건지 물어보는 툴팁이 뜬다

변경 숫자의 데이터 타입을 보고 데이터 타입과 해당 변수명을 윗줄에 만들어준다

변수나 값 하나만도 가능하고, 식 전체도 가능

 

 

변수 도입(변수로 변환과정, 코드 간소화)

1) 위의 코드에서 공급가인 10000 변수 valueOfSupply 변경

2) 부가가치세인 0.1 VAT 변경 & 변수 설정

3) 비용인 0.3 Expense 변경 & 변수 설정

4) valueOfSupply*vatRate식을 VAT 변경 & 변수 설정

5) valueOfSupply + vat식을 total 변경 & 변수 설정

6) valueOfSupply - expense식을 income으로 변경 & 변수 설정

7) (valueOfSupply - expense) * 0.5식을 각각 dividend1~3으로 변경 & 변수 설정

8) 마지막 코드정리 : 변수들 위로 올려서 보기좋게. println()들만 모아서 아래로

 

  • 수학식처럼 최대 풀어서 쓰고, 이고잉님 예제처 하나환과정 거치거나 정리해서 코드간소화하는 훈련!

 

 

# 이것이 코드 간소화인 것인가? 컬쳐쇼크

점점 복잡해져가는 코드가 저렇게 간단하게...

개인적으로 더 잘하고 싶게끔 의욕을 불태우게 하는 내용이었다

 

# 음… 저런 코드개선 작업에서

중간값의 변수를 코드하는거랑 전체식에서 초기에 계산값의 변수를 그냥 두는거랑 뭐가 빠를까…?

일단 지금은 빠르게 자바 전체 틀부터 잡자

 


 

JAVA1 - 14.4. 나의 만들기 - 입력값 도입

 

고객 혹은 유저가 지불한 혹은 입력한 값을 출력값에 반영하도록 코드를 짜보자

 

공급가valueOfSupply 값을 서로 다른 출력값으로 주는 프로그램을 만들고 싶을

아래 2 args 입력값이 들어오도록 약속이 되어있으며, 이클립스에서

[상단 run버튼의 아래화살표 누르고 Run configurations 클릭] - [Java application] -[ accounting app(클래스명) 클릭] - [arguments] argument항목에 20000.0넣고 name 항목에도 클래명에 추가로 20000.0 적어서 알리고 apply 클릭

(혹시 목록에 없다면 클래스를 실행시키고 다시 확인해볼 것)

 

 

3번에서 밑줄에 빨간줄 에러표시가 것은 2 args 입력값을 받게 되어있는데 1번에서 2번의 데이터 타입을 Str타입으로 지정해줬고 따라서 2 args 데이터타입은 str인데 값을 double 타입인 3 args 넣을려고 하니 에러표시가

*String[] args의미 = 데이터상으로 문자열을 값으로 하는 배열

 

검색 해결 : string to double java

 - Double.parseDouble()

 

 

만들고 있는 어플리케이션에서 자주쓰는 것들을 추가하고 싶다면?

run configuration에서 아까 arguments 값을 넣었던 AccountApp(클래스명) 우클릭 Duplicate - 원하는 arguments값과 naming

 

 

실행할 때마다 이클립스는 켜야하는 번거로움 해결

cmd 실행

(명령어입력) java 파일명  : 에러발생

(명령어입력) java 파일명 args수치입력 : ex)java AccountingApp 3333.0

 - 다른 컴퓨터에 자바파일만 있으면 손쉽게 실행가능

 - 자바가 없을 경우, launch4j같은 프로그램으로 JVM까지 통째로 실행파일 포함시켜서 쓸려는 컴퓨터에 자바 환경설정이 안어있어도 실행가능하게한다

 

 


 

 

JAVA1 - 14.5. 나의 만들기 - 오리엔테이션2

 

수업방향 : java1 수업을 기초로 다른 필요한 것들을 베워나가면 된다

 

 

728x90
반응형
728x90

 

JAVA1 - 13.5. 자바 문서 보는 법 - 상속(inheritance)

 

JAVA API 문서

PrintWriter클래스를 만든 사람은 처음부터 만들고 싶지 않아서 Writer클래스에서 상속받아 PrintWriter클래스를 만들었고 Writer클래스를 만든 사람은 마찬가지로 Object클래스를 상속받아 쉽게 Writer클래스를 만든

 

*자바에서는 변수 필드라고 함 (Field = variable)

 

 

이클립스에서 상속관계(hierarchy) 보는 방법

[보기 원하는 클래스 위에 우클릭] - [Open tpye Hierarchy 클릭(F4) ]

 

Object 아래 toString 있고 Writer 있음

Object 아래 상속 Writer 아래 상속 PrintWriter 상속

PrintWriter클래스 쓰면 같은 부모 Object 아래 상속 되었기에, Object 아래있는 다른 클래스인 toString 같이 사용가능

 

 

 

자바의 모든 클래스는 Object클래스를 반드시 상속받음

누군가가 Writer라고 하는 어떤 취지를 가진 클래스를 만드는데 필수이기도 하고

Object기능을 사용하기도해서 Object 상속 받는데 이때 사용하는 키워드가 extends

 

 

, Object 확장(extends)해서 Writer 클래스를 만들었다는

마찬가지로, PrintWriter클래스도 Writer 클래스를 확장(extends)해서 만든

 

 

PrintWriter p1 = new PrintWriter("result 1");
p1.toString()

PrintWriter 인스턴스(P1) 만들고 인스턴스에 .toString()이라고 하게되면

상태에서 toString() 오브젝트에 있다고 하면, 자바가 어떻게 동작하는가?

 - PrintWriter클래스에 toString 있는지 보고 없으면 extends 가리키는 Writer 찾아보고 없으면 extends 가리키는 Object 찾아본다. 없으면 에러가 나고 있으면, toString() 메소드를 실행

 


 

Writer클래스는 String 받는 write클래스( write(String) : void  ) 정의되어 있다

PrintWriter클래스에서도 String 받는 write클래스( write(String) : void  ) 정의되어 있다

 - , Writer클래스에도 write메소드가 있는데 Writer클래스를 상속 받는 PrintWriter클래스에도 write메소드가 있는 . 다시말해, 덮어쓰기(overriding)

 

위의 상태에서 write()메소드는 누구의 write 메소드일까?

 - PrintWriter클래스 write(String) : void 사용하는

 

 

덮어쓰기(Override)?

PrintWriter클래스를 만든 사람이 Writer클래스의 write()메소드가 마음에 들지 않거나 취지에 맞지 않는다면 부모클래스의 메소드를 사용하지않고 자식클래스(자신) write()메소드를 사용하는데, 이를 덮어쓰기(overriding) 한다고한다

 


 

<JAVA API 보는법>

Tree

클래스 상속관계(Hierarchy) 있는

 

자바가 기본적으로 제공하는 표준 라이브러리들이 서로 간에 어떤 상속관계를 가지고 있는지 보여준다.

정점에는 역시 Object. 페이지 상단에 위치

 

 

자바에서 변수를 필드라 부름

필드=변수

위의 Fields Summary 의미

위의 lock이라고 하는 변수(필드) Writer()클래스에 정의되어있고 상속받아서 PrintWriter() lock이라는 필드(변수) 사용할 있다는 의미

 

Object클래스로부터 상속받았기 때문에 위의 메소드들은 사용할 있다는 의미

 

 

 

728x90
반응형
728x90

 

JAVA1 - 13.3. 자바 문서 보는 법 - 클래스

 

Math.PI 파이 3.1415...구체적인 값이 적당한 정밀도로 저장되어 있는 변수 PI PI Math라는 클래스에 소속되어 있는

 

클래스(Class)

클래스의 인상은 디렉토리

클래스 서로 연관된 변수와 메소드를 그룹핑한다

 

1)내림

System.out.println(Math.floor(1.6));  // Math.floor()

결과값 1.0

2)올림

System.out.println(Math.ceil(1.6)); // Math.ceil()

결과값 2.0

 

 


 

 

JAVA1 - 13.4. 자바 문서 보는 법 - 인스턴스 & Constructor생성자

result1.txt이라는 파일에 hello1이라는 텍스트를 자바를 이용해서 작성해볼 예정

이를 해결하기 위해서 검색,질문해서 알아내고 사용하는 예제 같은 것들을 찾아낸 후 그래도 이해가 안가는 것들은 API다큐먼트를 사용해서 오랜시간에 걸쳐 분석해서 알아내야함 (알아냈다고 가정하고 수업진행) 

 

인스턴스(Instance)

 

new : 복사본 만드는 커맨드

PrintWriter p1 = new PrintWriter("파일명.txt");  // 이렇게만 쓰면 빨간줄(에러발생) 
                                                //PrintWriter는 import해서 java.io에서 불러와야한다

 

import java.io.PrintWriter;

public class practice12 {
	public static void main(String[] args) {

	PrintWriter p1 = new PrintWriter("result1.txt");
    
	}

}

 

아직도 빨간 줄이 있는데 PrintWriter 파일을 읽어하는데 파일이 없으면 문제가 된다.

이러한 경우를 자바에서는 예외상황이라고 부르는데 이러한 예외를 어떻게 처리할지 정해줘야하는데 지금은 어려우니 스킵하고 add throw declaration 클릭해둘

 

 

PrintWriter p1 = new PrintWriter("result1.txt");
p1.write("Hello 1");
p1.close();


PrintWriter p2 = new PrintWriter("result2.txt");
p2.write("Hello 2");
p2.close();

 

수업 주제인 인스턴스로 돌아와보자

변수p1이 인스턴스

1 PrintWriter p1 = new PrintWriter("result1.txt");  의미 : result1.txt 파일 만들어라

2 System.out.println(Math.floor(1.6)); Math클래스는 클래스에 변수이름을 썼다

 

1번은 굳이 복제해서 변수에 담았고, 2번은 그냥했는가의 차이가 뭘까?

위의 Math클래스는 그냥 클래스에다 변수이름을 썼는데 PrintWriter 그냥 안쓰고 new 붙여서 복제하여 복제물을 p1이라는 변수에 담았다는 차이점이 있다

 


 

만약 인스턴스를 쓰지 않는다면 어떤 불편함이 있는가 알아보자

math 간단하게 끝낼 있는 일회용 작업들을 처리하지만,

PrintWriter p1 = new PrintWriter() 같은 경우 파일 생성과 동시에 하나만이 아닌 여러가지 작업들이 수만번 수반될 있기에 하나의 클래스를 사용하기 보다는 클래스를 복제해서 변수(인스턴스) 넣는 것이 작업의 효율이 높기에 클래스의 제작자들이 구조를 이렇게 설계한

 

 

※ Math. PrintWriter() 차이 : 생성자(Constructor)

PrintWriter() constructor(생성자)라는 것이 있고 Math 없다

constructor 없는 애들은 일단 일회용이라고 생각해라

 

constructor 있는 애들은 이를 이용해서 instance 만드는 것이 허용되어 있다고 생각하면

 ex) PrintWriter p1 = new PrintWriter("result1.txt"); // 좌측의 컨스트럭터는 PrintWriter(String fileName)

 

해당 클래스를 만든 사람이 해당 클래스가 인스턴스로써 활용하기를 원한다면 constructor 생성자를 가지고 있고, new 뒤에 붙은 것들이 constructor생성자이다.

 

 

Class constructor 메커니즘

constructor 앞에 new 붙이면 얘가 복제되서 인스턴스가 되고, 인스턴스에 어떤 값이 오는지를 규제하기 위해서 앞에다가 PrintWriter 하는 클래스이름을 적는

728x90
반응형
728x90

 

 

JAVA1 - 13.1. 자바 문서 보는 법 - API vs UI

 

자바가 기본으로적으로 내장하는 기능들을 '기본 라이브러리' 부름

  ex)System, Date, Math, PrintWriter

 

라이브러리라는 부품을 이용해서 나의 프로그램을 만드는

 

API(Application Programming Interface)

 여기서

Programming 시간에 따라서 실행된다는 시간이 강조된 표현이고,

Application 자바가 기본적으로 제공하는 부품들을 응용(application)해서 만든다라고 하는 응용에 방점이 찍힌 표현.  자바를 응용해서 프로그래밍적으로 실행되는 프로그램을 만들기 위해서 사용해야되는 조작장치들, 조작방법을 API(Application Programming Interface)라고 부른다

 

 

사람이 우리가 만든 프로그램을 조작하기 위해서 조작장치들(web이면 link, desktop app이면 button, 커맨드라인 시스템이면 argument ) UI(User Interface)라고 부름

 

 

동시에 사람이 사용하지 않을 도 있다. 우리가 만든 프로그램이 사람이 아닌 부품으로써 프로그램이 사용할 경우.

우리의 프로그램이 우리의 프로그램을 사용하는 완제품에 해당되는 프로그램에게 API 제공해야한다. 완제품에 해당하는 프로그램도 다른 프로그램의 부품이   있으니 API 해야한다

 

 

 


 

 

JAVA1 - 13.2. 자바 문서 보는 법 - 패키지,클래스,변수,메소드

API의 사용방법을 스스로 알아낼 수 있는 방법을 배워보자

 

 

All Classes탭

일단 클래스는 하나의 프로그램이라고 생각해둬라

수학과 관련된 작업을 해야하는데 직접 만들기 싫다면 API문서에서 검색

Math 검색 - All classes에서 Math 클릭

 

 

 

 

패키지(Package)

정리정돈을 위한 도구

많은 클래스들 있고 이들의 이름이 겹치면 충돌

만약 내가 똑같은 math라는 이름의 클래스를 만들고 싶으면 충돌하기에 있을 수가 없으니 이런 문제를 해결하기 위한 도구가 패키지

위는 java.lang 속한 math클래스고 내가 다른 패키지 이름으로 math라는 클래스를 만들 수도 있는

 java.lang 안에는 Math 외에도 String, System,Thread,float 등등 있다

 

 위의 class math에서 java.lang패키지를 좌측상단 package란에서 찾아보면 있는 것을 있다

패키지는 비슷한 성격의 클래스들을 모아서 이름을 붙인다

 

 

클래스(Class)?

서로 연관된 변수와 메소드를 모아서 거기에 이름을 붙인

class Math 안에 abs, min, max, floor, ceil 등의 메소드가 여기에 속함

패키지와 클래스, 메소드,변수의 상관관계도

 

 

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 - 12.1. 직접 컴파일하고 실행하기 : 소개

이클립스 같은 개발도구를 이용하지 않고 자바로 만든 프로그램을 컴파일하고 실행하는 법을 배우려한다

(cmd에서 자바사용법 배우기)

 

<중요 3가지>

더보기

1.자바확장자가 붙은 소스코드를 클래스확장자가 붙은 실행파일로 바꾸는것(Compile)

2.클래스확장자가 붙은 파일을 실행하는것(Run)

3.입력값을 주는 . 입력값에 따라서 다르게 동작하는 출력값을 만드는 (Input)

 

<12챕터에서 >

1. Program.java파일을 컴파일해서 실행가능 파일인 Program.class 만들 것임. 그리고 Program.class 자바로 실행할 예정

2. OkJavaGoinhome.java 컴파일해서 .class 파일만들고 실행할 예정

     (위의 ok파일을 실행하기 위해서는 org폴더에 Elevator 자바를 로딩해야만 해야함)

3. OkJavaGoinhomeInput.java 이전 것과 같은데 하나 다른점은, args라는 변수를 통해서 사용자가 입력한 정보를 가져와서 출력해주는 그런 프로그램. 실행할 어떻게 입력값을 받을 있는가 하는 이슈가 있는

 


 

JAVA1 - 12.2 직접 컴파일하고 실행하기 : 실행환경 살펴보기

의미와 순서 이해에 방점을

 

▷ cmd에서 javac 파일명 입력하면 컴파일 가능해짐

 

*용어

bin = binary = 실행파일

 

▷ C드라이브-Program Files-jdk폴더-bin-java.exe 자바를 실행했을 실행되는 파일이 이녀석

(jdk폴더 찾아서 bin 들어갈 )

 

▷ cmd java라고 입력하고 명령을 내렸을 , 명령어가 어디에 있건간에 실행될 있는 것은 path라고 부르는 환경변수 때문

 

※ 환경변수(path) 확인방법

내컴퓨터-속성-고급시스템설정-고급탭 환경변수

 

 

▷ cmd java라고 입력하고 명령을 내렸을 , OS 현재 디렉토리에 java 있는지 보고 없으면 path설정된 경로를 하나씩 보고 없으면 파일을 찾을 없다고 에러를 띄운다

▷java 실행시켰을 에러가 뜨면 환경변수(path) 설정해주면 된다

 

 


 

JAVA1 - 12.3 직접 컴파일하고 실행하기 : 컴파일과 실행하기

cmd에서 programing 폴더가 있는 파일 경로로 옮기기 위하여

cd 폴더경로지정

 

dir쳐서 programing.java 있는지 확인

javac 엔터

 

javac Program.java

dir해보면 Program.java파일의 .class파일이 생성된 것을 있음

 

*에러가 났다면?

javac -cp "." Program.java 엔터

-cp : classpath

 

java Program 명령어 입력하면, 현재 디렉토리에 Program.class파일을 찾아보고 있다면 실행시킴 (에러 , java -cp "." Program 쳐볼 )

 

 

java Program 입력의 의미

자바에게 Program.class라는 파일을 찾아서 실행해 명령하면, 프로그램은 지정된 파일을 찾고 파일에서 main 찾는다. 그리고 main 안에 {} 안에 있는 코드를 순차적으로 실행하고 종료하도록 약속되어있음  (*main 메소드)

아래의 Prgram 클래스이고, 클래스를 만들어서 클래스 이름과 똑같은 자바확장자를 만들면 컴파일하고 실행시켜서 우리가 원하는 프로그램이 만들어지게

 

 

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
반응형

+ Recent posts