쉽게 배우는 자바2 - JAVA 객체지향 프로그래밍

최준영·2021년 10월 5일
0

자바

목록 보기
3/8
post-custom-banner

객체 지향 프로그래밍

  • 절차적 프로그래밍 : 메소드를 중심으로 프로그램을 만들어 나가는 프로그래밍
    • 대표적으로 c언어가 있다.
  • 객체 지향 프로그래밍 : 관련있는 변수와 메소드를 모은 수납상자와 같은 클래스를 이용해서 프로그램의 구조를 만들어 가는 방식
  • 객체 지향 언어 : 이러한 방식을 언어 차원에서 지원하는 프로그래밍 언어

클래스

  • 클래스는 관련있는 변수들과 메소드가 묶여있다.

클래스의 형식

  • 클래스는 한 파일에 여러개 넣을 수 있지만, 접근제어자 public은 같은 이름의 클래스에 하나만 붙일 수 있다.
    • 소스 코드를 컴파일 할 때 그 안에 들어있는 클래스는 따로따로 하나씩 class 파일로 만들어진다.

이클립스에서 클래스 추출

  • 이전 챕터에서 이클립스를 활용하여 메소드를 추출한 것처럼 클래스도 가능하다.
  • 영역 선택 -> 우클릭 -> Refactor -> Move Types to new Files...로 하면 된다.

클래스와 인스턴스

  • 클래스는 어떠한 형틀이고, 인스턴스는 그 형틀로 찍어낸 실체와 같다.
  • 클래스를 변경하면 인스턴스에 영향을 주지만, 인스턴스는 변경하더라도 다른 인스턴스들에게 영향을 주지 않는다.
public class OthersOOP {
 
    public static void main(String[] args) throws IOException {
        System.out.println(Math.PI);
        System.out.println(Math.floor(1.8));
        System.out.println(Math.ceil(1.8));
         
        FileWriter f1 = new FileWriter("data.txt");
        f1.write("Hello");
        f1.write(" Java");
         
         
        FileWriter f2 = new FileWriter("data2.txt");
        f2.write("Hello");
        f2.write(" Java2");
        f2.close();
         
        f1.write("!!!");
        f1.close();
    }
}
  • 여기서 클래스는 System, Math, FileWriter이고, 인스턴스는 f1, f2이다.

static 변수와 메소드

  • static 변수/메소드는 클래스에서 생성된 모든 인스턴스가 공유한다.
  • static 변수/메소드는 인스턴스를 만들지 않더라도 클래스에서 직접 호출이 가능하다.
  • static이 아닌 변수/메소드는 클래스에서 바로 접근이 불가능하다. 인스턴스를 생성해야 비로소 접근이 가능하다.
  • 따라서 static 메소드 안에서는 static 유무와 관계없이 변수/메소드 모두 사용 가능하지만, static이 아닌 메소드 안에서는 static 변수/메소드를 사용할 수 없다.

생성자와 this

생성자

  • 클래스는 인스턴스를 생성할 때 클래스의 이름과 같은 이름인 생성자로 인스턴스를 만든다.
    • 생성자를 따로 만들어 주지 않으면 기본 생성자가 자동으로 포함된다. Foo foo = new Foo() // 기본 생성자
  • 인스턴스를 생성할 때 필드를 초기화하는 작업을 같이 하고 싶다면, 생성자에 파라미터를 설정해주면 된다.
    • 생성자는 접근 권한을 설정할 수 있다.
    • 리턴 타입은 명시하지 않는다.

this

  • 생성자도 클래스 내부의 메소드이고, 초기화 할 필드를 파라미터로 넣기 때문에 보통 파라미터명과 필드명이 겹치게된다.
  • 이때 this를 사용하면 겹치는 문제를 해결할 수 있다.
  • this는 해당 인스턴스를 가리키는 예약어다.
class Print {
	public String delimiter = "";
    public Print() {}
	public Print(String delimiter) {
		this.delimiter = delimiter; // this를 사용하여 인스터스 필드를 가리켰다.
	}
    
public class MyOOP {
    public static void main(String[] args) {
        Print p1 = new Print("----"); 
        Print p2 = new Print(); // 기본 생성자로 인스턴스 생성
    }
}
profile
do for me
post-custom-banner

0개의 댓글