다형성 (Polymorphism)객체 지향 프로그래밍의 대표적인 특징으로 캡슐화, 상속, 다형성이 있다.다형성 : 한 객체가 여러 타입의 객체로 취급될 수 있는 능력을 의미한다.다형적 참조부모 타입의 변수가 자식 인스턴스를 참조하는 것을 다형적 참조라고 한다.하나의 변수 타입으로 다양한 자식 인스터스를 참조할 수 있는 기능class Parent { public void parentMethod() { // 내용 생략 }}class Child extends Parent { public void childMethod() { // 내용 생략 }}//다형적 참조Parent poly = new Child();poly.parentMethod();다형적 참조는 부모 타입의 변수로 자식 인스턴스를 참조하는 것이다.자..
상속상속은 객체 지향 프로그래밍의 핵심 요소 중 하나기존 클래스의 필드와 메소드를 새로운 클래스에서 재사용하게 해준다.기존 클래스의 속성과 기능을 그대로 물려받는 것.모든 자식 클래스에게 필요한 기능은 부모 클래스에만 추가하면 된다.상속 관계 덕분에 공통 기능을 부모에서 관리하므로 중복을 줄일 수 있다.상속을 사용하려면 extends 키워드를 사용하며 대상은 하나만 선택할 수 있다. 부모 클래스 (슈퍼 클래스) : 상속을 통해 자신의 필드와 메소드를 다른 클래스에 제공하는 클래스자식 클래스 (서브 클래스) : 부모 클래스로부터 필드와 메소드를 상속받는 클래스부모의 기능을 상속 받는다 = 부모의 기능을 확장한다 두 가지 표현으로 사용한다.화살표 방향이 자식 -> 부모로 향하고 있다.상속 받는 자식 클래스에..
Final//final 지역 변수final int data1;data1 = 10; //최초 한번만 할당 가능final int data2 = 10;final 지역 변수final을 지역 변수에 설정할 경우 최초 한 번만 값을 할당할 수 있다.선언 시 바로 초기화 한 경우도 마찬가지로 그 이후 값을 할당할 수 없다.이후 변수의 값을 변경하려고 하면 컴파일 오류 발생매개 변수에 final이 붙으면 메소드 내부에서 매개 변수의 값을 변경할 수 없다.메소드 호출 시점에 전달받은 인수 값 그대로 사용해야한다. class Init { final int value; Init(int value){ this.value = value; }}class Init2 { final int v..
자바 메모리 구조자바 메모리 구조는 3개로 나뉜다.메소드 영역 : 클래스 정보를 보관하는 영역스택 영역 : 실제 프로그램이 실행되는 영역으로 메소드를 실행할 때마다 하나씩 쌓인다.힙 영역 : 객체가 생성되는 영역으로 new 명령어 사용 시 힙 영역이 사용된다. 메소드 영역프로그램을 실행하는데 필요한 공통 데이터를 관리하며 프로그램의 모든 영역에서 공유한다.클래스의 메소드는 코드가 동일하고 필드와 같이 따로 관리할 필요가 없기에 메소드 영역에서 공통으로 관리되고 실행된다.클래스 정보 - 클래스의 실행 코드(바이트 코드), 필드, 메소드와 생성자 코드등 모든 실행 코드가 존재한다.static 영역 - static 변수들을 보관한다.런타임 상수 풀 - 프로그램을 실행하는데 필요한 공통 리터럴 상수를 보관한다...
접근 제어자접근 제어자의 핵심은 멤버 변수(속성)와 메소드(기능)을 외부로부터 숨기는 것이다.접근 제어자는 멤버 변수, 메소드, 생성자에 사용된다.일부 클래스 레벨에서도 사용할 수 있다.지역 변수에는 사용할 수 없다. 접근 제어자 종류private : 모든 외부 호출을 막는다.해당 클래스 내에서만 호출할 수 있다.default (package-private) : 같은 패키지 안에서 호출은 허용한다.접근 제어자를 명시하지 않는 경우 적용된다.protected : 같은 패키지와 상속 관계의 호출은 허용한다.public : 모든 외부 호출을 허용한다.private -> default -> protected -> public 순으로 허용 범위가 크다. class Student { private String na..
패키지패키지 : 자바에서 구분하기 쉽게 분류하기 위한 폴더 / 디렉토리 기능패키지를 사용하는 경우 항상 코드 첫줄에 package 패키지명을 적어줘야 한다.패키지를 구성할 때 서로 관련된 클래스는 하나의 패키지에 모으고 관련 없는 클래스는 다른 패키지로 분리시키는 것이 좋다.//같은 패키지의 Data 클래스Data data = new Data();//다른 패키지의 Data 클래스pack.a.Data data = new pack.a.Data();같은 패키지 내 소속된 경우패키지 경로를 생략해도 된다.다른 패키지의 경우전체 경로를 포함해서 클래스를 적어줘야한다. package pack//pack.b.Data 클래스 사용 가능import pack.b.Data;//pack.a 패키지 내 모든 클래스 사용 가능i..
생성자객체를 생성하자마자 초기값을 할당하는 등의 즉시 필요한 기능을 더 편리하게 수행할 수 있도록 제공하는 기능public class MemberConstruct { String name; int age; int grade; MemberConstruct(String name, int age, int grade) { System.out.println("생성자 호출 name = " + name + ", age = " + age + ", grade = " + grade); this.name = name; this.age = age; this.grade = grade; }}생성자는 메소드와 비슷한 형태를 가지고 있다.생성자 명은 클래스..
객체 지향 프로그래밍절차 지향 프로그래밍 vs 객체 지향 프로그래밍서로 반대되는 개념이 아니고 어디에 더 초점을 두는지의 차이절차 지향 프로그래밍 : 실행 순서를 중요하게 생각하는 방식"어떻게"를 중심으로 프로그래밍 한다.객체 지향 프로그래밍 : 객체를 중요하게 생각하는 방식"무엇을" 중심으로 프로그래밍 한다.모든 사물을 속성과 기능을 가진 객체로 생각하는 것차이점절차 지향은 데이터와 데이터에 대한 처리 방식이 분리되어 있다.객체 지향은 데이터와 데이터에 대한 행동(메소드)이 하나의 객체에 포함되어 있다. 클래스는 속성(데이터 / 멤버 변수)과 기능(메소드)를 정의할 수 있다.객체는 자신의 메소드를 통해 자신의 멤버 변수에 접근할 수 있다.객체 메소드 내부에서 접근하는 멤버 변수는 객체 자신의 멤버 변수..
기본형과 참조형변수 - 기본형 / 참조형 변수로 분류된다.기본형 변수 : 사용하는 값을 직접 넣을 수 있다.해당 값을 바로 사용할 수 있다.참조형 변수 : 객체가 저장된 메모리의 위치를 가리키는 참조 값을 넣을 수 있다.기본형 변수를 제외한 모든 변수로 객체, 배열 등에 사용된다.객체는 .을 통해 객체에 접근해서 값을 사용할 수 있다.배열은 []를 통해 배열에 접근해서 값을 사용할 수 있다. ★ ★ ★ ★ ★ 자바 대원칙: 자바는 항상 변수의 값을 복사해서 대입한다!! ★ ★ ★ ★ ★ 기본형 => 변수에 들어있는 실제 사용하는 값을 복사해서 대입한다.참조형 => 변수에 들어있는 참조 값을 복사해서 대입한다. int a = 10;int b = a;기본형 변수 b에는 변수 a의 값인 10을 복사하여 대입한..
클래스 (Class)사람의 입장에서 데이터를 쉽고 직관적으로 관리하기 위해서 도입된 개념이다.사용자가 직접 정의하는 사용자 정의 타입을 만들기 위한 설계도가 "클래스"ex) "학생"이라는 타입을 만들어서 관리하기 위해서 "학생" 클래스를 만든다. 클래스 = 객체를 생성하기 위한 '틀', '설계도' 객체가 가져야할 변수(속성), 메소드(기능)를 정의한다.객체는 클래스에서 정의한 변수(속성)와 메소드(기능)를 가진 실체 class Student { String name; int age; int grade;}클래스 내부에 정의한(소속된) 변수들을 멤버 변수, 필드라고 한다.클래스 명은 관례에 따라 대문자로 시작, Camel Case로 작성한다.ex) UniversityStudent Student..