728x90
객체지향과 절차지향

 

  • 객체지향
    객체를 만들어 순서에 연연하지 않고 자주 쓰거나 필요한 부품은 따로 정의하여 모듈화 하는 등의
    장점을 가진 방법.
    객체의 호출 순서에만 영향을 받는다.

  • 절차지향
    하나의 로직을 순서대로 진행하여 처리하는 방법

객체지향 프로그래밍의 특징

 

  1. 캡슐화 :
    캡슐화 = 보안 = 보호
    관련된 데이터(필드)와 기능(메소드)이 하나의 묶음으로 관리된다.
  2. 상속
    이미 작성된 부모 클래스를 이어받아 새롭게 만드는 것
    자식 클래스는 부모 클래스의 모든 속성(필드)과 동작(메소드)을 사용할 수 있다.
    부모 클래스에 없는 기능은 자식 클래스에 추가해 사용한다.
  3. 추상화
    실제 객체를 인스턴스화 할 때, 불필요한 것을 제외하고 필요한 것만 유지한다.
  4. 다형성
    파라미터나 상황에 따라 객체의 동작이 변경되는 것

지역변수와 인스턴스변수

 

  • 지역 변수
    메소드 괄호{ } 안에서 선언, 괄호가 닫히면 사라진다.
    사용하기 전 초기화 필수

  • 인스턴스 변수 (멤버 변수)
    클래스 바디에 생성
    직접 초기화하지 않아도 자바 프로그램에서 자동으로 초기값을 넣어준다.
    ※ 숫자형 변수이면 0으로 처리 (정수형 : 0 , 실수형 : 0.0, 문자형 : 0, 논리형 : false)
         참조형 변수(String)이면 null로 처리

객체와 인스턴스와 클래스

 

  • 객체 : 현실에 존재하는 모든 사물들
  • 인스턴스(instance) : 클래스에 의해 메모리 상에 생성된 객체
    (특정 객체가 어떤 클래스의 객체인지를 관계 위주로 설명할 때 사용)
    ex) Animal a1 = new Animal( ); 에서 "a1은 객체", "a1은 Animal의 인스턴스"
  • 클래스 : 객체를 컴퓨터에서 구현하기 위해 필요한 설계도

이해하기 쉽게 클래스는 쿠키 틀로, 객체(인스턴스)는 쿠키로 예를 들 수 있다.

ex) 

<Animal 클래스의 인스턴스 a1 ~ a5>

Animal a1 = new Animal();
Animal a2 = new Animal();
Animal a3 = new Animal();
Animal a4 = new Animal();
Animal a5 = new Animal();

 


메소드

 

클래스 속에 존재하며 어떤 기능을 수행하는 명령 문장들

 

메소드를 정의하고 해당 기능이 필요할 때 메소드를 호출해서 사용함으로써

같은 명령을 수행할 때 반복적으로 코딩하지 않아도 된다.

 

 

ex)

public static void main(String[]args) {
	메소드 내용
}

public : 접근지정자

static : 접근지정자

void : 리턴타입 (반환형태)

main : 메소드명

 

 

접근지정자의 종류

 

  • public : 공개, 모든 클래스에서 접근 가능
  • private : 비공개, 멤버가 선언된 최상위 클래스 내에서만 접근 가능
  • 생략 : default와 같다. 멤버가 선언된 클래스가 속한 패키지 내에서 접근 가능
  • protected : 같은 패키지와 다른 패키지의 자식 클래스에서 접근 가능

  • static 변수선언 : 클래스 변수가 되어 클래스명.변수명 으로 호출
  • static 메소드선언 : 클래스 메소드가 되어 클래스명.메소드명 으로 호출

  • final 변수선언 : 변수가 상수로 동작, 초기화 이후 변경 불가
  • final 메소드선언 : 상속받은 하위 클래스에서 메소드 오버라이딩 불가

  • abstract 메소드선언 : 추상메소드, 하위클래스에서 구현
  • synchronized 메소드선언 : thread 동기화용 메소드

리턴타입(반환형태)

 

리턴할 값이 없을 때에는 void

리턴할 값이 있을 때에는 반드시 리턴되는 값의 타입을 명시해주어야 한다. ex) int, String....

메소드 실행 중에 return이 된다면, return 이후의 실행은 무시되고 메소드가 종료된다.

 


예제 1.

<객체 만들고 사용하기>

public class OOP01 {
	int number;
	
	public static void main(String[] args) {
		
		Apple a1 = new Apple();			//Apple클래스의 인스턴스 a1 만들기
		a1.print();				//a1 객체의 메소드 print() 사용하기
		
		System.out.println("===============");
		
		OOP01 oop01 = new OOP01(); 		//OOP01클래스의 인스턴스 oop01 만들기
		
		oop01.print2();
		
		int p3 = oop01.print3();
		System.out.println(p3);
		
		String p4 = oop01.print4();
		System.out.println(p4);
		
		double p5 = oop01.print5();
		System.out.println(p5);
        
		System.out.println("===============");
		
		System.out.println(oop01.number); 
		
		oop01.number = 1000;
		System.out.println(oop01.number); 
		
	}						//main메소드 종료

	void print2() {
		System.out.println("코딩일기");
	}
	
	int print3() {
		return 1;
	}
	
	String print4() {
		return "Hello";
	}
	
	double print5() {
		return 3.14;
	}
}							//OOP01클래스 종료

class Apple{						//Apple클래스 선언
	public void print() {				//print( ) 메소드 선언
		System.out.println("Apple클래스 코드");	//명령어 코드	
	}
}

[실행결과]

Apple클래스 코드
===============
코딩일기
1
Hello
3.14
===============
0
1000

예제 2.

<객체 만들고 사용하기 2>

package oop;

class NoteBook{
	String game;
	String power;
	int memory = 1024;
	
	void runGame() {
		System.out.println(game + "을 실행합니다.");
	}
	
	void power(String stats) {			//stats : 가상변수
		System.out.println("노트북 : " + stats);
	}
	
	int addMemory(int memory) {			//지역 가상 변수
		memory += this.memory;			//인스턴스 변수 (this = 현재 클래스에 있는)
		return memory;
	}
}

public class OOP02 {
	public static void main(String[] args) {
		
		NoteBook lg = new NoteBook();
		
		lg.power("On");
		lg.game = "diablo4";
		lg.runGame();
		int result = lg.addMemory(1024);
		System.out.println("1024를 추가하면 " + result + "가 됩니다.");
		
		NoteBook ss = new NoteBook();
		lg.memory += 2048;
		System.out.println(lg.memory);
		System.out.println(ss.memory);
		System.out.println(ss.game);
	}	
}

[실행결과]

노트북 : On
diablo4을 실행합니다.
1024를 추가하면 2048가 됩니다.
3072
1024
null

예제 3.

<다른 패키지의 객체 사용하기>

 

oop 패키지

package oop;

public class Apples {
	public static void main(String[] args) {
		
	Apple a1 = new Apple();		 	//현재 패키지 속의 Apple클래스의 인스턴스 a1
	apple.Apple a2 = new apple.Apple(); 	//apple패키지 속의 Apple클래스의 인스턴스 a2
	com.poseidon.apple.Apple a3 = new com.poseidon.apple.Apple();

	a1.print();
	a2.print();
	a3.print();

       /*Apple apple = new Apple(); 의 형태로 다른 패키지 속의 Apple클래스를 사용하고 싶다면 
       반드시 import를 해주어야 한다
	ex)apple.Apple 를 import 했을 경우 a1.print();의 출력값은
	apple패키지 속의 Apple 가 된다*/

 

oop 패키지

package oop;

public class Apple{	
	public void print() {	
		System.out.println("현재 패키지 속의 Apple클래스");
	}
}

 

apple 패키지

package apple;

public class Apple {
	public void print() {
		System.out.println("apple패키지 속의 Apple클래스");
	}
}

 

com.poseidon.apple 패키지

package com.poseidon.apple;

public class Apple {
	public void print() {
		System.out.println("com.poseidon.apple패키지 속의 Apple클래스");
	}
}

 

[Apples 실행결과]

현재 패키지 속의 Apple클래스
apple패키지 속의 Apple클래스
com.poseidon.apple패키지 속의 Apple클래스

예제 4.

<set, get>

class Animal{						//클래스 선언
	String name;
	int age;
	
	public void setName(String name) {		//저장 (set)
		this.name = name;
	}
	
	public String getName() {			//값 불러오기 (get)
		return this.name;
	}
}

public class OOP03 {

	public static void main(String[] args) {
		
		Animal r2d2 = new Animal();		//인스턴스 생성
		System.out.println(r2d2.name);		//기본값 null
		System.out.println(r2d2.age);		//기본값 0
		System.out.println("========");
		r2d2.name = "R2D2";
		
		Animal cat = new Animal();
		cat.name = "동수";
		
		Animal dog = new Animal();
		dog.name = "3PO";
		
		System.out.println(r2d2.name);
		System.out.println(cat.name);
		System.out.println(dog.name);
		
		cat.setName("수동");
		String name = cat.getName();
		System.out.println(name);
	}
}

[실행결과]

null
0
========
R2D2
동수
3PO
수동

'JAVA' 카테고리의 다른 글

오버라이드 (Override)  (0) 2021.07.18
스태틱 (Static)  (0) 2021.07.18
MessageFormat  (0) 2021.07.14
currentTimeMillis  (0) 2021.07.14
Date / Calendar / SimpleDateFormat  (0) 2021.07.14

+ Recent posts