JAVA 문법#2

18011 단어 자바Java문법Java

객체지향 프로그래밍(Object Oriented Programming)

  • 객체: 주체가 아닌 것, 주체가 활용하는 것
    우리 주변에 있는 모든 것
  • 객체지향 프로그래밍
    - 주변에 있는 것들을 객체화해서 프로그래밍 하는 것

OOP의 장점

  • 재사용성 증가.
  • 추가/수정/삭제가 편리.
  • 신뢰성 높은 프로그래밍 가능.

현실의 객체, 클래스, 프로그램에서의 객체

실생활에서 구체화 되어있는 현실의 객체의 속성과 기능을 추상화(abstraction)하여 클래스에 정의.
클래스는 구체화 되어 프로그램의 객체(object, instance)가 됨.

  • 클래스(class): 객체를 정의해 놓은 틀. 객체를 생성하기 위한 틀.
  • 객체(object, instance): 클래스를 이용하여 메모리에 생성된 것.

ex) Dog 클래스

public class Dog {
    String species;
    int age;
    String name;
    
    void eat() {
        System.out.println("밥먹는다 멍멍");
    }
    
    void shout() {
        System.out.println("짖는다 왈왈!");
    }
}

// 클래스 사용
public class DogTest {
    public static void main(String args[]) {
        Dog dog1 = new Dog();  // 객체 생성
        dog1.species = "pomeranian";
        dog1.age = 3;
        do1.name = "폼폼";
        
        dog1.eat();    // 밥먹는다 멍멍
        dog1.shout();  // 짖는다 왈왈!
        
        Dog dog2 = new Dog();  // 객체 생성
        dog1.species = "yorkshire terrier";
        dog1.age = 2;
        do1.name = "욬욬";
        
        dog1.eat();    // 밥먹는다 멍멍
        dog1.shout();  // 짖는다 왈왈!
        
        // dog1과 dog2는 각각 다른 강아지. 객체 별로 다른 상태를 가짐.
    }
}
  • dog1에는 힙 영역에 존재하는 메모리의 주소값이 들어감.
  • dog2에도 힙 영역에 존재하는 새로운 메모리의 주소값이 들어감.

변수의 선언 위치에 따른 분류

종류변수종류선언위치
멤버변수클래스 멤버변수클래스 영역
인스턴스 멤버 변수클래스 영역
지역변수지역변수함수 내부
파라미터 변수함수 선언부
public class Vari {
    static int no;  // 클래스 멤버 변수
    int age;        // 인스턴스 멤버 변수
    
    void hi(String message) {  // 파라미터 변수
        System.out.println(message);
    }
    
    public static void main(String[] args) {
        int x = 3;  // 로컬 변수
        if (x > 1) {
            String s = "정답";  // 로컬 변수
            System.out.println(s);
        }
    }
}

인스턴스 멤버 변수

  • 클래스 영역에 선언.
  • 객체가 생성 될때 메모리에 생성됨. (heap영역에 생성)
  • 타입 별로 default 값으로 초기화 됨.
  • Garbage Collector에 의해 객체가 소멸될 때 같이 소멸.
  • 객체이름.변수명 으로 접근 ex) vair1.age

클래스 멤버 변수(공유 변수)

  • 클래스 영역에 선언.
  • 앞에 static 키워드 붙임.
  • 클래스 영역에 클래스가 로딩될 때 메모리에 생성.
    • 객체 각각의 생성과는 무관.
    • 모든 객체가 공유.
  • 타입 별로 default 값으로 초기화 됨.
  • 프로그램 종료 시 소멸.
  • 클래스이름.변수명 으로 접근 ex) Vari.no

지역 변수 & 파라미터 변수

  • 클래스 영역의 {} 이외의 모든 중괄호 안에 선언. ex) 메소드, 생성자, 초기화 블록
  • 선언된 라인이 실행될 때 생성됨. (thread 별로 생성된 stack 영역)
  • 사용하기 전 명시적 초기화가 필요.
  • 선언된 내부에서 변수 이름으로 접근 가능.(외부에서는 접근 불가)
  • 선언된 영역을 벗어나면 소멸.

메소드

  • 현실의 객체가 하는 동작을 프로그래밍 화 시킨 것.
  • 명령문의 집합.

메소드의 장점

  • 코드의 중복 방지, 유지 보수 용이

메소드의 접근

  • 멤버 변수와 마찬가지로 static, non-static을 구분해서 호출.
  • 메모리에 있으면 호출 가능, 메모리에 없으면 호출 불가.
  • static member -> 클래스 로딩 시 자동 등록되기 때문에 언제나 메모리에 있음.
  • instance member -> 객체 생성 전에는 메모리에 없음.
    • 객체 생성 후 , 그 객체를 통해서 접근해야 함.

메소드 오버로딩(overloading)

  • 동일한 기능을 수행하는 같은 이름의 메소드를 추가.
  • 파라미터의 타입이나 순서, 개수가 달라야 함.(리턴 타입은 의미 없음)
  • 중복 코드 제거할 수 있음.
// 파라미터의 타입과 개수가 같으므로 중복 선언 오류. (overloading 아님)
int mul(int a, int b) {return a * b;}
int mul(int x, int y) {return x * y;}

// 리턴 타입이 달라도 파라미터의 타입과 개수가 같으므로 중복 선언 오류. (overloading 아님)
int mul(int x, int y) {return x * y;}
long mul(int x, int y) {return x * y;}

// 파라미터 타입의 순서가 다르므로 overloading
long mul(int a, long b) {return a * b;}
long mul(long a, int b) {return a * b;}

생성자(Constructor)

  • 객체 생성 시 자동으로 호출되는 메소드의 일종.
  • new 키워드와 동시에 호출됨.
  • 멤버 변수의 초기화나 객체 생성 시 실행되어야 하는 로직 실행.
  • 리턴 타입이 없고 이름은 클래스 이름으로 작성.
public class Dog {
    String species;
    int age;
    String name;
    
    public Dog() {}   //기본 생성자. 이 코드가 없으면 컴파일러가 자동으로 생성.
    public Dog(String species, int age) {    // 파라미터가 있는 생성자. 파라미터가 있는 생성자를 만들면 기본 생성자는 자동으로 생성되지 않음.
        this.species = species;    //this 키워드
        this.age = age;
    }
    
    public Dog(String species, int age, String name) {
        this(species, age);    //this() 사용
        this.name = name;
    }
    
    void eat() {
        System.out.println("밥먹는다 멍멍");
    }
    
    void shout() {
        System.out.println("짖는다 왈왈!");
    }
}

this.

  • 객체 자신을 가리키는 키워드.
  • this.변수명 을 이용해 자신의 멤버에 접근 가능.
  • 객체에 대한 참조이기 때문에 static 영역에서는 사용 불가.

this()

  • 생성자도 오버로딩 가능.
  • 객체 내의 한 생성자에서 다른 생성자를 호출할 때 사용.
  • 객체 자신의 생성자를 호출.(파라미터에 맞는 생성자 호출)

좋은 웹페이지 즐겨찾기