Archive

Java Day 9 객체지향 프로그래밍

|

Java Day 9 객체지향 프로그래밍


  1. 객체지향 프로그래밍

    • OOP(Object Oriented Programming)

    • Object, Class, Instance

      • Object : 관념의 객체 (배가 고파서 와플을 생각)
      • Class : 설계도 (와플을 찍어내는 틀)
      • Instance : 개체, 실제의 객체 (먹을 수 있는 와플 한 개)
    • 특징 : 캡슐화(은닉화), 상속, 다형성, 추상화

      • 캡슐화(은닉화) : 객체의 필드, 메소드를 하나로 묶고 구현 내용을 감추는 것
      • 상속 : 상위 객체가 하위 객체에게 필드와 메소드를 물려주는 것
      • 다형성 : 하나의 타입에 여러 객체를 대입함으로써 다양한 기능을 이용하는 것
      • 추상화 : 공통된 속성, 성질을 뽑아내는 것
  2. 클래스

    • 클래스의 구조 : (접근제한자) (클래스 종류) class 클래스명
    • 클래스의 구성 : 필드, 생성자, 메소드
    • 멤버필드 = 필드 = 멤버변수 : 특징, 속성을 담아둔 변수 혹은 상수
    • 생성자 : 외부에서 객체 생성시 초기화를 담당, 안적으면 default
    • 멤버 메소드 : 특정한 일을 수행하는 함수
    public class Car{...}
    Car myCar = new Car(); // new 연산자로 생성자를 호출하여 생성
    
  3. 접근제한자

    • public : 모든 접근 허용
    • protected : 같은 패키지 내에 있는 객체와 상속관계 객체 허용
    • default : 같은 패키지 내에 있는 객체들만 허용 (안적으면 default)
    • private : 현재 객체 내에서만 허용
  4. 메소드

    • instance 메소드와 static 메소드로 나뉨
    • 메소드의 구조 : (접근제한자) (지정어) (반환형) (메소드명) (자료형 인자 ….){수행문}
    • 반환형 : 반환하는 값의 자료형을 의미 =return value, 반환값이 없으면 void
    • 메소드는 입력값으로 parameter 혹은 argument를 받는다
      • Parameter : 매개변수, 메소드 입력 변수명
      • Argument : 인자, 메소드 입력값, 호출시 자료형과 개수 일치해야함
  5. 인자값 전달 방식

    • Call by value (값 호출)

      기본 자료형의 값을 인자로 전달하는 방식

    public class ValueParameter{
    	public int increase(int n){
    		++n;
    		return n;
    	}
    	public static void main(String[] ar){
    		int var1 = 100;
    		ValueParameter vp = new ValueParameter();
    		int var2 = vp.increase(var1);
    		System.out.println("var 1 : "+var1+", var2 : "+var2);
    		}
    }// output : var 1 : 100, var 2 : 101
    

    파라미터로 var1을 받는 순간 static 영역에서 n의 저장소를 만들어서 var1의 값을 받아오고 메소드를 수행한 뒤 var2에 값을 넘겨주고 n은 사라진다.

    • Call by reference (참조 호출)

      참조 자료형의 주소값을 인자로 전달하는 방식

    public class ReferenceParameter{
    	public void increase(int[] n){
    		for(int i=0; i<n.length; i++)
    			n[i]++;
    	}
    	public static void main(String[] ar){
    		int[] ref = {100,200,300};
    		ReferenceParameter rp = new ReferenceParameter();
    		rp.increase(ref);
    		for(int i=0; i<ref.length; i++)
    			System.out.println("ref["+i+"] : "+ref[i]);
    		}
    }// output : ref[0] : 101 ref[1] : 201 ref[2] : 301
    

    ref는 100번지의 주소값으로 heap 영역에 인덱스0,1,2의 값을 참조하고 있다. 파라미터로 ref를 받는 순간 static 영역에 만들어진 n도 동일하게 100번지를 가르키고 있고, 연산을 수행한 뒤 사라진다

    • Variable Arguments (참조 호출의 기능 추가(?))

    java 5.0 에서 추가된 기능으로, …으로 배열로 인자를 받겠다는 것

    인자의 개수가 다를때 쓰인다.

    public class VariableEx{
    	public void argTest(String...n){
    		for(int i=0; i<n.length; i++)
    			System.out.println("n["+i+"] : "+n[i]);
    		System.out.println("--------------------");
    	}
    	public static void main(String[] ar){
    		VariableEx ve = new VariableEx();
    		ve.argTest("1", "22");
    		ve.argTest("100", "220","가나다");
    		}
    }// output : 2개의 인자를 갖는 배열과 3개의 인자를 갖는 배열 생성
    
  6. 메소드 오버로딩

    • 하나의 클래스에서 같은 이름을 갖는 메소드가 여려개 정의되는 것
    • 단, 자료형이 다르거나 인자의 개수가 달라야한다
    public class OverloadingEx{	
    	public void getLength(int n){
    		String s = String.valueOf(n);
    		getLength(s);
    	}
    	public void getLength(float n){
    		String s = String.valueOf(n);
    		getLength(s);
    	}
    	private int getLength(String str){
    		System.out.println("입력한 값의 길이 : "+str.length());
    		return 0;
    	}
    	public static void main(String[] args){
    		OverloadingEx oe = new OverloadingEx();
    		oe.getLength(1000); //output : 4
    		oe.getLength(3.14f); //output : 4
    		oe.getLength("1000"); //output : 4
    	}
    }
    

참고 자료


이것이자바다

자바프로그래밍100% 실전가이드

KG아이티뱅크 자바 강의자료

argument와 parameter 차이점