본문 바로가기

전체 글215

상속 객체 지향의 상속- 부모 클래스의 멤버를 자식 클래스가 물려받는 것- 부모 클래스의 멤버를 재정의할 필요 없음- 코드 중복을 제거하여 프로그램이 간결 객체 지향에서 상속의 장점멤버 중복 작성 제거 → 클래스의 간결화클래스의 계층적 분류 → 클래스 관리 용이클래스 재사용과 확장 용이 → 새로운 클래스 작성 속도 증가 → 소프트웨어 생산성 향상자바의 상속 선언- 부모 클래스: 슈퍼 클래스(super class)- 자식 클래스: 서브 클래스(sub class)- extends 키워드 사용(슈퍼 클래스를 확장한다는 개념) public class Person{ ...}public class Student extends Person{ //Person(슈퍼 클래스)을 상속받는 Student(서브 클래스) 선언 .. 2024. 5. 21.
final final 클래스: 클래스 이름 앞에 final을 사용하면 클래스를 상속받을 수 없음final class FinalClass{ //이 클래스는 상속 불가 ...}class SubClass extends FinalClass{ //상속 불가, 컴파일 오류 ...} final 메소드: final로 메소드를 선언하면 오버라이딩할 수 없음public class SuperClass{ protected final int finalMethod(){...} //finalMethod()는 자식 클래스에서 오버라이딩 불가}class Subclass extends SuperClass{ protected int finalMethod(){...} //오버라이딩 불가, 컴파일 오류}- 자식 클래스가 부모 클래스의 특정 메.. 2024. 5. 20.
static static 멤버의 선언- static을 붙여 선언class StaticSample{ int n; void g(){...}; static int m; static void f(){...}; } static 멤버와 non-static 멤버의 차이점 non-static 멤버static 멤버선언class Sample{    int n;    void g(){ ... }}class Sample{    static int m;    static void f(){ ... }}공간적 특성멤버는 객체마다 별도 존재- 인스턴스 멤버멤버는 클래스당 하나 생성- 객체 내부가 아닌 별도의 공간(클래스 코드가 적재되는 메모리)에 멤버 생성- 클래스 멤버시간적 특성객체 생성 시 멤버 생성- 객체가 생길 때.. 2024. 5. 20.
접근 지정자 패키지- 서로 관련 있는 클래스 파일(.class)들을 패키지에 저장하여 관리- 폴더 개념과 비슷- 자바 응용프로그램은 여러 개의 패키지로 구성 접근 지정자- public: 모든 클래스에 접근 허용- private: 동일 클래스 내에서만 접근 허용- protected: 동일 패키지 내에서만 접근 허용, 서브 클래스일 시 다른 패키지에 있어도 접근 허용- default: 같은 패키지 내에서만 접근 허용클래스 접근 지정- 다른 클래스에서 현재 클래스를 활용할 수 있는지 허용 여부 지정 1. public 클래스- 패키지와 상관없이 다른 모든 클래스에게 접근 허용public class World{ ...} 2. 디폴트 클래스- 접근 지정자가 생략된 경우 default로 선언- package-private라고도 .. 2024. 5. 20.
객체 소멸과 가비지 컬렉션 객체 소멸- new에 의해 할당된 객체 메모리를 자바 가상 기계의 가용 메모리로 되돌려 주는 행위- 자바 응용프로그램에서 임의로 객체를 소멸시킬 수 없음가비지(garbage)- 자바 응용프로그램에서 더 이상 사용되지 않게 된 객체나 배열 메모리- 가리키는 레퍼런스가 하나도 없는 객체나 배열- 응용프로그램이 더 이상 접근할 수 없음a = new Person("이몽룡");b = new Person("성춘향");//2개의 Person 객체 생성b = a;//레퍼런스 b는 a가 가리키던 객체를 가리킴//b가 가리키던 처음 객체는 아무도 참조하지 않게 됨(접근 불가) -> 가비지가비지 컬렉션- 자바에서 가비지를 자동 회수하여 가용 메모리로 반환하는 과정- 가비지가 차지하고 있는 메모리 공간은 회수되는 것이 경제적.. 2024. 5. 20.
메소드 활용 - 메소드 오버로딩 메소드 오버로딩(Overloading)- 한 클래스 내에 이름이 같은 메소드를 중복 작성메소드 이름이 동일매개변수의 개수나 타입이 서로 다름- 위 조건들을 만족해야 메소드가 오버로딩될 수 있음- 리턴 타입이나 접근 지정자는 오버로딩과 무관class MethodOverLoading{ public int getSum(int i, int j){ return i+j; } public int getSum(int i, int j, int k){ return i+j+k; }}//오버로딩 성공 사례//두 메소드 이름 getSum으로 동일//매개변수의 개수 다름class MethodOverLoadingFail{ public int getSum(int i, int j){ return .. 2024. 5. 20.
메소드 활용 - 인자 전달 메소드 형식 메소드- 클래스의 멤버 함수- 접근 지정자 선언을 제외하면 C/C++의 함수 작성법과 동일- 접근 지정자: 메소드가 다른 클래스에서 호출될 수 있는지 지정(public, prvate, protected, default)- 리턴 타입: 메소드가 반환하는 값의 데이터 타입인자 전달 자바의 인자 전달 방식- 기본 타입의 값 전달- 객체 또는 배열 전달 1. 기본 타입의 값이 전달되는 경우- 메소드 매개변수가 기본 타입(byte, char, short, int, long, float, double, boolean)으로 선언된 경우- 호출자(caller)가 전달하는 값이 매개변수에 복사되어 전달- 실인자 값은 변경되지 않음public class ValuePassing{ static void incre.. 2024. 5. 20.
객체 배열 객체 배열- 자바에서는 기본 타입 데이터뿐 아니라 객체를 원소로 하는 객체 배열도 만들 수 있음- 객체에 대한 레퍼런스를 원소로 갖는 배열배열 선언 및 생성 1. 배열에 대한 레퍼런스 선언Circle[] c;- Circle 클래스의 배열에 대한 레퍼런스 변수 c 선언- 레퍼런스 변수 c를 선언할 뿐 배열을 생성하는 것은 아님 → 배열의 원소 개수를 지정해서는 안 됨 2. 레퍼런스 배열 생성c = new Circle[5];- 5개의 레퍼런스를 원소로 하는 배열 생성- 배열의 원소는 객체가 아닌 레퍼런스- Circle 객체에 대한 레퍼런스 배열이 생성되며, 변수 c가 이를 가리킴- Circle 객체들은 아직 존재하지 않음 3. 객체 생성for(int i=0; i- for 문을 이용하여 배열의 크기만큼 Cir.. 2024. 5. 20.
this 레퍼런스, 객체 치환 this: 현재 실행되고 있는 메소드가 속한 객체에 대한 레퍼런스- 컴파일러에 의해 자동 관리- this.멤버 형태로 사용public class Circle{ int raidus; public Cirle(int r){ this.radius = r; } public int getRadius(){ return radius; }}- this는 현재 객체에 대한 레퍼런스이므로, this.radius는 현재 객체의 멤버 radius에 접근한다.this의 필요성 1. 객체의 멤버 변수와 메소드 변수의 이름이 같은 경우public Circle(int radius){ radius=radius; }- 이렇게 작성할 경우 radius=radius;의 두 radius가 모두 Circle(int radius)의 매.. 2024. 5. 14.
생성자 생성자(constructor): 객체가 생성될 때 객체의 초기화를 위해 실행되는 메소드 생성자 선언 및 활용- 생성자는 객체가 생성되는 순간에 자동으로 호출되는 메소드- 객체에 필요한 초기화를 실행하는 코드 포함 1. 생성자의 이름은 클래스 이름과 동일public class Circle{ public Circle(int r, Strint n){...}} 2. 생성자는 여러 개 작성(overloading) 가능- 매개변수의 개수와 타입이 다르다면 클래스 내에 동일한 이름의 생성자를 여러 개 둘 수 있음public class Circle{ public Circle(){...} public Circle(int r){...} public Circle(int r, String n){...}} 3. 생성.. 2024. 5. 14.