토요일, 1월 11
Shadow

#021객체 클래스 달력

미분류
자신의 책임에 해당하지 않는 작업을 필요로 한다면, 이 작업을 담당하는 다른 객체에 접근할 필요가 있다. 절차적인 프로그래밍에서의 함수 호출보다 일반적 인 방법을 이용하여 첫번째 객체가 두 번째 객체에게 이러한 작업을 수행하도록 요청한다.(자 바에서는 이러한 함수 호출을 보통 메소드 호출(method call)이라 한다.) OOP 용어로는 클라이언트가 서버 객체에게 메시지를 보내는 것이다. 다른 객체의 내부 데이터를 직접 조작할 수 없다는 점이다. 모든 통신은 메시지, 다시 말하면 함수 호출을 통하여 이루어진다. 적절한 메시지와 내부 데이터를 조작할 수 있도록 객체를 설계함으로써, 재사용성을 극대화 시키며 디버깅 시간을 최소화할 수 있다. 클래스는 객체가 실제로 만들어지는 템플릿(template) 이나 청사진(blueprint)으로 묘사된다. 쿠키 자르는 기구를 연상하여 클래스에 대하여 생각해 보 자. 객체는 쿠키 그 자체이다. 메모리 형태로 “가루반죽”이 할당되어야 할 것이다. 자바는 이 러한 “가루반죽 준비” 과정을 없애주는데 유리하다. 단순히 new 키워드를 사용하여 메모리를 획득할 수 있으며, 아무도 더 이상 이것을 사용하지 않으면 내장된 쓰레기 수집기가 쿠키를 먹 어치울 것이다.(어떤 비유도 완벽하지 않다.) 클래스로부터 객체를 생성하면, 클래스의 인스 턴스(instance)를 생성했다고 한다. AudioClip meow = new AudioClip(); new 연산자를 사용하여 AudioClip 클래스의 새로운 인스턴스(instance)를 생성한다. 이미 보아왔듯이 ...

#020 배열 및 변수

미분류
---------------------------------------------------------------------- 예제 3-7 은 두개의 메소드상에 분산된 코드를 갖는 응용 프로그램이다. 다음 코드를 통해 main 메소드의 lotteryOdds 메소드를 호출하는 방법을 살펴보자: long oddsAre = lotteryOdds(topNumber, numbers); 우리는 main 메소드와 lotteryOdds 메소드가 lotteryOdds 클래스에 속하기 때문에 클래스의 이 름을 명시할 필요가 없다. 여러분은 항상 원하는 전달인자와 메소드 이름을 제공함으로서 같은 클래스의 다른 메소드를 호출할 수 있다. 이것은 다음 구문에서의 메소드 호출과 대조적인다: NumberFormat.getCurrencyInstance(); GetCurrencyInstance 메소드는 NumberFormat 클래스내에 정의된다. 그러므로 반드시 클래스 이 름을 명시해야 한다. ------------------------------------------------------------------------- 자바에서 메소드에 대한 모든 전달인자는 참조에 의해서가 아니라 값에 의해서 전달된다는 사 실을 명심하는 것은 아주 중요하다. 따라서 메소드 호출에 의해서 변수를 변경하는 것은 불가 능하다. 전달인자 변수들은 메소드가 호출될 때 전달인자들이 제공한 값들로 초기화된 지역 변수이다. --------------------------------------------------------------...

#019 배열 변수

미분류
public static void main(String[] args) { int n; … { int k; …. } // k local to block and defined only until the end of the block } 하지만, 동일한 메소드의 다른 블록 내에서 같은 이름의 변수를 선언할 수 없다. public static void main(String[] args) { int n; … { int k; int n; // ERROR – can’t redefine n in inner block …. } } ---------------------------------------------------------------------- C++ 노트 : C++에서 중첩된 블록내에 변수를 다시 정의할 수 있다. 그러나 내부 정의는 외부 정 의의 그림자이다. 따라서 프로그램내의 에러가 될 수 있다. 이러한 이유 때문에 자바는 이것을 불허한다. ---------------------------------------------------------------------- int n; read_data: while(...) { ... for (...) { n = Console.readInt(...); if (n < 0) // should never happen-can’t continue break read_data; // break out of read_data loop ... } } // check for success or failure here ...

#018 코어자바 지침서

미분류
코아 자바 Format 클래스에 대한 사용 지침 화면으로부터 문자를 읽어들이는 Console 클래스 뿐만 아니라 NumberFormat 클래스보다 편리하 게 출력의 형식을 조절하는 클래스를 제공한다. 새로운 형식을 만드는 것이 아니라 C 의 printf 함수와 같은 유용하고도 사용하기 쉬운 포맷 형식을 구현한다. 예를 들면, 전체 길이 가 10 이며, 소수점 이후에 2 개의 숫자가 나오는 실수 형태를 만들기 위해서 다음을 이용한다. Format.print(System.out, “Your monthly payment is %10.2fn”, payment); 이것은 System.out 에 다음과 같은 문자열을 출력할 것이다. “Your monthly payment is 1141.30n” 문자열을 변수에 대입시키고 싶다면 다음을 이용하여라. String s = new Format(“Your monthly payment is %10.2fn”).form(payment); 출력 문자열은 포맷 명세(%으로 시작하는)를 제외하고 포맷된 모든 문자들을 포함한다. 하지 만 %%은 퍼센트 부호를 나타낸다. C 의 printf 와는 달리 한번에 하나의 포맷된 값을 써야만 한다. 두개의 값을 출력하고 싶다면, 두 번 호출을 하여야 한다. Format.print(“With rate %6.3f”, 100 * y); Format.print(“%%, your monthly payment is %10.2fn”, payment); %m.nf 형식 외에 가장 일반적으로 쓰이는 형식은 %nd 이다. 이것은 길이가 ...

#017 문자열 string

미분류
부문자열(Substrings) String 클래스의 substring 메소드를 이용하여 문자열에서 부문자열을 유출해 낼 수 있다. 예를 들면, String greeting = “Hello”; String s = greeting.substring(0, 4); 위의 코드는 “Hell” 문자열을 생성한다. 자바에서는 C 나 C++에서처럼 특별한 방식으로 문자 열을 셀 수 있다. 문자열에서 첫번째 문자의 위치는 0 이다.(C 에서는 위치를 계산할 때 0 부터 시작해야 하는 기술적 문제가 있지만, 자바에서는 그런 것은 아니다.) 예를 들면, 문자열 “Hello”에서 문자 ‘H’의 위치는 0 이며, 문자 ‘o’의 위치는 4 이다. substring 의 두번째 인자는 복사가 되지 않는 첫번째 위치를 나타낸다. 위의 경우에는 위치 가 0, 1, 2, 3(0 부터 3 까지, 0과 3 을 포함하여)인 문자를 복사한다. substring 에서는 위치 0 을 포함하고 4 를 제외하여 이것을 계산한다. 문자열 편집 문자열의 길이를 알기 위해서는 length 메소드를 사용한다. 예를 들면, String greeting = “Hello”; int n = greeting.length(); // is 5. char 이 유니코드 문자를 나타내듯이 String 또한 일련의 유니코드 문자를 나타낸다. 문자열 에서 각 문자를 접근할 수 있다. 예를 들면, s.charAt(n)은 위치가 n 인 유니코드 문자를 반 환한다. 여기서 n 은 0 부터 s.length() - 1 의 값이 된다. 문자열의 동등(equal...

#016 자료형

미분류
float 형의 리터럴은 접미사 F 로 끝난다. 예를 들면 3.402F 이다. 모든 실수형은 IEEE 754 명 세(specification)를 준수한다. 범위 오류에 대해서는 오버플로우를 발생하고, 0으로 나누는 것 같 은 연산에 대해서는 언더플로우(underflow)를 발생한다. long 정수의 리터럴(literal)은 접미사 L 이 붙는다.(예를 들면, 4000000000L) 16 진수는 접두사 0x 가 붙는다. 예를 들면, 0xCAFE 가 된다.( 역주: 리터럴은 소스 코드중에 있는 어떤 숫자 또는 기호로서 다른 데이터를 가리키는 역할을 하지않고 그 자신이 바로 데이터로서 사용되는 것을 말한다. ) 먼저 char 형은 string 형과는 달리 단일 따옴표를 사용한다. 표 3-3 : 특수 문자들 이스케이프 이름 유니코드 값 ---------------------------------------------------------------------- b backspace u0008 t tab u0009 n linefeed u000a r carriage return u000d ” double quote u0022 ’ single quote u0027 \ backslash u005c ---------------------------------------------------------------------- 불리언(Boolean) boolean 형은 false 와 true 의 두가지 값을 갖을 수 있다. 이것은 다른 프로그래밍 언어에 서와 같이 관계형 연산자를 이용하...

#015 객체및 메소드 사용방법

미분류
여기서는 System.out 객체를 사용하여 이것에게 println 메소드를 요청한다. 피어리드(.)는 메소드를 호출하기 위해 사용된다는 사실을 기억하라. 자바는 항상 메소드 호출을 위해 다음의 구문을 사용한다. object.method(parameters)

#012 QnA Class & Object

미분류
Question 2: The following code creates one Point object and one Rectangle object. How many references to those objects exist after the code executes? Is either object eligible for garbage collection? ... Point point = new Point(2,4); Rectangle rectangle = new Rectangle(point, 20, 20); point = null; ... Answer 2: There is one reference to the Point object and one to the Rectangle object. Neither object is eligible for garbage collection. Question 1: Consider the following class: public class IdentifyMyParts { public static int x = 7; public int y = 3; } Question 1a. What are the class variables? Answer 1a: x Question 1b. What are the instance variables? Answer 1b: y Question 1c. What is the output from the following code: IdentifyMyParts a = new IdentifyMyParts(...