728x90

 

JAVA 제어문(Flow Control) - 1. 수업소개

 

시간의 흐름에 따라서

사용자의 동작에 따라서

조건에 따라서 실행되는 순서를 제어한다 : 조건문(Conditional Statements)

 

처리할 데이터 1억개

이런 데이터를 '반복적'으로 처리할 사용

 

간의 순서 따라서 실행되는 프로그램 물이 흐르도록하는 '중력'이라고 한다면,

조건문 반복문 물의 흐름 바꾸는 , 수문 같은

 

이를 통해서 마음대로 로직의 흐름을 조작할 있다

(조건문과 반복문) 조작하기 위해서 먼저 알아야 것은

boolean data type, 비교연산자(comparison operator)

 

< 기능들의 비유>

불리언 데이터타입을 만드는 유일한 연산자 비교연산자(comparison operator) 거쳐서

교차로 같은 조건문(conditional statement) 찍고

순환도로라고 있는 반복문(looping statement)까지 이어지는 여행을 시작할

 

 


 

 

JAVA 제어문 - 2. 불리안(Boolean) Data type

boolean data type 두가지 : true, false

 

"" 감싸지지 않은 true, false boolean이라는 약속이 되어있기 때문에, 변수명으로 사용불가

reserved word : 컴퓨터언어에서 이미 쓰임이 있는 단어들 또는 앞으로 채택될 가능성이 있는 키워드들은 컴퓨터언어가 사용하기로 예약되어 있다고 해서 리저브드 워드라 부름

 

 

이클립스에서 코딩하다가 JAVA API 연결해서 보는

foo까지 쓰고 .찍으면 있는 명령어 목록들이 우측하단에 박스처럼 뜬다

쓸려는 명령어를 클릭하고 오른쪽에 노란바탕에 사용법과 설명들이 뜨는데,

노란 바탕에 우클릭 한번 하면 스샷 아래 동그라미 메뉴가 새로 생기고 자바API 가서 있게끔 링크를 연결해준다

 

 

String foo = "Hello world";
System.out.println(foo.contains("world"));

변수명.contains() : 지정 변수에 해당 글자가 들어가있는지 여부에 따라 true or false 반환

   - 위의 코드에서는 foo라는 변수에 world 문자열(str)있는지 체크하고 있기에 true 반환

String foo = "Hello world";
System.out.println(foo.contains("egoing")); // 반환값 false

 

 

728x90
반응형
728x90

 

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

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

 

 

흐아 완강!!

뿌듯!!

728x90
반응형
728x90


여태 루마니안 데드리프트 하고 있었는데 컨벤셔널로 기록 중이었음ㅋㅋㅋㅋㅋ


728x90
반응형

'small steps > 운동 - 체력이 국력' 카테고리의 다른 글

22.01.10 운동기록  (0) 2022.01.11
22.01.09 운동기록  (0) 2022.01.09
22.01.07 운동기록  (0) 2022.01.07
22.01.06 운동기록  (0) 2022.01.07
22.01.05 운동기록 & 렛풀다운 실력증가 일지  (0) 2022.01.05
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
반응형

+ Recent posts