728x90

 

JAVA 제어문 - 5. == vs equals

== equals 차이점 알아볼

 

 

자바의 데이터타입 두가지

구분하는 이유 : 기본형(primitive) 아닌 것을 자바가 차이를 두기 때문

 

 

1.primitive (원시 데이터타입)

boolean, int, double, short, long, float, char

 

2.non primitive

String, Array, Date, File…

 

 

자바가 타입을 어떻게 차별하고 뭐가 다른지를 알아보자

 

같은 1 value값이기에 다른 곳에 저장하면 낭비니 p1 1 값이 저장된 곳에 1 값을 똑같이 p2 끌어오게 자바에서는 처리한다

이때 같은 곳을 가리키고 있냐고 알아보는 것이 ==이고 결과값은 true 나온다.

 

 

위에 처럼

String o1 = new String("java");
String o2 = new String("java");

둘이 값은 같은데 == 보면 어떨까? false 된다. 같은 값이지만 ==(primitive data type) 같은 곳에 위치하는지 저장됬는지 주소를 보고 판단하기 때문

 

 

그렇다면 equals(non primitive data type)?

o1.equals(o2) 메소드 호출

내용이 같은지 판단하기에 true

 

 

 

원시 데이터 타입(primitive) 때는 동등비교연산자를 쓰면 된다

원시 데이터 타입은 equals 가지고 있지 않기에 쓰면 에러

원시 데이터 타입이 아닌 (non primitive) 때는 equals 써라

 

 

 

예외 : 문자열

(자주사용 편의성 성능 등으로 인한 특혜)

마치 원시 데이터 타입처럼 작동함 : non primitive type이지만 새로운 값을 생성하지 않고, 같은 값의 주소로 처리

String o3 = "java2"
String o4 = "java2"

 

 

== 동등 비교 연산해보면 true

 

 

 

*이 객체와 객체가 같은지 알아볼려면 검색해서 따져봐라

객체라고 하는 것은 복합적인 데이터타입이기 때문에 비교가 쉽지 않기 때문

 



==와 equals의 차이를 더 이해하려면

call by reference와 call by value에 대해 아래 링크에서 좀 더 알아보자

https://rise-up.tistory.com/182

 

 

 

 

 

728x90
반응형
728x90

 

if

else if

else문과 

인자 args[] 배열 써보기

 

 

 

728x90
반응형
728x90

 

JAVA 제어문 - 4.1. 조건문 - 형식

조건문 Conditional Statement

 

모양

1)

if(조건) {
    실행될 코드
}

 

2)

if(조건) {
    실행될 코드
} else if(조건) {
    실행될 코드
} else {
    실행될 코드
}

 

 

 

시간에 순서에 따라서 a 1 b 출력하는 간단한 프로그램을 만들

System.out.println("a");
if(true) {
   System.out.println(1);
} else if(true){
     System.out.println(2);
} else {
    System.out.println(3);
}
System.out.println("b")

 


 

JAVA 제어문 - 4.2. 조건문 - 응용1

[run configuration] - [arguments] 값으로 egoing 입력

String id = "egoing";
String inputId = args[0];

System.out.println("Hi");

if(inputId.equals(id)) {
	System.out.println("Master!");
} else {
	System.out.println("Who are you?");
}

.equals() : 양쪽 내용을 비교한 값을 boolean type으로 반환

 

 

==에서는 같은 egoing인데 false 작동하고 .equals()로는 true 작동하는 이유

 == 주소값이 같아야 True .equals() 밸류값이 같으면 true이기 때문

다른말로, == true일려면 a=b 트루이지만 b 복사하여 새주소로 만들어진bfalse이다. 그러나 .equals() 이라면 값이 같으므로 true

 

 

== .equals() 차이

  종류 비교차이 call 방식
== 연산자(operator) 비교대상 주소값 call by reference
 .equals() 메소드(method) 비교대상의 내용 call by value

(주소값과 밸류값의 차이가 결국 call by reference value 개념과 같은 이야기인데

초보자들은 이해하기 어려우니 따로 분류)

 

 

Call by reference & value

1)call by reference : 주소값이 부여됨. 때문에 객체를 불러오면 주소값을 불러온다

      ex) class, 객체object

         String a = "100";

         String b = a;       # 같은 주소값

       (만약, new 써서 인스턴스를 만든다면 값은 값지만 주소는 다르게 된다)

 

2)call by value : 기본적으로 대상의 주소값을 가지지 않고 '' 할당받는 형태

     ex) int, float, double 같은 primitive type

 


 

JAVA 제어문 - 4.3. 조건문  - 응용2

 

[run configuration] - [arguments] 에서 두번째 인자값 추가 1111 입력

( 추가는 스페이스로 공백 주면 된다)

 

String id = "egoing";
String inputId = args[0];
String pass = "1111"; // pw : 1111
String inputPass = args[1];

System.out.println("Hi");

if(inputId.equals(id)) {
	if(inputPass.equals(pass)) {
		System.out.println("Master!");
	} else {
		System.out.println("Wrong pw!");
	}
} else {
	System.out.println("Who are you?");
}

 

// 위의 if문을 더 심플하게 해보는 코드

if(inputId.equals(id) && inputPass.equals(pass)) { # && 논리연산자(=and)
	System.out.println("Master!");
} else {
	System.out.println("Who are you?");
}

 

논리연산자(&&)

A and B(A B 둘다)처럼 양쪽 요건을 충족할 경우 작동하는 것이 논리연산자

(파이썬의 and 같다)

 

 

 

728x90
반응형
728x90

 

※ Call by reference & value

 

1) call by reference

주소값이 기준. 이 때문에 객체를 불러오면 주소값을 불러온다      

ex) class, 객체object 
        
String a = "100";         
String b = a;       # 같은 주소값

(만약, new 써서 인스턴스를 만든다면 값은 값지만 주소는 다르게 된다)

 

2) call by value

기본적으로 대상의 주소값을 가지지 않고 '값(value)'을 할당받는 형태 

ex) int, float, double 같은 primitive type들

728x90
반응형
728x90

JAVA 제어문(Flow Control) - 3. 비교연산자(Comparison Operator)

 

1+1=2

+ 산술 연산자로써 2 만들고

 

"1"+"1"="11"

여기서 + 문자열을 만들어내는 연산자

 

이번 시간 알아볼 것은

불리언 데이터 타입들 간의 연산을 하는 친구

 

비교연산자(Comparison Operator)

왼쪽에 있는 값과 오른 쪽에 있는 값을 비교해서 결과가 무엇이냐에 따라서 True 또는 False 하나의 값을 만들어 내는 연산자(operator)

 

종류

1)대소 비교연산자

<

>

<=

>=

2)등가 비교연산자

== : 같다 (call by reference & value 참조)

!= : 같지않다

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

 

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

 

[Java][에러 메세지]

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0

 

[원인]

array(배열)의 범위 밖이거나 값이 없을 경우 나는 에러

 

범위 밖일 경우

ex) int[] arr = {0, 1, 2, 3};

arr[5] = 5

에러발생

 

[해결]

범위 밖이라면 범위 밖에 있는 부분을 찾아 수정해주고,

값이 없다면 넣어줄 것!

 

 

728x90
반응형
728x90

 

JDK란?

Java Developement Kit의 약자

SDK(Software Developement Kit)인데 자바용으로 만들어진 SDK를 말한다

한마디로 자바개발하는테 도움을 주는 것들이다

 


 

JDK와 OpenJDK

JDK는 오라클에서 공식적으로 만들고 있고, OpenJDK는  무료 오픈소스로 Sun Microsystems에서 개발하는데 오라클이 여기를 인수했다

기본적으로 같은 기술이라 개발자들이 쓰는데 크게 차이는 없지만 오라클의 JDK가 개인에게는 상관없지만 기업용으로는 라이센스비용이 꽤나 높고 대신 안정성이나 속도가 좀 더 빠르다고 한다. MySQL과 오라클SQL이랑 비슷

 


 

환경변수(path) 설정

자바 설치시 필수과정 path

[내컴퓨터 들어가서 빈 곳에 우클릭 속성] - [우측에 고급시스템설정] - [환경변수 탭]

- [시스템 변수 탭, 아래 path 누르고 편집] - 사용할려는 자바버젼이 있는 폴더의 bin파일까지 들어가서 경로 복붙

 

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

+ Recent posts