Java Day 9 객체지향 프로그래밍
11 Dec 2020 | JavaJava Day 9 객체지향 프로그래밍
-
객체지향 프로그래밍
-
OOP(Object Oriented Programming)
-
Object, Class, Instance
- Object : 관념의 객체 (배가 고파서 와플을 생각)
- Class : 설계도 (와플을 찍어내는 틀)
- Instance : 개체, 실제의 객체 (먹을 수 있는 와플 한 개)
-
특징 : 캡슐화(은닉화), 상속, 다형성, 추상화
- 캡슐화(은닉화) : 객체의 필드, 메소드를 하나로 묶고 구현 내용을 감추는 것
- 상속 : 상위 객체가 하위 객체에게 필드와 메소드를 물려주는 것
- 다형성 : 하나의 타입에 여러 객체를 대입함으로써 다양한 기능을 이용하는 것
- 추상화 : 공통된 속성, 성질을 뽑아내는 것
-
-
클래스
- 클래스의 구조 : (접근제한자) (클래스 종류) class 클래스명
- 클래스의 구성 : 필드, 생성자, 메소드
- 멤버필드 = 필드 = 멤버변수 : 특징, 속성을 담아둔 변수 혹은 상수
- 생성자 : 외부에서 객체 생성시 초기화를 담당, 안적으면 default
- 멤버 메소드 : 특정한 일을 수행하는 함수
public class Car{...} Car myCar = new Car(); // new 연산자로 생성자를 호출하여 생성
-
접근제한자
- public : 모든 접근 허용
- protected : 같은 패키지 내에 있는 객체와 상속관계 객체 허용
- default : 같은 패키지 내에 있는 객체들만 허용 (안적으면 default)
- private : 현재 객체 내에서만 허용
-
메소드
- instance 메소드와 static 메소드로 나뉨
- 메소드의 구조 : (접근제한자) (지정어) (반환형) (메소드명) (자료형 인자 ….){수행문}
- 반환형 : 반환하는 값의 자료형을 의미 =return value, 반환값이 없으면 void
- 메소드는 입력값으로 parameter 혹은 argument를 받는다
- Parameter : 매개변수, 메소드 입력 변수명
- Argument : 인자, 메소드 입력값, 호출시 자료형과 개수 일치해야함
-
인자값 전달 방식
-
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개의 인자를 갖는 배열 생성
-
-
메소드 오버로딩
- 하나의 클래스에서 같은 이름을 갖는 메소드가 여려개 정의되는 것
- 단, 자료형이 다르거나 인자의 개수가 달라야한다
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 } }
참고 자료
KG아이티뱅크 자바 강의자료