개발의 흔적

자바 기초 및 객체 지향 정 본문

자바

자바 기초 및 객체 지향 정

남들에게 도움을 주는 백엔드 개발자가 되자 2020. 4. 12. 17:41

1. 변수

-> 변수 생성시 빈 메모리에 변수값이 할당 

 

기본 초기 값

int x = 0;

String str = null;

double doubleData = 0.0d; 

boolean = false;

Object object = null; 

 

 

2. 조건문 + 변수

상황에 따라 분기처리를 이용함으로써 데이터를 효율적으로 또한 논리적인 구조를 제어할수있다.

 

boolean isBoolean = false;

 

* 기본 if 문

if(isBoolean == false){

  System.out.println( isBoolean + "는 false입니다");

} else { 

 isBoolean = true;

 System.out.println(isBoolean + "는 true입니다");

}

 

* 다중 if문 

if(isBoolean == false) {

 System.out.println( isBoolean + "는 false입니다");

} else if(isBoolean == true) {

 isBoolean = true;

 System.out.println(isBoolean + "는 true입니다");

} else {

System.out.println("아무것도 아닙니다.");

}

 

*기본 switch문

비교하고자 하는 조건이 많을 경우 사용하면 편함.

 

 int x = 10;

 

switch(x) {

  case 1 : 

  System.out.println("1");

  break;

  case 2 : 

  System.out.println("2");

  break;

default :

System.out.println("그외 숫자임");

}

 

switch(x) {

  case 2 : 

  System.out.println("1"); 

  System.out.println("2");

  break;

default :

System.out.println("그외 숫자임");

}

 

3.반복문

값을 넣을때나 가져올때 반복문을 사용

 

int sum = 0;

 

for(int i = 0; i < 10; i++) {

    sum +=  i;

}

 

 

int i = 0

 

조건이 참일동안 진행

while(i < 10){

   sum += i

}

 

4.배열 + 객체 배열

같은 타입의 변수들을 담아두는곳 객체지향에서 많이씀.

배열을 생성하게 되면 배열안에 주소가 담김 레퍼런스 구조임

 

String[] str = {"1","2","3"};

 

 

System.out.println(str[0]); -> 1

System.out.println(str[1]); -> 2

System.out.println(str[2]); -> 3

 

4-1. 객체 배열

하나의 클래스가 있다고 가정하고 객체 배열 클래스에 데이터를 저장한다.

 

Test[] test = new Test[5];

 

for(int i =0; i < test.lenght; i++) {

    test[i] = new Test();

    test.number = i;

}

 

4-2. ArrayList

ArrayList를 사용함으로써 클래스의 인스턴스 및 객체를 쉽게 관리할수있다.

 

ArrayList<Test> testArry = new  ArrayList<Test>();

testArry.add(new Test1("test1","test2"));

testArry.add(new Test2("test3","test4"));

 

for(Test test : testArry) {

  test[i].age;

}

 

 

5.객체지향

객체 지향은 객체를 만듬으로써 재활용성이 뛰어나고 정보를 은닉할수있는 장점이있고 또한 구조적으로 프로그래밍 하기 편함

 

5-1. 클래스

클래스는 객체를 만드는 틀이라고 생각하면된다.

 

객체는 레퍼런스 형태이며 주소값을 가지고있다.

 

클래스 구조는

멤버 변수 + 메소드

 

5-2. 생성자

생성자는 클래스가 실행될 시 초기값을 지정해준다. 초기값이 없으면 굳이쓰지않아도된다. 왜냐하면 컴파일러가 자동으로 생성자를 만들어주기 때문이다.

 

5-3. 생성자 오버로딩

생성자 는 오버로딩을 하여서 같은 메소드안에서 다른 결과를 보여줄수있다.

또한 매개변수 및 타입은 달라야한다.

 

5-4. this 

현재 클래스 안에 객체의 인스턴스의 값을 가르킨다.

 

5-5. static 변수 , 메서드

static을 사용함으로써 메인 클래스가 호출할 시 static변수 및 메서드는 데이터 영역에 쌓인다.

 

5-6. singlnton 디자인 패턴

singlnton패턴을 유일무일한 객체를 지니고있다.

단, singlnton은 인스턴스를 생성할 수 없다. 현재 싱글톤 클래스에 private로 이미 지정이되어있기에 이것을 사용하려면 getInstance메소드를 호출을 해야한다.

 

5-7. 상속 

상위클래스의 메소드 및 멤버변수를 상속을 할수있다. 또한 상위 클래스의 생성자를 상속도 가능하다. 

super()키워드 사용

public test extends test1 {}

 

5-8. 메소드 오버라이딩

상위 클래스를 상속 받은후 메소드를 오버라이딩을 할수있으며 로직부분은 다양하게 변경이 가능하다.

 

5-9. 다형성

같은 타입 클래스를 이용하여 다양한 결과물을 얻어올수있음

MVC형태에서도 다형성이 사용되고있음.

 

Custom CustomKim = new VIPCustomer(10020,"김유신");

CustomKim.setCustomerID(100020);
CustomKim.bounsPoint = 10000;

 

 

5-10. 추상클래스

추상클래스 키워드 : abstracts를 사용하여 하위클래스에서 상속받음, 또한 abstracts메소드는 구현체없이 하위클래스에서 만듬

 

5-11. 인터페이스

interface 키워드 : interface를 사용하여 하위클래스에서 상속받음, 또한 키워드 : implements이용하여 상속받는다. 명세서 같은 개념 상속관계를 통해서 구체화를 시킴.

 

5-12. is-a,has-a관계

 

has-a관계 : 클래스안에 직접적으로 클래스를 선언

is-a 관계 : 클래스를 상속 받아서 사용함. 

 

때에 따라서 사용해야함.

 

5-13. Object 클래스 

 

가장 최상위 클래스이며, 가장 기본적인 기능을 가지고있다.

 

equals는 기본형태이며 문자열을 비교하기 위해 사용한다.

* 객체끼리의 비교는 주소값을 비교하기에 아무리 문자열값이 같아도 fasle가 나옴.

equals를 오버라이딩하여서 Object obj로 매개변수를 받게 될텐데 이때 Object는가장최상위클래스이기에

자동으로 업캐스팅이 되어 Object의 인스턴스를 바라보게된다. 

그렇기에 따로 다운캐스팅을 해줘야한다.

 

예제.

 

class MyDate {

int d;
int m;
int y;

public MyDate(int d,int m,int y) { 
this.d = d;
this.m = m;
this.y = y;
}

@Override
public boolean equals(Object obj) {
// 업캐스팅이 진행이 됬으시 다운캐스팅 진행
MyDate str = (MyDate)obj;

if(this.d == str.d) {
return true;
}else {
return false;
}
}
}

public class MainTest {
public static void main(String[] args) {

// 객체 문자열 비교
MyDate t1 = new MyDate(2020,12,12);
MyDate t2 = new MyDate(2020,12,12);


System.out.println(t1.equals(t2));


}

}

5-14. String, Wrapper 클래스

 

String은 문자열을 의미하고 

String.concat()메소드는 문자열을 합져준다. 

이떄 중요한거는 문자열이 합쳐 질때 새로운 주소를 가지고있다는것이다.

이것을 확인하기 위해선 

System.identityHashCode()를 이용해서 확인한다.

 

Wrapper클래스는 기본형 타입을 객체로 만들어서 매개변수로 보낼때 사용한다.

 

먼저 Boxing은

Primitive Type을 Wrapper class로 바꾸는 것이고 (업캐스팅)

 

Unboxing은

Wrapper class를 Primitive Type으로 바꾸는 것이다!!! (다운캐스팅)

 

5-15. 제네릭 클래스

 

제네릭(Generic)은 클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법을 의미함.

어려움.

 

ArrayList<String>을 많이 봤을껀데 사용법은 비슷하다.

 

결국 ArrayList<T> 이상태에서 String이라는 타입이 들어가고 외부의 클래스를 내부에서 사용할수있게끔

만든거라고생각하면된다.

또한 매개변수타입을 제한을 둘수있다. 

바로 extends를 이용하여서 클래스를 상속받고 안에있는 매개변수를 사용하면된다.

 

 

'자바' 카테고리의 다른 글

반복,조건  (0) 2021.02.07
데이터타입  (0) 2021.02.07
2일차  (0) 2021.01.31
1일차  (0) 2021.01.30
자바 국비지원 3개월 주말과정 첫시작  (1) 2021.01.28
Comments