신입 자바 개발자가 갖춰야 할 기본 지식이라 생각하는 이론요소들을 정리해보았습니다.
수정할 부분이 있거나 추가로 알아야하는 것들이 있다면 댓글로 작성 부탁드려요.
// Java에서의 객체는 아래와 같이 Class로 정의됩니다.
class Test{
}
프로그래밍 구조가 크고 복잡해질 수록 개발자 혼자서 하나부터 열까지 코딩하는 것은 한계가 있을겁니다.
이때, 우리가 바탕화면의 파일들을 폴더로 관리하듯이 관리를 한다면
그것도 공통된 기능별로 묶어서 관리를 한다면
차후 다른 프로젝트에 같은 파일을 그대로 옮겨다 변수만 바꿔 사용하는 등 작업 효율이 높아질거에요.
또한 기능A를 수정하는 과정에서 다른 기능들까지 수정해야하는 등의 번거로움도 덜 수 있을거에요.
객체(Object)는 소프트웨어 세계에 구현할 대상이고, 이를 구현하기 위한 설계도가 클래스(Class)이며, 이 설계도에 따라 소프트웨어 세계에 구현된 실체가 인스턴스(Instance)이다.
객체(Object)는 현실의 대상(Object)과 비슷하여, 상태나 행동 등을 가집니다.
그러나 소프트웨어 관점에서는 그저 사유의 결과(concept)일 뿐입니다.
소프트웨어에서 객체를 구현하기 위해서는 concept 그 이상으로 많은 것들을 사고하여 구현해야 합니다.
인간의 사고 - 먹는다 : 젓가락으로 라면을 먹는다.
컴퓨터의 사고 - 라면을 먹는다 : 라면의 좌표를 찾는다 ->
젓가락의 좌표를 찾는다 -> 젓가락을 든다 -> 젓가락의 각도를 ...
이를 위한 설계도로 클래스를 작성합니다. 설계도를 바탕으로 객체를 소프트웨어에 실체화 하면 그것이 인스턴스(Instance)가 되고, 이 과정을 인스턴스화(instantiation)라고 합니다. 실체화된 인스턴스는 메모리에 할당됩니다.
*코딩을 할 때, 클래스 생성에 따라 메모리에 할당된 객체인 인스턴스를 ‘객체’라고 부르기도 합니다. 이는 틀린 말이 아니에요.
*인스턴스라고 부르면 더 정확하지만, 개념적으로 인스턴스는 객체에 포함된다고 볼 수 있기 때문이에요.
( 인스턴스 ⊃ 객체 )
보다 구체적인 예시를 원한다면 '반복문 추상화', '클래스 추상화', '추상 자료형' 등을 검색해보세요.
상속 inheritance :
부모클래스의 재산(클래스가 가진 요소, field & method)을 자식클래스가 사용하는 것을 의미합니다.
여기서 주체성을 가진 것은 자식쪽입니다.
자식(클래스)이 상속받고 싶은 부모(클래스)를 선택합니다.
자식은 부모에게 물려받은 자산(field, method)중 본인이 필요한 요소만 선택 사용 가능합니다.
상속의 장점은 중복코드를 줄일 수 있고, 유지보수가 편리하며, 통일성이 있고, 다형성을 구현할 수 있다는 점이 있습니다.
자바에서는 자식클래스가 한 부모클래스에게서만 상속받을 수 있습니다.
그러나 부모클래스는 여러 자식클래스에게 상속 가능합니다.
// 상속의 방법(선언) - extends
class (자식)클래스명 extends (상속받을 부모)클래스명{...}
public class Print { // 사용클래스
public static void main(String[] args){ // 프로그램의 주 진입점
Overload overload = new Overload(); // 선언
overload.cal();
overload.cal(1,10);
overload.cal(7);
}
}
class Overload{
// 오버로딩, 인자 0
public void cal(){ System.out.println("인자(인수) X") }
// 오버로딩, 인자 1
public void cal(double d){ System.out.println(d) }
// 오버로딩, 인자 2
public void cal(int a, int b){ System.out.println(a+b) }
}
// 인터페이스
interface MenuIngredients{
void foodName(); // 추상 메소드
void mainIngredients(); // 추상 메소드
void subIngredients(); // 추상 메소드
}
// 인터페이스 구현 클래스
class MenuChicken implements MenuIngredients{
public void foodName(){ // 오버라이딩
System.out.println("메뉴는 치킨 입니다.");
}
public void mainIngredients(){ // 오버라이딩
System.out.println("주재료 : 닭고기");
}
public void subIngredients(){ // 오버라이딩
System.out.println("부재료 : 튀김가루, 식용유");
}
}
// 인터페이스 구현 클래스
class MenuSteak implements MenuIngredients{
public void foodName(){ // 오버라이딩
System.out.println("메뉴는 스테이크 입니다.");
}
public void mainIngredients(){ // 오버라이딩
System.out.println("주재료 : 소고기");
}
public void subIngredients(){ // 오버라이딩
System.out.println("부재료 : 마늘,아스파라거스");
}
}
// 사용 클래스
public class Cook{
public static void main(String[] args){ // 프로그램의 주 진입점
MenuIngredients menu; // 인터페이스 객체 선언
System.out.println(" 메뉴를 선택해주세요(1. 치킨 2. 스테이크 ) ")
Scanner sc = new Scanner(System.in); // 스캐너 객체
int n = sc.nextInt();
if(n==1){
menu = new MenuChicken(); // 업캐스팅
} else if(n==2){
menu = new MenuSteak(); // 업캐스팅
} else{
System.out.Println("존재하지 않는 메뉴입니다.");
}
// 선택한 조건에 따라서 부모객체로 자식메소드를 사용합니다.(다형성)
menu.foodName();
menu.mainIngredients();
menu.subIngredients();
}
}
캡슐화 encapsulation :
코드은닉, 중요한 데이터,코드를 보호하기 위해 외부에서 접근을 제한합니다.
캡슐화 방법
- 멤버 변수 앞에 접근 제한자 private사용.
- 멤버 변수에 값을 넣고 꺼내 올 수 있는 메소드를 만든다 (접두어 set/get을 사용해 메소드를 만든다.)
public class student{
private String name;
private int id;
private int age;
public void setName(String name){
this.name = name; }
public void setId(int id){
this.name = name; }
public void setAge(int age){
this.name = name; }
public void getName(){
return name; }
public void getId(){
return id; }
public void getAge(){
return age; }
}
type 변수 = 값;
기본타입 == 원시타입 : call by value
——————————————————————————————
객체의 정렬기준을 명시하는 두가지 방법——————————————————————————————
——————————————————————————————
String 클래스 객체, new String 객체
String객체 예시
StringBuffer()
예시
StringBuilder()
※ 들어가기 전에...
throw : exception(예외)를 발생시키는 애
throws : exception을 미루는 애
exception 처리하는 이유 : 오류가 나서 프로그램이 비정상 종료되는 것을 막기 위해
<사진>
Error
Unchecked Exception (runtime exception)
Ex) numberFormat / nullpoint
Ex) java.io/java.sql 패키지 예외처리
Checked, Unchecked은 개발자들이 만든 애플리케이션 코드에서
예외가 발생했을 경우에 사용하게 됩니다.
io : input/outputStream이 기본. byte값의 연속적인 흐름
(람다식 예쁘게 쓸때 써먹는 람다스트림도 있습니다.)
thread : 프로그램과 프로세스(실행 중인 프로그램) 쓰레드(프로세스의 기본작업단위)
network : TCP/UDP --네트워크 7계층 봐야함.
TCP : 보내고 받고 보내고 받고.
UDP : 일단 보내기만해요.
도움을 주신 분들
티스토리 아이디어 저장소 - 001. 객체와 인스턴스의 차이
티스토리 자바캔 - 추상화란?
티스토리 HCR Daily - 프로그래밍 언어에서의 추상화