
정답코드 1 /* - 5명이 기부를 1000원씩 함. - 총 성금이 500,000원이 되면 프로그램을 종료함. - 그런데 이제 문제는, 줄 한 번 서면 정보를 정확하게 알 수가 없어서 - 프로그램 종료 시에는 항상 504,000원이 출력될 것. */ class Account { int money = 0; synchronized void sendMoney() { // 돈내기 메서드 money += 1000; } } class Contributor extends Thread { // 얘가 각자 송금을 할 거니까 thread를 받는다. // 또한 Account 실객체를 하나 만들어서 돌려쓸 거니까, Account는 보유하고 있어야. // Account도 main문에서 받아온 거 하나를 넣어줄거란 말이죠. Ac..

프로그램, 프로세스, 쓰레드 프로그램(Program) : 컴퓨터에서 실행 가능한 명령어들의 집합. - 보통 하드디스크나 USB 등의 저장 장치에 파일 형태로 저장되며, 이를 실행하면 컴퓨터의 메모리에 로드되어 실행된다. 프로세스(Process) : 실행 중인 프로그램. 실행 중인 프로그램의 인스턴스(instance)라고 할 수 있음. - 컴퓨터 메모리에서 실행 중인 프로그램의 코드와 데이터를 저장하는 메모리 영역을 할당받으며, 실행 중인 프로그램의 상태를 유지하고 프로그램의 실행 흐름을 제어한다. 쓰레드(Thread) : 프로세스 내에서 실행되는 실행 단위를 의미. - 한 프로세스는 여러 개의 쓰레드를 가질 수 있으며, 각각의 쓰레드는 독립적으로 실행될 수 있다. - 하나의 프로세스 내에서 각 쓰레드는 ..
toString() : 객체를 문자열로 표현하는 메소드. toString() 메소드를 호출하면 객체의 내용을 문자열로 반환한다. - 이 메소드는 모든 Java 객체에 대해 기본적으로 구현되어 있으며, Object 클래스에서 상속받음. 따라서 모든 Java 클래스에서 toString() 메소드를 사용할 수 있다. 기본 동작 - 해당 객체의 클래스 이름, '@' 기호, 그리고 객체의 해시 코드를 문자열로 반환함. 그러나 대부분의 경우, 객체의 실제 내용을 더 유용한 방식으로 표현하기 위해 이 메소드를 재정의(override)한다. 예시 String 클래스에서 toString() 메소드는 해당 문자열 값을 그대로 반환하도록 재정의되어 있다. 이렇게 하면 String 객체를 출력할 때 문자열 값이 출력된다. 다..
public class ExCalendar { public static void main(String[] args) { Calendar c = Calendar.getInstance(); System.out.print(c.get(Calendar.YEAR)+ "년도 "); System.out.print(c.get(Calendar.MONTH)+1 + "월 "); //월을 나타내는 함수는 0부터 시작한다. System.out.print(c.get(Calendar.DATE) + "일 "); System.out.print(c.get(Calendar.HOUR) + "시 "); System.out.print(c.get(Calendar.MINUTE) + "분 "); System.out.print(c.get(Calenda..

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가 필요하다는 뜻. 어쩔 ..