Programming 기초/Java

[Java] 객체 지향 프로그래밍

뭉제 2023. 3. 21. 13:00
목차
1. 절차적 프로그래밍
2. 객체 지향 프로그래밍 
3. 클래스와 인스턴스의 활용

 

 

메소드와 절차적 프로그래밍


절차적 프로그래밍(procedural programming)

· 메소드를 중심으로 프로그램을 만드는 프로그래밍

 

메소드는 언어마다 메소드(method), 함수(function), 서브루틴(subroutin), 프로시져(procedure)라는 여러 이름으로 부른다.

대표적인 절차 지향 언어에는 C언어가 있다.

 

· 실행하고자 하는 절차를 정하고, 이 절차대로 프로그래밍하는 방법 -> 목적을 달성하기 위한 일의 흐름에 중점

· 흐름도를 설계하고 흐름도상의 동작들을 함수로 작성하며, 흐름도에 따라 일련의 동작들이 순서대로 실행되도록 작성

 

 

클래스와 객체 지향 프로그래밍


메소드만으로 프로그램을 만드는 것에 부족함이 있어, 서로 연관된 변수와 메소드를 모은 수납상자와 같은 클래스라는 개념을 이용해 프로그램을 만들게 되었다.

 

객체 지향 프로그래밍(object oriented programming)

· 클래스를 이용해 프로그램의 구조를 만들어가는 방식

 

대표적인 객체 지향 언어에는 java가 있다.

 

· 실제 세상의 물체를 객체로 표현하고, 객체들의 관계, 상호작용을 설계한 뒤, 각 객체를 클래스로 작성

· 각각의 객체는 메시지를 주고받고, 데이터를 처리할 수 있다.

 

이렇게 간단한 개념에서부터 인스턴스, 상속, 인터페이스와 같은 다양한 기능들이 가능해지게 되었다.

 


이미 만들어져 있는 클래스와 인스턴스를 이용하면서 개념을 이해해 본다.

 

클래스와 인스턴스의 활용


콘솔 출력을 위해 사용했던 System 클래스와 이름이 out이었던 PrintStream 클래스, Math 클래스, String 인스턴스,

파일 출력을 위해 사용했던 FileWriter 인스턴스 등 모든 것이 클래스의 형태로 이루어져 있다.

 

import java.io.FileWriter;
import java.io.IOException;

public class OthersOOP {
	public static void main(String[] args) throws IOException {
		//class: System, Math, FileWriter
		//instance: f1, f2
		
		System.out.println(Math.PI);
		System.out.println(Math.floor(1.8)); //1.0
		System.out.println(Math.ceil(1.8)); //2.0
		
		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();
	}
}

data.txt
data2.txt

 

· Math 클래스는 수학적 계산을 도와주는 여러 메소드를 포함하고 있다.

  - floor, ceil 메소드, 그리고 클래스의 필드인 PI, 자연상수 E 등

· Math.PI나 Math.floor는 내부적으로 어떤 상태를 계속 유지할 필요X (필요할 때마다 쓰는 일회용)

=> 메소드와 변수는 인스턴스를 생성하지 않아도 클래스에서 직접적으로 호출 가능

 

· FileWriter 클래스는 파일을 열어서 원하는 내용을 입력할 수 있는 기능들을 제공한다.

  - 각각의 파일에 해당하는 인스턴스를 생성해 write 메소드로 쓰기 작업을 수행하고 close 메소드로 파일을 닫는다.

· f1은 FileWriter의 복제본으로 data.txt 파일에 내용을 저장한다는 상태를 유지 -> 작업을 계속해서 추가 가능

=> 메소드와 변수는 인스턴스를 생성해 사용해야 하고 클래스에서 직접적으로 호출 불가

 

즉 작업이 일회용인 경우 클래스 자체를 사용하고, 긴 작업인 경우에는 클래스의 복제본을 만들어 제어한다.