Published 2020. 4. 13. 13:44
728x90
반응형

클래스


객체를 정의해 놓은 것. 객체의 설계도, 틀.
사물이나 개념의 공통 요소(속성, 기능)를 용도에 맞게
추상화(abstraction) 함.

 


추상화(abstraction)


프로그램에서 필요한 기능/속성을 추출하고, 불필요한 것을 제거하는 과정

 


클래스 작성


추상화(abstraction) → 클래스 작성
추상화한 결과물을 객체 지향 프로그래밍 언어를 사용해서
변수명(데이터이름)과 자료형(데이터타입)을 작성.

 


클래스 선언 


[접근제한자] [예약어] class 클래스명{ 
[접근제한자] 자료형 변수명; //속성
[접근제한자] 자료형 변수명; //속성

[접근제한자] 생성자명(){}

[접근제한자][예약어]리턴형 메소드명(){ //기능정의 } //기능
}

예제>
public class Person{ 
    private String name; 
    private int age; 

    public Person(){}
    public String getName(){ 
            return name; 
    } public void introduce(){
            System.out.println(”반갑습니다. “ +age+”살, “+name+”입니다.”); 
    }
}

 


객체지향 3대 원칙


캡슐화(encapsulation)
상속(inheritance)
다형성(polymorphism)

 

캡슐화 원칙


필드 : 클래스의 멤버 변수에 대한 접근권한은 private을 원칙으로 함
메소드 : 클래스의 멤버 변수에 대한 연산처리를 목적으로 하는 메소드를 클래스 내부에 작성하고, 

           클래스 밖에서 접근할 수 있도록 public으로 설정함

 


변수의 선언위치에 따라 구분


1. 클래스변수 : 클래스영역에 static키워드를 가짐. 
2. 멤버변수(인스턴스변수) : 클래스영역에 선언.
3. 지역변수 : 클래스영역이 아닌, 메서드, 생성자, 초기화블럭내부에서 선언

 


필드예약어


final : 하나의 값만 계속 저장해야 하는 변수에 사용 표현식 
[접근제한자] final 자료형 변수명 = 초기값; 

 


클래스 초기화블럭


{  } : 클래스의 멤버 변수를 초기화 시키는 블록
static 블록 : static 필드 초기화, 프로그램 시작시 초기화 
인스턴스 블록 :  인스턴스변수 초기화, 객체 생성시 마다 초기화


표현식 >
접근제한자 class 클래스명 { 
    접근제한자 static 자료형 필드명; 
    접근제한자 자료형 필드명; 
    static{ 필드 = 초기값 };
    { 필드 = 초기값 };
}

 


초기화 순서


JVM기본값 → 명시적 초기값 → 클래스or인스턴스 초기화 블록 초기값

 


메소드 


수학의 함수와 비슷하며 호출을 통해 사용


표현식>
[접근제한자][예약어] 반환형 메소드명(매개변수){ //실행내용 작성 }

 


메소드의 예약어


static : static 영역에 할당하여 객체 생성 없이 사용
final : 종단의 의미, 상속시 오버라이딩 불가능
abstract : 미완성된, 상속하여 오버라이딩으로 완성시켜 사용해야 함
syncronized : 동기화처리, 공유 자원에 한 개의 스레드만 접근 가능함
static final (final static) : static과 final의 의미를 둘 다 가짐

 


메소드 호출 


표현식>
매개변수 있는 경우 : 참조형 변수명.매소드명 (매개변수); 
매개변수 없는 경우 : 참조형 변수명.매소드명();

 


this


모든 인스턴스의 메소드에 숨겨진 채 존재하는 지역변수로, 해당 객체의 주소값을 담고 있음
매개변수를 가지는 생성자 또는 메소드에서 매개변수명이 필드명과 같을 경우 매개변수의 변수명이 우선하기 때문에 this를 활용해서 매개변수와 필드를 구분

 

 

클래스 생성자 

 

new 연산자를 통해 실행되는 메소드로써, 객체가 heap에 할당될 때 객체안에서 만들어지는 필드의 초기화를 담당
생성자를 통해 전달된 초기값이 있다면, 이를 필드에 기록
객체 생성시 전달 받은 값으로 객체를 초기화 하기 위해 사용함
매개변수 있는 생성자 작성시 JVM이 기본 생성자 자동 생성 하지 않음
상속 사용시 반드시 기본 생성자를 작성해야 함
오버로딩을 이용하여 작성함

 


this()란


생성자, 같은 클래스의 다른 생성자를 호출할 때 사용
** 반드시 첫번째 줄에 선언해야 함


예>
class Student{ 
    int age; 
    String name;

    public Student(){ 
            this(20, “김철수”); 
    } 
public Student(int age, String name){  
    this.age = age; 
    this.name = name; 
    }
}

 


클래스 초기화 순서


JVM기본값 → 명시적 초기값 → 클래스or인스턴스 초기화 블록 초기값 → 생성자를 통한 초기값

 


오버로딩 Overloading


한 클래스 내에서 파라미터선언부가 다르고, 이름이 같은 메서드를 여러 개 정의하는 것.


오버로딩 성립조건 2가지 
1.메소드 이름이 같아야한다. 
2.매개변수 선언부가 달라야한다. - 매개변수의 타입, 개수, 순서
오버로딩 주의점 
1.매개변수명은 상관치 않는다.  
2.리턴타입은 오버로딩시 상관치 않는다.

 


클래스 예약어


final

변경될 수 없는 클래스, 상속 불가 


예> 
public final class 클래스명 { ……… }

abstract

클래스내 추상 메서드가 선언되어있는 추상클래스, 반드시 후손이 완성해야 함 


예>
public abstract class 클래스명 { 
    abstract 리턴값 메소드명(매개변수); 
    abstract 리턴값 메소드명(매개변수); 


 

Has a 포함관계


한 클래스의 멤버변수로 다른 클래스타입의 참조변수를 선언
Circle has a Point이면
Circle클래스는 Point클래스를 가지고 있음(has a 포함관계)

 


객체배열


객체를 저장하는 배열로 기본 자료형 배열과 선언과 할당이 동일하고 자료형 부분에 클래스명으로 지정하여 활용


선언>
클래스명[] 변수명; 
클래스명 변수명[];


할당>
변수명 = new 클래스명[배열크기];
할당 후 값 저장


예>
arr[0] = new Example(); 
arr[1] = new Example(); 


선언과 동시에 할당 및 초기화>
클래스명 변수명[] = {new 클래스명(), new 클래스명(), …};


예>
Student stdtArr[] = {new Student(), new Student(), new Student()}

 


상속


다른 클래스가 가지고 있는 멤버(필드와 메소드)들을 새로 작성할 클래스에서 직접 만들지 않고, 상속을 받음으로써 새 클래스가 자신의 멤버처럼 사용할 수 있는 기능 
자바는 단일 상속만을 지원함(클래스간의 관계가 명확하고 신뢰성 있는 코드 작성 가능)
부모 클래스의 생성자, 초기화 블럭은 상속 안됨(부모클래스 생성자 호출을 명시하고 싶으면 super()활용)


상속의 장점
1. 보다 적은 양의 코드로 새로운 클래스를 작성 가능 
2. 코드를 공통적으로 관리하기 때문에 코드의 추가 및 변경이 용이함 
3. 코드의 중복을 제거하여 프로그램의 생산성과 유지보수에 크게 기여함

 


Is a 상속관계


Circle is a Shape
Circle클래스는 하나의 Shape클래스임(is a 상속관계)
Has a/Is a 관계
Circle is a Shape. → Circle클래스는 하나의 Shape클래스
Circle has a Point. → Circle클래스는 Point클래스를 가지고 있음

 


super


super() 

부모객체의 생성자를 호출하는 메소드
명시적으로 부모객체의 생성자를 호출할 부모 생성자가 가장 먼저 실행이 되어야 하기 때문에 반드시 첫 줄에만 작성할 수 있음
매개변수가 있는 부모생성자 호출은 super(매개변수,매개변수)를 넣으면 됨


super.

부모객체의 주소가 있는 참조변수로 생각하면 됨
자식 클래스 내에서 부모클래스 객체에 접근하여 필드나 메소드를 호출할 때 사용

 


오버라이딩(overriding) 


자식 클래스가 상속받은 부모 메소드를 재작성하는 것을 말함
자식객체를 통한 실행 시 후손 것이 우선권을 가짐(동적바인딩)
메소드 헤드라인 위에 반드시 Annotation 표시 (@Override)
부모메소드의 접근제어자 수정 가능(부모의 것보다 같거나 넓은 범위로만 변경 가능)
부모메소드의 예외처리 클래스 개수 수정 가능(부모 메소드의 예외처리 클래스 개수보다 크거나 처리범위가 넓으면 안됨)

 


오버라이딩 성립요건


부모 클래스의 메소드와 자식 클래스의 메소드 비교 
- 이름이 동일
- 매개변수의 개수와 타입 동일
- 리턴 타입 동일
- private 메소드의 오버라이딩은 불가능

 


바인딩


실제 실행할 메소드 코드와 호출하는 코드를 연결시키는 것
프로그램이 실행되기 전에 컴파일이 되면서 모든 메소드는 정적 바인딩 됨


동적바인딩
컴파일시 정적바인딩된 메소드를 실행할 당시의 객체 타입을 기준으로 바인딩 되는 것을 동적 바인딩이라고 함
동적바인딩 성립 요건 
상속 관계로 이루어져 다형성이 적용된 경우에, 메소드 오버라이딩이 되어 있으면 정적으로 바인딩 된 메소드 코드보다 오버라이딩 된 메소드 코드를 우선적으로 수행하게 됨

반응형
복사했습니다!