객체지향 프로그래밍

객체지향 프로그래밍(Object Oriented Programming)은 좀 더 나은 프로그램을 만들기 위한 프로그래밍 패러다임으로 조직을 상태와 행위로 이루어진 객체로 만드는 것이다.

문법과 설계

문법

하나는 객체지향을 편하게 할 수 있도록 언어가 제공하는 기능을 익히는 것이다. 이러한 기능들은 if,for문처럼 문법적인 구성을 가지고 있다. 이 문법을 이해라고 숙지해야 객체를 만들 수 있다. 객체를 만드는 법에 대한 학습이라고 할 수 있다.

설계

복잡한 현실을 추상화하는 것이 설계라고 할 수 있다.

부품화

메소드는 부품화의 예라고 할 수 있다. 메소드를 사용하는 기본 취지는 연관되어 있는 로직들을 결합해서 메소드라는 완제품을 만드는 것이다. 메소드를 사용하면 코드의 양을 극적으로 줄일 수 있고, 메소드 별로 기능이 분류되어 있기 때문에 필요한 코드를 찾기도 쉽고 문제의 진단도 빨라진다.

그런데 프로그램 성능이 높아지면서 메소드의 양이 늘어나, 다시 이전의 메소드가 없던 시절로 돌아가게 되었다. 그래서 나온 것이 객체지향 프로그래밍이다.

은닉화, 캡슐화

제대로된 부품이라면 그것이 어떻게 만들어졌는지 모르는 사람도 그 부품을 사용하는 방법만 알면 쓸 수 있어야 한다. 내부의 동작 방법을 단단한 베이스 안으로 숨기고 사용자에게는 그 부품의 사용방법만을 노출하고 있는 것이다.
이러한 컨셉을 정보의 은닉화, 캡슐화라고 부른다.

인터페이스

잘 만들어진 부품이라면 부품과 부품을 서로 교환 할 수 있어야 한다.

Comment and share

입력과 출력

string[ ] args

package living.coding; 

public class A8 {

    public static void main(String[] args) {
        System.out.println(args.length);

    }

}

main 메소드는 자바에서 특별한 의미를 가진 메소드이다. main메소드의 내용을 구현하면 자바 애플리케이션을 실행할 때 main메소드가 호출되면서 프로그램이 구동하게 되는 것이다. 이때 String [ ] args는 입력 값의 파라미터로 동작한다.

사용자의 입력을 받기

package living.coding;

import java.util.Scanner;

public class A9 {

    public static void main(String[] args) {
        
        Scanner sc = new Scanner(System.in);
        
        int i = sc.nextInt();
        System.out.println(i);
        sc.close();

    }

}

Rnu을 하게 되면 main메소드안의 Scanner라는 객체를 새로 만들 때 사용자가 입력한 값을 입력받아 생성한다. sc라는 객체는 nextInt라는 메소드를 통해 입력이 된다. nextInt는 정수 값만 입력이 가능하다.

Comment and share

Method

public static void main(String[ ] args) {

}

이것은 main이라는 이름의 메소드이다.

메소드의 정의와 호출

package living.coding;

public class A5 {
    public static void numbering() { // 정의
        int i = 0;
        while (i<10) {
            System.out.println(i);
            i++;
        } 
    }

    public static void main(String[] args) { // 호출
        numbering();
    }

}

메소드를 호출하게 되면 메소드를 정의한 부분이 실행되게 된다.
호출은 메소드의 이름 뒤 세미콜론을 적는 것으로 호출을 하고, 정의는 메소드의 이름 뒤 중괄호가 온다.
위 코드를 실행시키면 0123456789가 출력이 된다.

입력값

package living.coding;

public class A6 {
    public static void numbering(int limit) {
        int i = 0;
        while (i < limit) {
            System.out.println(i);
            i++;
        }
    }

    public static void main(String[] args) {
        numbering(5);
    }

}

입력값에 5를 넣흐면 limit변수에 5값이 들어가게 되고 실행값은 01234가 출력된다.
int limit은 매개변수라(parameter)하고 5는 인자(argument)라 한다.

출력값

return

package living.coding;

public class A7 {
    public static String numbering(int init, int limit) {
        int i = init;
        
        String output = "";
        while (i < limit) {
            output += i;
            i++;
        }
    
        return output;
    }
    
    public static void main(String [] args) {
        String result = numbering(1, 5);
        System.out.println(result);
    }
}

값은 1234를 출력하게 된다.
return뒤의 값은 그 메소드 밖에 배치하게 되고 실행중 이던 메소드는 중지된다.

Comment and share

Selection Sort

Selection Sort는 말그대로 선택정렬이다.
오름차순 또는 내림차순으로 정렬하는 것이다.

package living.coding;

public class A3 {

    public static void main(String[] args) {
        
          int [] num = {2,1,5,3,4};
          int i,j,temp;

         for (i=0;i<num.length-1;i++) {//1
            for (j=i+1;j<num.length;j++) {//2
                if (num[i]<num[j]) {//3
                    temp=num[i];
                    num[i]=num[j];
                    num[j]=temp;

                }
            }
        }   
    for (i=0;i<num.length;i++) {
        System.out.println(num[i]);
    }
}
  1. 비교할 시작점을 정해준다.
  2. 비교할 시작점 다음 index를 정해준다.
  3. 두개의 index를 비교한 후 서로 자리를 바꾸어 준다.

Comment and share

배열

정의

연관된 데이터를 모아서 관리하기 위해 사용하는 데이터 타입.

배열의 생성

변수의 데이터타입[] 변수 = {};

제어

배열제어
temp안의 각각의 값은 원소라 한다. 배열의 제어를 할 때는 index를 사용한다. index번호는 0부터 시작한다. 그러므로 temp[5]는 존재하지 않는다.
원소를 적지 않고 배열을 먼저 생성할 수도 있다.

변수의 데이터타입[] 변수 = new 변수의 데이터타입[index수];

변수의 크기

System.out.println(변수.length);

for-each

for each
이렇게 배열과 반복문을 같이 사용할 수도 있다.

Comment and share

char, String

자바에서는 char배열이 아닌 String클래슬를 이용해서 문자열을 처리하는 이유는 무엇일까?
String클래스는 char배열에 기능(메서드)을 추가한 것이다.
char배열과 String클래스의 한 가지 중요한 차이가 있는데, String객체(문자열)는 읽을 수만 있을 뿐 내용을 변경할 수 없다는 것이다.

public static void main(String[] args) {
    
    String str = "java";
    str = "8";
    System.out.println(str); // java8

    }

}

위처럼 String값이 바뀌는 것 같지만 새로운 문자열이 생겨 str이 새로운 주소값을 가르키는 것이다.

그리고 String문자열에서 하나의 문자만 꺼내오고 싶을 때 charAt이라는 메소드를 사용한다.
배열에서 “배열이름[index]”로 index에 위치한 값을 가져오는 것과 같다고 생각하면 된다.

public class Test {
public static void main(String[] args) {
    String str = "Hello";
    char ch = str.charAt(1);  // e
    }
}

Comment and share

복합 대입연산자

대입연산자와 다른 연산자가 함께 사용 되는 연산자로 변수를 중복해서 사용하는 것을 줄여주는 역할을 한다.(누적)
| 연산자 | 기능 |
|—|:—:|
| += | 두 항의 값을 더해서 왼쪽 항에 대입한다. |
| -= | 왼쪽 항에서 오른쪽 항을 뺴서 그 값을 왼쪽 항에 대입한다. |
| *= | 두 항의 값을 곱해서 왼쪽 항에 대입한다. |
| /= | 왼쪽 항을 오른쪽 항으로 나누어 그 몫을 왼쪽 항에 대입한다. |
| %= | 왼쪽 항을 오른쪽 항으로 나누어 그 나머지를 왼쪽 항에 대입한다. |

예시

+=

복합대입연산자1

-=

복합대입연산자2

*=

복합대입연산자3

/=

복합대입연산자4

%=

복합대입연산자5

Comment and share

반복문

while

while(최대값){
    실행값
    }

while문은 몇번 연동되는지 제한을 두지 않을 때 주로 쓴다.

for

for(변수초기값;최대값;증가값){
    실행값
    }

do ~ while

do{
    실행값
} while (최대값);

Comment and share

논리연산자

and

&&는 좌항과 우항의 값이 모두 참일 때 참이 된다.
논리연산자1

or

||는 좌우항중 하나라도 참이라면 참이 된다.
논리연산자2

not

!는 부정의 의미로 boolean의 값을 역전시킨다.

대입연산자, char string, 버퍼드리더랑 스캐너, 자바의 출력문, 배열, 만년달력

Comment and share

조건문

불린은 조건문에서 핵심적인 역할을 하는데 이 불린 값을 기준으로 실행 흐름을 제어하기 떄문이다.

if

조건문은 if로 시작한다.
if 뒤의 괄호를 if절, 중괄호가 then절이다. if절이 true 값이라면 then절이 실행되고 false라면 실행되지 않는다.

if(// true or false){
                        // then절
}

조건문1
if절이 false라면 아무 값도 표시되지 않는다.

else

if만으로는 좀 더 복잡한 상황을 처리하는데 부족하다. true일 때는 then절을 실행하고 false일 때는 else절을 실행한다.

if(// true or false){
                        // then절
} else{
                        // else절
}

true일 때

else1

false일 때

else2

else if

else if절을 이용하면 조건문의 흐름을 좀 더 자유롭게 제어할 수 있다. if절의 값이 true라면 then절이 실행된다. false라면 else if 절로 제어가 넘어 간다. else if절의 값이 true라면 else if then절이 실행된다. false라면 else절이 실행된다. else if절은 여러개 쓸 수 있고 생략할 수도 있다.

if(// true or false){
                        // then절
} else if(// true or false){
                        // else if then절
} else {
                        // else절
}

if문1
if문2
예제를 보면 쉽게 이해가 된다. 간단한게 요약하자면 이런 특징을 가지고 있다.

  • true가 나올 때 까지 다음 절로 넘어간다.
  • true가 나온다면 다음 절이 true이더라도 출력되지 않는다.

switch

조건문의 대표적인 문법은 if문이다. 사용빈도는 적지만 조건이 많다면 switch문이 로직을 보다 명료하게 보여줄 수 있다.

switch 문을 사용할 때 한가지 주의 할 것은 switch의 조건으로는 몇가지 제한된 데이터 타입만을 사용할 수 있다.
byte, short, char, int, enum, string, Character, Byte, Short, Integer

값이 1일때

스위치1
break;를 쓰지 않고 값이 1이라면 “one”, “two”, “three”, “defult”모두 표현된다. 만약 break;를 쓰지 않고 값이 2이라면 “two”, “three”, “defult”가 표현된다.
스위치2
defult문은 case를 제외한 값일 경우 표현되는 것이다.

Comment and share

Hyeon Soo Ahn

author.bio


author.job