목록Java (25)
보리차
상속을 위한 두 클래스의 관계 'IS-A' 관계 - IS-A 관계는 '~은~이다.'로 표현되는 관계이다. ex) 노트북은 컴퓨터이다. 전기자동차는 자동차이다. - 상속이 갖는 문법적 특성은 IS-A 관계의 표현에 적합하다. - 따라서 상속 관계를 형성하기 위한 두 클래스는 IS-A 관계에 있어야 한다. 메소드 오버라이딩 상위 클래스에 정의된 메소드를 하위 클래스에서 다시 정의하는 것 상위 클래스의 참조변수가 참조할 수 있는 대상의 범위 다음과 같이 SmartPhone 클래스가 MobilePhone 클래스를 상속하는 형태로 디자인했다. class SmartPhone extends MobilePhone {...} SmartPhone phone1 = new SmartPhone("010-123-456", "Bo..
상속에 대한 오해 상속은 코드의 재활용을 위한 문법이 아니다. 상속은 연관의 일련된 클래스들에 대해 공통적인 규약을 정의하는 것이다. 상속의 가장 기본적인 특성 기존에 정의된 클래스에 메소드와 변수를 추가하여 새로운 클래스를 정의하는 것이다. 상속과 생성자 class Man { String name; } class BusinessMan extends Man { String company; String position; public BusinessMan(String name, String company, String position) { // 상위 클래스 Man의 맴버 초기화 this.name = name; // 클래스 BusinessMan의 맴버 초기화 this.company = company; this..
배열은 '자료형이 같은 둘 이상의 값'을 저장할 수 있는 메모리 공간을 의미한다. 1차원 배열 "타입이 같은 둘 이상의 데이터를 저장할 수 있는 1차원 구조의 메모리 공간" 자바에서는 배열도 인스턴스이다. int[] ref;// 참조변수의 선언 ref = new int[5];// 배열 인스턴스의 생성 int[] ref = new int[5];// 한 줄로도 가능 // 배열의 인스턴스 변수 접근 System.out.println(ref.length);// 5 (배열의 길이) - int[]에서 int는 배열의 자료형을 나타낸다. - int형 외에도 다양한 자료형의 배열을 생성할 수 있다. - 인스턴스를 저장할 수 있는 배열의 생성도 가능하다. Box[] ar = new Box[5]; 배열은 인덱스를 통해 값..
콘솔 출력(Console Output) System.out.println() System.out.print() 문자열 조합 System.out.printf("정수는 %d, 실수는 %f, 문자는 %c", 12, 24.5, 'A'); 콘솔 입력(Console Input) Scanner 클래스 생성자로 전달되는 대상으로부터 데이터를 추출하는 기능을 제공. 파일이나 String 인스턴스 등 다양한 대상으로부터의 데이터 추출이 가능하다. import java.util.Scanner; class ScanningString { public static void main(String[] args) { String source = "1 3 5"; Scanner sc = new Scanner(source); int num..
메소드 오버로딩 메소드를 구분하는 조건은 다음과 같다. - 메소드의 이름 - 메소드의 매개변수 정보 이때 메소드의 이름은 같아도 매개변수 선언이 다르면 동일한 이름의 메소드 정의를 허용하는데 이를 '메소드 오버로딩'이라 한다. 생성자도 오버로딩의 대상이 된다. 키워드 this를 이용해 다른 생성자를 호출할 수 있다. class Person { private int regiNum;// 주민등록 번호 private int passNum;// 여권 번호 Person(int rnum, int pnum) { regiNum = rnum; passNum = pnum; } Person(int rnum) { this(rnum, 0);// rnum과 0을 인자로 받는 다른 생성자 호출 } } 키워드 this를 이용해 인스..
클래스 변수 - 인스턴스의 생성과 상관없이 존재하는 변수 - static으로 선언된 변수는 변수가 선언된 클래스의 모든 인스턴스가 공유하는 변수 클래스 변수의 접근 방법 클래스 내부 접근 - 변수의 이름을 통해 직접 접근 클래스 외부 접근 - 클래스 또는 인스턴스의 이름을 통해 접근 클래스 변수의 초기화 시점과 초기화 방법 클래스 변수는 인스턴스 생성 이전에 메모리 공간에 존재한다. 즉, 클래스 정보가 가상머신에 의해 읽히는 순간 메모리 공간에 할당되고 초기화된다. 따라서 생성자를 통한 클래스 변수의 초기화를 진행하지 않도록 주의해야 한다. 클래스 변수는 인스턴스 간에 데이터 공유가 필요한 상황에서 활용할 수 있다. 클래스 메소드 - static선언을 하면 클래스 메소드가 된다. - 클래스 변수와 성격이..
자바에서 말하는 정보는 클래스의 인스턴스 변수를 의미한다. 정보를 은닉한다는 것은 인스턴스 변수를 숨긴다는 뜻 정보를 은닉해야 하는 이유 인스턴스 변수에 잘못된 값이 저장되는 일을 방지하거나 값의 종류와 범위를 지정하고 싶을 때가 있다. 이런 경우 인스턴스 변수에 직접 접근하게 되면 잘못된 접근이 발생할 수 있다. 정보의 은닉을 위한 private 선언 인스턴스 변수의 앞에 private 선언을 추가한다. private double rad = 0;// 클래스 내부 접근만 허용 이렇게 인스턴스 변수를 private으로 선언한 경우 두 메소드를 제공해야 한다. public void setRad() {...}// rad에 값을 저장(수정) public double getRad() {...}// rad에 저장된..
클래스 패스 자바 가상머신이 클래스 파일을 찾는 경로 현재 디렉토리를 기준으로 한 실행 현재 디렉토리: 명령 프롬프트 상에서 작업이 진행 중인 디렉토리의 위치 클래스 패스를 지정하지 않으면 자바 가상머신은 필요한 클래스를 현재 디렉토리에서 찾는다. 따라서 다른 디렉토리에 있는 클래스를 참조하기 위해서는 클래스 패스를 지정하여 자바 가상머신의 클래스 탐색 경로를 추가해야 한다. 클래스 패스의 지정 클래스 패스는 자바 가상머신의 클래스 탐색 경로를 의미하며, 이는 프로그래머가 직접 지정할 수 있다. C:/PackageStudy>set classpath클래스 패스의 확인 C:/PackageStudy>set classpath=.;C:\PackageStudy\MyClass클래스 패스에 추가할 경로(여러 개인 경우..
클래스의 정의와 인스턴스의 생성 클래스 = 데이터 + 메소드 클래스의 구성과 인스턴스화 class BankAccount { // 인스턴스 변수 int balance = 0; //인스턴스 메소드 public int deposit(int amount) {...} public int withdraw(int amount) {...} public int checkMyBalance() {...} } 인스턴스 변수: 클래스 내에 선언된 변수 인스턴스 메소드: 클래스 내에 정의된 메소드 인스턴스 변수는 같은 클래스 내에 위치한 메소드 내에서 접근이 가능하다. 클래스의 정의는 틀을 구성하는 것과 같다. 클래스의 정의는 붕어빵 틀과 같이 무언가를 찍어내는 틀에 비유할 수 있다. 틀을 이용해서 다음과 같이 인스턴스라는 것을..
main? 지금까지 만들어온 메소드의 이름이 항상 main인 이유는 다음에 근거한다. - 자바 프로그램은 main이라는 이름의 메소드에서부터 시작을 한다. 메소드의 정의 따라서 추가로 만들게 될 메소드의 이름은 내가 원하는 대로 직접 결정하면 된다. public static void main(String[] args) { int result; result = add(4, 5); System.out.println("4 + 5 = " + result); } public static int add(int num1, int num2) { int addResult = num1 + num2; return addResult; } 매개변수: 메소드를 호출할 때 전달되는 값을 받기 위해 선언된 변수 - 메소드 호출 시 ..