OOP의 4대 특성중에는 다형성(Polymorphism)은 같은 자료형이지만 다양한 변수나 메소드를 대입하여 다양한 결과를 얻어내는 능력을 말합니다.

 

오버라이딩(Overriding)

- 상위 클래스에서 선언된 메소드를 하위 클래스에서 재정의 해서 사용하는 방식입니다.

- 부모 클래스의 생성자를 자식 클래스에서 선언하는 것(super()) 도 오버라이딩입니다.

- 오버라이딩의 충족 조건(1. 메소드 이름, 2. 메소드 매개 변수의 숫자와 데이터 타입&순서, 3. 메소드 리턴 타입)

 

오버로딩(Overloading)

- 메소드명은 같지만 리턴 타입이나 매개변수에 다르게 해서 여러가지 메소드를 선언 하는 방식입니다.

- 하나의 메소드 이름으로 여러 기능을 구현 할 수 있습니다.

- 매개 변수가 다르거나 리턴 타입이 달라야 합니다. 

- 하지만 리턴 타입이 달라도 매개 변수가 같으면 안됩니다.

 

오버라이딩과 오버로딩의 사용법

- 오버라이딩을 사용 할 때 하위 클래스의 메소드에 @Override어노테이션을 사용하여 명시적으로 사용 할 수 있습니다.

package java_study;

public class Polymorphism {
	public static void main(String[] args) {
		Child_poly cp = new Child_poly();
		cp.overridingHello();
		cp.overloadingMethod();
		cp.overloadingMethod("hey");
		cp.overloadingMethod("yolo", 100);
	}
}

class Parent_poly {
	public void overridingHello() {
		System.out.println("Hello from Parent");
	}
}

class Child_poly extends Parent_poly {
	// @Override
	public void overridingHello() {
		System.out.println("Hello from Child");
	}
	
	public void overloadingMethod() {
		System.out.println("overloading without paremter");
	}
	
	public void overloadingMethod(String str) {
		System.out.println("str : " + str);
	}
	
	public void overloadingMethod(String str, Integer i) {
		System.out.println("str : " + str + " / Integer : " + i);
	}
	
	public Integer overloadingMethod(Integer i) {
		return i;
	}
	
}

객체 지향 프로그래밍은 객체를 프로그램의 기본 단위로써 나누고 그 객체들이 상호 작용 하는 프로그램이라 배웁니다.

그렇다면 여기서 말하는 객체란 정확히 무엇일까요? 함께 학습이 필요한 클래스와 인스턴스도 같이 알아보겠습니다.

 

 

클래스(Class)

 - 객체가 정의된 '설계도'

 - 객체를 생성 하기 위해서 클래스가 꼭 필요함

 - 객체의 생성을 위한 용도이지 객체로써 직접 사용 할 수 없음

 

객체(Obejct)

 - 클래스를 이용해 만들어진 객체

 - 모든 인스턴스는 객체에 포함됨

 

인스턴스(Instance)

 - 인스턴스화는 클래스로부터 객체를 만드는 과정임. ex) Unit unit = new Unit():

 - 클래스를 사용해서 만들어진 객체를 '인스턴스 객체'라고 부름

 - 모든 인스턴스는 객체에 포함됨

 

 

아래 코드를 보면 이해를 좀 더 쉽게 할 수 있습니다.

우선 class Unit 에서 다양한 변수 및 메소드를 설정 할 수 있습니다. 이 과정을 설계도에 작업이라 생각 하시면 됩니다.

그리고 메인 클래스에서 Unit marine = new Unit()은 클래스를 인스턴스화 하는 부분입니다.

그 인스턴스를 포함하고 있는 부분은 ClassInstanceObject인 객체입니다.


// 큰 의미의 객체와 인스턴스
public class ClassInstanceObject {
	public static void main(String[] args) {
		// 클래스를 인스턴스화 하고 있는 부분
		Unit marine = new Unit();
		Unit medic = new Unit();
	}
}

// 클래스 (설계도)
class Unit {
	
}

OOP의 4대 특성중에는 상속(Inheritance)이 있습니다. 이는 코드의 재사용과 확장성을 용이하게 해줍니다.

 

상속의 특징

 - 상속 되는 클래스를 부모 클래스 및 Super 클래스라 하고, 그 반대는 자식 클래스 및 Sub 클래스라고 합니다.

 - 자식 클래스는 부모 클래스에 정의된 변수나 메소드를 사용 할 수 있습니다.

 - 부모 클래스의 변수나 메소드의 접근 제어자가 private이면 사용 할 수 없습니다. (protected는 자식에게만)

 - 하지만 부모 클래스는 자식 클래스의 변수나 메소드를 사용 할 수 없습니다.

 - 2개 이상의 클래스를 부모 클래스를 상속 받을 수 없습니다. 오직 하나만 상속 받을 수 있습니다.

 - 기본적으로 모든 클래스는 Object를 상속 받고 있습니다.(extends Object를 굳이 안 해줘도 됨)

 

 

상속의 사용법

 - 자식 클래스명 옆에 extends 키워드와 함께 부모 클래스명을 입력 하시면 됩니다.

main 메소드에서 Unit클래스를 상속받은 marine 인스턴스는 createdUnitMsg()와 createdBionicUnitMsg()를 사용 할 수 있습니다.

public class Inheritance {
	public static void main(String[] args) {
		Bionic marine = new Bionic();
		marine.createdUnitMsg();
		marine.createdBionicUnitMsg();
	}
}

class Bionic extends Unit {
	public void createdBionicUnitMsg() {
		System.out.println("created a bionic unit");
	}
}

class Unit {
	public void createdUnitMsg() {
		System.out.println("created an unit");
	}
}


기존에는 일반 적인 자바SE 를 설치하고 자바 환경 변수를 설정 하였습니다.

하지만 앞으로 유료화 이슈로 인해서 저는 openjdk 를 이용해서 포스팅 해보려고 합니다.


https://github.com/ojdkbuild/ojdkbuild


아래 파일 중 msi 파일을 다운 하신 뒤 인스톨 하거나,

zip파일을 다운 하신 뒤 이용 하실 드라이브에 붙여넣어 주세요.












아래 부터는 인스톨창 입니다.

특별한 설정 사항이 없으면 next 및 install을 눌러 주세요,









openjdk는 설치 후 따로 환경 변수를 설정하지 않아도 자동으로 등록 되었습니다.

근데 그냥 쓰기에는 너무 불안하고, 혹시 기존에 사용하던 jdk 와 충돌이 날 수도 있으니

자바 환경 변수를 설정 하였습니다.





내 컴퓨터 -> 우클릭 >좌측 '고급 시스템 설정' -> 고급 '환경 변수'

그 다음 아래처럼 설정 해주시면 됩니다.

JAVA_HOME의 변수 값은 openjdk 의 다운로드 경로를 입력 하시면 되고,

환경 변수 편집에는 '%JAVA_HOME%\bin' 을 추가 하시면 됩니다.


그리고 cmd 창에서 'java -version' 명령어를 입력하시면

맨 아래 사진과 같이 설치된 자바 버젼이 표시 됩니다.






###########사진이 짤렸습니다############

1. JAVA_HOME 

2. Path + ' ;%JAVA_HOME%\bin '

3. CLASSPATH = %JAVA_HOME%\lib





-1+3-5+7-9+11-13+15-17...



1-3+5-7+9-11+13-15+17...

홀수가 증가하며 교차로 부호가 +/- 로 바뀌며 기준점까지 총합을 구하는 코드입니다.


근데 왜 아래 코드 가운데 정렬이 안 풀릴까요..

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
public class MPswapSum {
 
    public static void main(String[] args) {
        int minusStart = minusStart(100);
        System.out.println(minusStart);
        int plusStart = plusStart(100);
        System.out.println(plusStart);
    }
 
    public static int minusStart(int finishedNum) {
        int sum = 0;
        for (int i = 1; i <= finishedNum; i++) {
            if (i % 2 == 1) {
                if (sum >= 0) {
                    sum += (i * -1);
                } else if (sum < 0) {
                    sum += i;
                }
            }
        }
        return sum;
    }
 
    public static int plusStart(int finishedNum) {
        int sum = 0;
        for (int i = 1; i <= finishedNum; i++) {
            if (i % 2 == 1) {
                if (sum <= 0) {
                    sum += i;
                } else if (sum > 0) {
                    sum += (i * -1);
                }
            }
        }
        return sum;
    }
 
}
cs




결과 :



1부터 100까지 홀수끼리 합, 짝수끼리 합을 구하는 코드입니다.
저는 따로 startedNum과 finishedNum으로 매개변수를 설정하여
동적인 범위의 홀수 및 짝수값을 구하도록 했습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package Study_2707;
 
public class Sum1to100 {
 
    public static void main(String args[]) {
        oddSum(110);
        evenSum(110);
    }
 
    public static int oddSum(int startedNum, int finishedNum) {
        int oddSum = 0;
        for (int i = startedNum; i <= finishedNum; i++) {
            if (i % 2 == 1) {
                System.out.println(oddSum + " + " + i + " = " + (oddSum + i));
                oddSum += i;
            }
        }
        return oddSum;
    }
 
    public static int evenSum(int startedNum, int finishedNum) {
        int evenSum = 0;
        for (int i = startedNum; i <= finishedNum; i++) {
            if (i % 2 == 0) {
                System.out.println(evenSum + " + " + i + " = " + (evenSum + i));
                evenSum += i;
            }
        }
        return evenSum;
    }
 
}
 
cs






결과 : 



for문을 이용하여 1부터 100까지 합을 구했습니다.



1
2
3
4
5
6
7
8
9
10
11
12
public class Sum1to100 {
 
    public static void main(String[] args) {
        int sum = 0;
        for(int i=1; i<=100; i++) {
            System.out.println(sum + " + " + i + " = " + (sum+i));
            sum += i;
        }
        System.out.println(sum);
    }
 
}
cs





결과 : 



Spring 프로젝트에서 파라미터 전송시 많이 사용하는

String형 to int형 형변환과 int형 to String형변환 입니다.


Integer.parseInt(), Double.parseDouble(), Integer.toString() 를 사용하시면 됩니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class CovertString {
 
    public static void main(String[] args) {
        String str1 = "920";
        int int1 = 827;
        
        /* String형을 int형으로 */
        int string2int = Integer.parseInt(str1);
        double string2double = Double.parseDouble(str1);
        
        /* int형을 String형으로*/
        String int2string_1 = Integer.toString(int1);
        String int2string_2 = int1 + "";
        
    }
 
}
cs


+ Recent posts