본문 바로가기

Java

Java 패키지(package) 패키지(package) - 서로 관련된 클래스의 묶음 (java8 기준 약 4000개의 클래스가 있음) - 클래스는 클래스파일(*.class), 패키지는 폴더 (하위 패키지는 하위 폴더) - 클래스의 실제 이름(Full name)은 패키지를 포함(java.lang.String) 👉🏻 위치: rt > java > lang > String.class - rt.jar(runtime(실행중)에 jar는 클래스파일 묶어 놓은 것)는 클래스들을 압축한 파일(JDK설치 경로 /jre/lib에 위치) 👉🏻 java9 부터 rt.jar가 너무 커서 사용하지 않고 module 개념으로 쪼개놓음 cf. jar.exe로 압축 풀 수 있음 Jar파일이 압축파일이라고 보면됨 패키지의 선언 - 패키지는 소스파일의 첫 번째 문장으로.. 더보기
Java 참조변수 super 와 조상의 생성자 super() 참조변수 super - 객체 자신을 가리키는 참조변수. 인스턴스 메서드(생성자)내에만 존재 // static 메서드내에서는 사용 불가 - 조상의 멤버를 자신의 멤버와 구별할 때 사용 복습) this: lv와 iv구별에 사용 class Ex7_2 { public static void main(String args[]) { Child c = new Child(); c.method(); } } class Parent { int x=10; } class Child extends Parent { int x=20; void method() { System.out.println("x=" + x); // x=20 System.out.println("this.x=" + this.x); // this.x=20 System.. 더보기
Java 오버라이딩(Overriding) 과 오버로딩(Overloading) 메서드 오버라이딩(overriding) 상속받은 조상의 메서드를 자신에 맞게 변경하는 것 override: v. 덮어쓰다 오버라이딩의 조건 1. 선언부가 조상 클래스의 메서드와 일치해야 한다. 2. 접근제어자(public, protected, default, private)를 조상 클래스의 메서드보다 좁은 범위로 변경할 수 없음 3. 예외(8장에서 배움)는 조상 클래스의 메서드보다 많이 선언할 수 없음(자손의 예외는 조상 클래스보다 같거나 적음) class MyPoint3 { int x; int y; String getLocation() { // 조상클래스의 메서드 return "x:"+x+", y:"+y; } } class MyPoint3D extends MyPoint3 { int z; // 조상의 g.. 더보기
Java 모든 클래스의 조상 Object 클래스 Object클래스: 모든 클래스의 조상 - 부모가 없는 클래스는 자동적으로 Object클래스를 상속받게 됨(컴파일러가 자동추가함) - 모든 클래스는 Object클래스에 정의된 11개의 메서드를 상속받음 (9장에서 자세히 배움) 11개 중 대표적인 것들 toString(0, equals(object obj), hashcode() 일단 이정도만 알기 toString은 클래스명@주소값(?)이라는 것을 문자열로 반환함 Circle@15db9742 - 상속계층도(class hierarchy)에서 가장 최고 조상 더보기
Java 클래스간의 관계 - 상속(Inheritance), 포함(Composite) 관계 클래스를 재사용하는 방법 1) 상속: ~은 ~이다.(is-a) 2) 포함관계: ~은 ~을 가지고 있다.(hsa-a) 1. 상속(Inheritance) 1) 상속이란? - 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것(코드의 재사용) - 두 클래스를 부모와 자식으로 관계를 맺어주는 것 - 자손은 조상의 모든 멤버를 상속 받음(생성자, 초기화 블럭 제외) - 자손의 멤버 개수는 조상보다 같거나 많음 - 자손의 변경은 조상에 영향을 미치지 않음 2) 상속을 구현하는 방법: 키워드 'extends' 사용 class 자식클래스 extends 부모클래스 { //... } 3) 단일 상속(single inheritance) - Java는 단일 상속만 허용(c++은 다중상속 허용) - 다중 상속을 허용하면 복.. 더보기
Java 변수의 초기화 1. 변수의 초기화: 변수를 선언하고 처음으로 값을 저장하는 것으로 경우에 따라 필수적이기도하고 선택적이기도함(초기화 권장) 2. 지역변수(lv)초기화: 수동 초기화 필수 3. 멤버 변수(cv, iv) 초기화 1) 초기화 순서 a. 클래스 변수(cv) 초기화 -> 인스턴스 변수(iv) 초기화 b. 자동 초기화 -> 명시적 초기화 -> 초기화 블럭, 생성자 2) 초기화 시점 a. 클래스 변수(cv) 초기화: 클래스가 처음 로딩될 때 단 한번 초기화 b. 인스턴스 변수(iv) 초기화: 인스턴스가 생성될 때 마다 초기화 3) 초기화 방법 a. 자동 초기화: 자동적으로 변수의 자료형에 맞는 기본값으로 초기화 됨 자료형 기본값 boolean false char '\u0000' byte, short, int 0 l.. 더보기
Java 생성자 간 호출 this()와 객체 자신을 가리키는 참조변수 this ⭐️ this()와 this는 완전히 다른 것⭐️ 1. this(): 생성자 간 호출 시 사용 1) 필수 조건 - 생성자 간 호출 시 클래스명 대신 this를 사용 - 생성자 간 호출 시 반드시 첫 줄에서만 호출(초기화 작업 도중 다른 생성자 호출 시 이전 초기화 작업이 무의미해질 수 있기 때문) class Car { String color; String gearType; int door; Car() { // Car 클래스의 기본 생성자 this("white", "auto", 4); // Car(String color, String gearType, int door) 호출 } Car(String color) { // Car 클래스의 매개변수가 1개인 생성자 this(color, "auto", 4); //.. 더보기
Java 생성자(constructor) 1. 생성자(constructor): 인스턴스가 생성될 때 호출되는 인스턴스 변수 초기화 메서드 1) 클래스 내에 선언 됨 2) 메서드와 유사한 구조이지만 리턴값이 없음 (생성자도 메서드이기 때문에 void를 붙여야 하지만 모든 생성자가 리턴값이 없으므로 void를 생략할 수 있게 한 것) 3) 생성자명은 클래스명과 같아야 함 class Card { // 클래스명과 생성자명은 같아야 함 ... Card() { // 매개변수 없는 생성자 // 인스턴스 초기화 작업 } Card(String kind, int number) { // 매개변수 있는 생성자 // 인스턴스 초기화 작업 } } 2. 기본 생성자(default constructor): 매개변수가 없는 생성자로, 클래스 내에 생성자가 존재하지 않을 경우.. 더보기