
String Builder - 문자열 더하기를 효율적으로 하기 위한 툴 일반적으로는 "A" + "B" 를 하려고 하면 A 그대로 두고, B 그대로 두고 새로운 공간에 AB를 만든다. String Builder는? => 내부적으로 아주아주 긴~ 배열을 하나 둔다. 그런데 이 배열은 String이 아닌 char[] 이다. 그리고 append()라는 메서드를 이용하면 위와 동일한 결과를 얻을 수 있음. 모든 작업을 다 끝내고, 사용자가 "나 다 했어" 선언했을 때, 그때서야 String을 한 번 만든다. public class Main { public static void main(String[] args) { String str = "A"; // str += "B"; // str += "C"; // str ..

예제코드 class F{ void xxxx() { } } public class Main { public static void main(String[] args) { // 여기 만약에 F f = new F(); F f1 = new F(); F f2 = f1; // 하나의 물리적 주소를 두 개가 동시에 바라보게 되는 것. if(f == f1) { System.out.println("f == f1"); // 출력 안 됨 객체가 달라 } if(f.equals(f1)) { System.out.println("f.equals(f1)"); // 출력 안 됨. } if(f1 == f2) { // f1과 f2는 참조변수가 가지고 있는 값이 같다. System.out.println("f1 == f2"); } // f와 ..

동등성 비교 어떤 상황에서 동등성 비교가 필요할 수밖에 없을까? 일치여부는 == 동일성 비교로 그냥 정리할 수 있는 것 아닌가? 일단 == 비교는 물리적으로 위치가 완전히 똑같은지를 비교하는 것. new가 두 번 되었으면 이 두개는 절대로 == 일 수가 없다. => 객체가 매번 생성되는 상황에서는 객체간에 == 비교를 하면 항상 실패한다는 이야기. ex. 데이터베이스 어느날 이 주문을 조회할 일이 필요해졌다고 치면, 데이터베이스의 row를 읽어서 애플리케이션으로 가져와야죠. 가져오는 역할을 하는 중간단계의 누군가가 있을 것인데, 얘가 하는 역할이 row를 읽어서 row와 매핑될 수 있게 new order를 만든다! => 이 말은, 똑같은 정보라고 하더라도 읽을 때마다 매번 new가 필요하다는 뜻. 어쩔 ..
예시코드 class A{ int a; } class B extends A{ int b; } class C extends A{ int c; } class D extends A{ int d; } public class ClassCastingTest1 { public static void main(String[] args) { A a = new B(); //업캐스팅 B b = (B)a; // 다운캐스팅 B[] listB = new B[10]; C[] listC = new C[10]; D[] listD = new D[10]; A[] listA = new A[10]; listA[0] = new C(); listA[1] = new D(); listA[2] = new B(); // listA[2].b = 10; //..

업캐스팅과 다운캐스팅 예시 public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); double num = sc.nextInt(); } } 이거 에러 나지 않는다. => 큰 그릇에 작은 애를 담았으므로 upCasting => 암묵적 캐스팅 하지만 public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); double numA = sc.nextInt(); int numB = numA; // 에러 } } 이건 에러. => 우리(개발자)는 double타입으로 선언했으나, 이것이 ..
클래스 배열을 쓰는 이유 일반 배열을 쓰게 되면 모든 원소를 일일이 개수만큼 담아줘야하는데, 배열이 필드의 개수만큼 필요하다 예를 들면 컴퓨터를 담으려면 컴퓨터가 종류, cpu, 가격으로 이루어졌다면 배열 3개를 만들어야 하는데, 그냥 "컴퓨터가 가지고 있는 정보"라는 공통점이 있고, 그래서 컴퓨터라는 클래스 속성 하나로 퉁쳐서 만들어버리는 편리함을 얻을 수 있다. 이제부터는 배열의 필드를 따로 담는게 아니라, 클래스째로 담아버리면 얘네들을 따로 들고다닐 필요가 없어짐. 필드에서는 선언과 동시에 초기화만 가능. 코드를 쓰는 것은 함수 안에다가 해야 생성자도 함수라는 것을 간과하지 말자. 그리고, Integer, String 같이 자료형을 반환하기 위한 데이터 타입이 있는데, 클래스 반환형도 클래스 자체가..