1.2 Boolean Datatype
public class BooleanApp {
public static void main(String[] args) {
String foo="Hello world";
System.out.println(foo.contains("world"));
System.out.println(foo.contains("egoing"));
}
}
- a.contains("b"): a에 b가 포함되어있는지 없는지 확인
1.4.2 조건문 응용1
public class AuthApp {
public static void main(String[] args) {
System.out.println(args[0]);
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()는 내용 자체를 비교
- ==는 메모리 주소값을 비교
1.4.3 조건문 응용2
public class AuthApp {
public static void main(String[] args) {
System.out.println(args[0]);
String id="egoing";
String inputId=args[0];
String pass="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 password!");
// }
// } else {
// System.out.println("Who are you?");
// }
if(inputId.equals(id) && inputPass.equals(pass)) {
System.out.println("Master!");
} else {
System.out.println("Who are you?");
}
}
}
1.6 논리연산자
- &&: AND
- ||: OR
- !true/!false: 반대로
public class AuthApp2 {
public static void main(String[] args) {
String id="egoing";
String inputId=args[0];
String pass="1111";
String pass2="2222";
String inputPass=args[1];
System.out.println("Hi.");
boolean isRightPass=(inputPass.equals(pass) || inputPass.equals(pass2));
if(inputId.equals(id) && isRightPass) {
System.out.println("Master!");
} else {
System.out.println("Who are you?");
}
}
}
1.7.1 반복문
public class LoopApp {
public static void main(String[] args) {
System.out.println("=== while ===");
int i=0;
while(i<3) {
System.out.println(2);
System.out.println(3);
//i=i+1;
i++;
}
System.out.println("=== for ===");
for(int j=0; j<3; j++) {
System.out.println(2);
System.out.println(3);
}
}
}
- i=i+1 대신 i++ 사용
1.7.2 배열
public class ArrayApp {
public static void main(String[] args) {
String[] users = new String[3];
users[0]="egoing";
users[1]="jinhuck";
users[2]="youbin";
System.out.println(users[1]);
System.out.println(users.length); //세칸짜리 배열
int[] scores = {10, 100, 100};
System.out.println(scores[1]);
System.out.println(scores.length);
String[] scores2 = {"a", "b", "c"};
System.out.println(scores2[1]);
}
}
- 자료 담기 여러 방법 있는데 {} 이용해 한꺼번에 담기 가능. 맨 위는 변수 많을 시 비효율적
1.7.3 반복문+배열
public class LoopArray {
public static void main(String[] args) {
String[] users = new String[3];
users[0]="egoing";
users[1]="jinhuck";
users[2]="youbin";
for(int i=0; i<users.length; i++) {
System.out.println(users[i]+",");
}
}
}
- users.length 사용함으로써 유동적으로 반복 횟수 설정 가능
1.8.2 종합응용2
public class AuthApp3 {
public static void main(String[] args) {
String[][] users= {
{"egoing", "1111"},
{"jinjuck", "2222"},
{"youbin", "3333"}
};
String inputId=args[0];
String inputPass=args[1];
boolean isLogined=false;
for(int i=0; i<users.length; i++) {
String[] current=users[i];
if(current[0].equals(inputId) && current[1].equals(inputPass))
{
isLogined=true;
break;
}
}
if(isLogined) {
System.out.println("Master!!");
} else {
System.out.println("Who are you?");
}
}
}
2.3 메소드의 기본 형식
public class FirstMethod {
public static void main(String[] args) {
printTwoTimesA();
printTwoTimesA();
printTwoTimesA();
}
public static void printTwoTimesA() {
System.out.println("-");
System.out.println("A");
System.out.println("A");
}
}
- 함수같이 쓰임
- 순서 상관없이 선언해줘야 사용 가능
2.4 메소드의 입력
public class FirstMethod {
public static void main(String[] args) {
printTwoTimes("a", "-");
printTwoTimes("a", "*");
printTwoTimes("a", "&");
printTwoTimes("b", "!");
}
public static void printTwoTimes(String text, String delimiter) {
System.out.println(delimiter);
System.out.println(text);
System.out.println(text);
}
}
2.5 메소드의 출력
public class OutputMethod {
public static String a() {
return "a";
}
public static int one() {
return 1;
}
//return 값이 없을 때는 void 사용
public static void main(String[] args) {
System.out.println(a());
System.out.println(one());
}
}
2.6 메소드의 활용
public class AccountingApp {
public static double valueOfSupply=10000.0;
public static double vatRate=0.1;
public static double getVAT() {
return valueOfSupply*vatRate;
}
public static double getTotal() {
return valueOfSupply+getVAT();
}
public static void main(String[] args) {
double vat=getVAT();
double total=getTotal();
System.out.println("Value of supply: "+valueOfSupply);
System.out.println("VAT: "+vat);
System.out.println("Total: "+total);
}
}
3.2 남의 클래스 남의 인스턴스
import java.io.FileWriter;
import java.io.IOException;
public class OthersOOP {
public static void main(String[] args) throws IOException {
// class : System, Math, FileWriter
// instance : f1, f2
System.out.println(Math.PI);
System.out.println(Math.floor(1.8));
System.out.println(Math.ceil(1.8));
FileWriter f1 = new FileWriter("data.txt");
f1.write("Hello");
f1.write(" Java");
FileWriter f2 = new FileWriter("data2.txt");
f2.write("Hello");
f2.write(" Java2");
f2.close();
f1.write("!!!");
f1.close();
}
}
- Math라는 클래스는 바로 사용할 수 있고, Filewriter도 클래스이지만 new를 추가해서 f1이라는 변수에 담기는 복제본을 생성, 그 복제본은 내부적으로 data.txt라는 파일에 내용을 저장
- 짧게 작업을 끝내면 되는 것은 그냥 메소드나 변수를 클래스에 소속된 것 그대로 사용
- 긴 작업인 경우에는 클래스를 직접 사용하는 것이 아니라 클래스를 복제해서 f1이라는 변수를 제어
3.3 변수와 메소드
public class MyOOP {
public static String delimiter="";
public static void main(String[] args) {
delimiter="----";
printA();
printA();
printB();
printB();
delimiter="****";
printA();
printA();
printB();
printB();
}
public static void printA() {
System.out.println(delimiter);
System.out.println("A");
System.out.println("A");
}
public static void printB() {
System.out.println(delimiter);
System.out.println("B");
System.out.println("B");
}
}
- MyOOP 아래에 선언해주면 전체적으로 사용 가능
3.4.1 클래스 존재 이유와 기본 형식
class Print{
public static String delimiter="";
public static void A() {
System.out.println(delimiter);
System.out.println("A");
System.out.println("A");
}
public static void B() {
System.out.println(delimiter);
System.out.println("B");
System.out.println("B");
}
}
public class MyOOP {
public static void main(String[] args) {
Print.delimiter="----";
Print.A();
Print.A();
Print.B();
Print.B();
Print.delimiter="****";
Print.A();
Print.A();
Print.B();
Print.B();
}
}
- 구분자로 분리된 A 문자열과 B 문자열을 출력하는 메소드를 Print라는 클래스로 따로 떼어내기 가능. 그래서 굳이 메소드의 이름을 printA라고 적지 않고 A라고만 적어도 Print 객체의 A메소드이기 때문에 A를 출력한다는 의미를 쉽게 알 수 있음
3.5 인스턴스
class Print{
public String delimiter="";
public void A() {
System.out.println(delimiter);
System.out.println("A");
System.out.println("A");
}
public void B() {
System.out.println(delimiter);
System.out.println("B");
System.out.println("B");
}
}
public class MyOOP {
public static void main(String[] args) {
Print p1=new Print();
p1.delimiter="----";
p1.A();
p1.A();
p1.B();
p1.B();
Print p2=new Print();
p2.delimiter="****";
p2.A();
p2.A();
p2.B();
p2.B();
}
}
- 인스턴스는 클래스의 복제본이라 볼 수 있는데, 클래스 안의 데이터가 다른 클래스를 이용하고 싶을때 간단하게 복제해서 초기값세팅후 변경없이 사용 가능
- 위에서 A(), B() 선언할 때 static은 지워야함
3.6 static (어려움)
class Foo{
public static String classVar = "I class var";
public String instanceVar = "I instance var";
public static void classMethod() {
System.out.println(classVar); // Ok
// System.out.println(instanceVar); // Error
}
public void instanceMethod() {
System.out.println(classVar); // Ok
System.out.println(instanceVar); // Ok
}
}
public class StaticApp {
public static void main(String[] args) {
System.out.println(Foo.classVar); // OK
// System.out.println(Foo.instanceVar); // Error
Foo.classMethod();
// Foo.instanceMethod();
Foo f1 = new Foo();
Foo f2 = new Foo();
//
System.out.println(f1.classVar); // I class var
System.out.println(f1.instanceVar); // I instance var
//
f1.classVar = "changed by f1";
System.out.println(Foo.classVar); // changed by f1
System.out.println(f2.classVar); // changed by f1
//
f1.instanceVar = "changed by f1";
System.out.println(f1.instanceVar); // changed by f1
System.out.println(f2.instanceVar); // I instance var
}
}
- 클래스 static 메소드: 객체 생성 없이 호출 가능, 메소드 내 인스턴스 변수 사용 불가
- 인스턴스 메소드: 객체 생성 후 호출 가능, 메소드 내 인스턴스 변수 사용 가능
- 클래스는 클래스를 사용 가능, 인스턴스는 인스턴스를 통해 사용되도록 고안된 것