이전 글에서 객체지향 프로그래밍에 대해서 간략히 언급한적 있습니다.

클래스는 c++에서도 존재 했지만 Java에서도 똑같은 역활을 합니다. 클래스를 객체화해서 사용을 합니다.

쉽게 설명해서 집이라는 구조 내부에 세탁기 클래스, 냉장고 클래스, 책상 클래스, 의자 클래스 등등 ... 

클래스의 역할은 이런식으로 객체화 시켜 사용합니다. 

 

그렇다면 객체지향 프로그래밍은 각자의 고유 기능을 수행하면서 다른 객체들과 상호작용하는 프로그래밍입니다 .

 

객체란?

객체는 그 이름에서 볼수 있듯이, 객체 지향 기술의 핵심 개념입니다. 객체는 상태와 동작을 가지고 있습니다.

객체의 상태는 객체의 속성입니다.

객체의 상태 동작은 소프트웨어에서는 각각의 필드와 메소드로 표현 할 수 있습니다. 

변수를 필드라고 합니다.

객체의 동작을 메소드 라고 합니다.

 

객체지향 프로그래밍의 특징 

c++ , java 모든 객체 지향 언어들의 특징이 존재합니다.

캡슐화,상속,다형성,추상화가 객체지향언어들의 대표적인 특징입니다. 

그렇다면 이를 하나씩 알아보도록 하겠습니다. 

 

캡슐화란?

 관련된 데이터와 알고리즘이 하나의 묶음으로 정리 하는 방식으로 이를 캡슐화라고 합니다.

캡슐화의 특징중 하나가 정보은닉을 가지고 있습니다. 즉 객체 내부의 내용을 보호하는 역활을 합니다.

객체는 세부사항이 너무 많아서도 적어서도 안됩니다. 

객체를 세분화 하는것은 개발자의 능력인듯 합니다. ㅠ 더 열심히 해야할것 같습니다.

 

상속이란?

상속은 기존 코드를 재활용하는 기법으로 부모클래스가 자식 클래스의 모든 속성과 동작을 물려줍니다. 

즉 부모 클래스보다 자식클래스의 기능이 더 많습니다. 

 

다형성이란?

 다형성이란 객체가 취하는 동작이 상황에 따라서 달라지는 것을 의미합니다.

예를들어 함수를 같은 이름을 사용하더라도 멤버 변수, 즉 파라미터가 다르면 다르면 같은 이름을 가지는 함수이지만 기능은 다르게 사용할수 있습니다.

이해를 돕기위해서 speak(int english,int korean) ,speak(int english); 함수 이름은 같지만 멤버 변수가 다름니다. 이때 두개의 기능은 각각 모두 다릅니다. 즉 같은 함수여도 중복해서 같은 이름의 함수를 사용할수 있으며 기능을 다르게 사용합니다. 이런걸 보통 오버로딩이라고 합니다.  오버로딩과 오버라이딩에 대해서는 나중에 조금 더 자세하게 다루겠습니다.

 

추상화란?

불필요한 정보는 숨기고 중요한 정보만을 표현함으로써 프로그램을 간단히 만드는 기법입니다.

쉽게 말해서 두가지의 객체의 공통된 기능 ,특징을 잡아서 사용하는 방법입니다. 

이부분은 사실 개발자들의 역량이라고 볼수 있을것 같습니다. 공통된 기능이 무엇인지 특징이 무엇인지 잘 이해하고 중복성을 남발하는것을 방지하기 위함입니다. 

 

다음엔 클래스에 대해서 좀더 자세하게 알아보겠습니다.

'프로그래밍언어 > JAVA' 카테고리의 다른 글

< Web 01>Login  (0) 2020.11.23
JAVA<클래스01> ?  (0) 2019.12.06
JAVA <Array-List/래그드 array>  (0) 2019.11.17
Java<배열 Array>  (0) 2019.11.14
자바 제어문 /반복문  (0) 2019.11.13

자바에는 전통적인 배열보다 훨씬 사용이 편리한 배열이 있습니다. 

바로 arrayList입니다. 

그렇다면 코드로 확인해보면

ArrayList<자료형> list=new ArrayList<>();

이런 형태의 모습을 하고 있습니다.

사실 이것도 ArrayList 클래스라고 합니다.

그런데 이부분은 제 주관적인 생각입니다.  c++에서 Array Template 이라는것과 굉장히 비슷한것 같습니다.

 

예를들어 string 자료형으로 받으면 string 데이터들을 list로 만들수 있습니다.

ArrayList<String> list=new ArrayList<>();
list.add("철수");
list.add("영희");

제거 방법은 

list.remove(1);

첫번째 요소를 제거합니다.

list를 출력하는 방법은 

for(int i=0;i<list.size();i++){
Sytem.out.println(list.get(i));


}

입니다.

 

래그드 배열이란?

자바에서 다차원 배열은 배열의 배열을 이용하여 구현합니다.

자바에서는 실제로 다차원 배열은 없고 1차원 배열밖에 없습니다.

다차원 배열은 1차원 배열 요소에 배열을 저장하는 방식으로 사용합니다. 

이 형태를 래그드 배열이라고 합니다.

 

코드로 나타내면 

int[][] ragged=new int[MAX_ROWS+1][];

각 행을 생성하여 ragged[]에 저정합니다.

for(int r=0;r<=MAX_ROWS;r++)
  ragged[r]=new int[r+1];

이제 2차원 배열이 생성 되었습니다.

이제 값을 넣을떄에는 

for(int r=0;r<ragged.length;r++)
    for(int c=0;r<ragged[r].length;c++)
        ragged[r][c]=c;

이런식으로 값을 2차원배열에 입력합니다.

 

다음에는 클래스에 대해서 다뤄보도록 하겠습니다.

'프로그래밍언어 > JAVA' 카테고리의 다른 글

JAVA<클래스01> ?  (0) 2019.12.06
JAVA<Class,Object,Method-01>  (0) 2019.11.20
Java<배열 Array>  (0) 2019.11.14
자바 제어문 /반복문  (0) 2019.11.13
JAVA 기초 개념  (0) 2019.11.13

자바에서 배열은 객체(object)입니다.

배열을 생성하기위해 두단계의 절차를 진행합니다.

int[] s;

배얄 참조  변수를 선언했다고 해서 배열이 생성된것이 아닙니다.

변수만 생성되었지만 실제 배열은 new 할당을 받아서 생성해야합니다.

s=new int[10];

변수  s 10개의 배열을 생성했습니다.

즉 배열의 선언할때는 

int array[]=new int[5];

이런식으로도 선언할수 있습니다.

 

그렇다면 무명 배열(anomymous arrays)를 알아보겠습니다.

new int[] {1,2,3,4}

배열에 이름없이 주어진 초기값만으로 배열이 생성할수 있습니다.

이 배열은 딱 한번 참조하며 더이상은 사용되지 않습니다.

 

sum 이라는 더하기 함수를 사용해보겠습니다.

public class AnonymousArray{
public static void main(String[] args){
System.out.println("숫자들의 합:"+sum(new int[]{1,2,3,4,}));

}

public static int sum(int[] numbers){
int total =0;

for(int i=0;i<number.length;i++){

        total=total+numbers[i];
}

return total;

}


}

이런 예시로 사용할수 있습니다.

 

for -each 루프

jdk 1.5 버전 이상부터 사용하는 방식입니다. 

for( 변수: 배열){

}

코드로 확인해보면 

public class ArrayTest4{
public static void main(string[] args){
int[] numbers={10,20,30};

for(int value:numbers)
    System.out.println(value+"");



}



}

배열 복사

int [] list={10,20,30,40,50};
int [] numbers=list;

이런 방식으로 해주면됩니다.

arry 복사는 copyOf() 메소드를 사용 할 수 있습니다.

int []list_copy=Arrays.copy(list,list.length);

main () 함수 매개 변수

public static void main(String[] args)

메인 함수의 매개변수(파라미터) 문자열 배열입니다. 

이 문자열 배열에는 우리가 명령어 프로프트에서 프로그램을 실행시켜주는 인수들이 저장됩니다.

 

배열 정렬

 자료구조에서 배우는  정렬(sort) 이며

여기서 사용되는 sort 메소드는 퀵정렬입니다 .

퀵정렬 관련해선 c++ 나중에 정리해보도록 하겠습니다.

사용방법은 

import java.util.Arrays;
public class SortExample{

public static void main(String[] args){

final int Size=10;
int[] numbers=new int[Size];
for(int i=0;i<Size;i++){

int r=(int)(Math.random()*100);
number[i]=r;

}
System.out.println("최소한 리스트:");

for(int r:numbers)
    System.out.println(r+"");

Arrays.sort(numers);

for(int r:numbers)
    System.out.println(r+"");


}



}

 랜덤값을 넣어서 정렬을 한 sort로 정렬을 했습니다.

 

2차원 배열

이번에는 2차원 배열의 생성을 해보겠습니다.

초기화는 

int [][] testArray={

{10,20,30},
{40,50,60},
{70,80,90},


};

선언 방식은 

int[][] s= new int[3][5];

2차원 배열을 선언합니다. 

다음에는 배열 리스트에 대해 알아보겠습니다.

'프로그래밍언어 > JAVA' 카테고리의 다른 글

JAVA<Class,Object,Method-01>  (0) 2019.11.20
JAVA <Array-List/래그드 array>  (0) 2019.11.17
자바 제어문 /반복문  (0) 2019.11.13
JAVA 기초 개념  (0) 2019.11.13
자바 들어가기전에..  (0) 2019.11.13

기본적인 사칙연산법은 C언어와 크게 다르지않아 패스를 하겠습니다.

사실 제어문도 그닥 다르진 않지만 한번 사용법 정도만 적어두겠습니다.

if-else문

import java.util.Scanner;
public class Larger{
public static void main(String[] args){

int x,y,max;

Scanner input=new Scanner(System.in);
System.out.print("첫번째 정수");
x=input.nextInt();

System.out.print("두번째 정수");
y=input.nextInt();

if(x>y)
   max=x;
   
else
   max=y;
   
   
System.out.print("큰수는?"+max);
}
}

new Scanner는 scanf 와 같을겁니다. 또한 new 할당이라 메모리를 미리 할당 받는 방식인것 같습니다.

말그대로 input.nextInt()는 변수에 값을 int를 넣어주는 메소드 인것같습니다.

import java.util.Scanner; 스캐너 라이브러리입니다.

 

switch문

크게 c랑 문법상 다르지않습니다.

Switch(number)
{
case 0:
System.out.println("없음");
break;

case 1:
System.out.println("하나");
break;

case 2:
System.out.println("둘");
break;

case 3:
System.out.println("삼");
break;

default:
System.out.println("기본");
break;

}

for문 /while 문

반복문도 마찬가지로  c언어와 큰차이가 없습니다.

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

int whileValue,forValue;
whileValue=0;
forValue=0;
while(whileValue<9){

     whileValue++;

}
System.out.println("whileValue"+whileValue);

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

     forValue++;

}
System.out.println("forValue"+forValue);


}

}

'프로그래밍언어 > JAVA' 카테고리의 다른 글

JAVA<Class,Object,Method-01>  (0) 2019.11.20
JAVA <Array-List/래그드 array>  (0) 2019.11.17
Java<배열 Array>  (0) 2019.11.14
JAVA 기초 개념  (0) 2019.11.13
자바 들어가기전에..  (0) 2019.11.13

클래스?

클래스는 자바와 같은 객체지향 언어의 기본적인 빌딩 블록입니다. 클래스들이 모여서 하나의 자바 프로그램이 됩니다.

클래스는 개체를 생성하는 설계도라고 할 수 있습니다. 자바프로그램에는 적어도 하나의 클래슨느 반드시 필요합니다.

 

 

메소드?

특정한 작업을 수행하는 코드의 묶음 입니다.

메소드는 외부로부터 입력을 받아서 특정한 작업을 수행하고 작업의 결과를 반환하는 블랙 박스로 생각할수 있습니다.

메소드는 반드시 클래스 안에서 정의 되어야합니다.

 

 

 

 

참고문헌 : 어서와  JAVA는 처음이지

'프로그래밍언어 > JAVA' 카테고리의 다른 글

JAVA<Class,Object,Method-01>  (0) 2019.11.20
JAVA <Array-List/래그드 array>  (0) 2019.11.17
Java<배열 Array>  (0) 2019.11.14
자바 제어문 /반복문  (0) 2019.11.13
자바 들어가기전에..  (0) 2019.11.13

학부때 공부했던 내용이어서 

책으로 독학을 조금 해볼 의향이 있습니다.

만약 조금 루즈해진다 싶으면 학원을 다니는 방법을 사용해서 스스로한테 채찍질을 해야할것 같습니다.

 

들어가기에 앞서 절차지향 방식의 언어와 객체지향 방식의 언어의 차이를 이해하고 넘어가는게 좋다고 생각합니다.

 

절차지향 방식이란?

절차적 프로그래밍(procedural programming)은 절차지향 프로그래밍 혹은 절차지향적 프로그래밍이라고도 불리는 프로그래밍 패러다임의 일종으로서, 때때로 명령형 프로그래밍과 동의어로 쓰이기도 하지만, 프로시저 호출의 개념을 바탕으로 하고 있는 프로그래밍 패러다임을 의미하기도 한다. 프로시저는 루틴, 하위프로그램, 서브루틴, 메서드, 함수(수학적 함수와는 다르고 함수형 프로그래밍에 있는 함수와는 비슷한 의미이다.)라고도 하는데, 간단히 말하여 수행되어야 할 연속적인 계산 과정을 포함하고 있다. 프로그램의 아무 위치에서나 프로시저를 호출될 수 있는데, 다른 프로시저에서도 호출 가능하고 심지어는 자기 자신에서도 호출 가능하다. -위키

 

객체 지향 방식이란?

프로그램을 단순히 데이터와 처리 방법으로 나누는 것이 아니라, 프로그램을 수많은 '객체'라는 기본 단위로 나누고 이 객체들의 상호작용으로 서술하는 방식이다. 객체란 하나의 역할을 수행하는 '메소드와 변수(데이터)'의 묶음으로 봐야 한다.-위키

 

보통 큰차이는 절차지향 방식 언어는 함수단위로 만들어서 사용을 합니다.

반면 객체지향 방식은 말그대로 객체화 하는 방식으로 사용하는 방식입니다. 

보통 객체지향 언어는 협업을 위해서 태어났다고들 합니다. 

public class Hello{

    public static void main(string[]args)
  {
   
      system.out.println("Hello World");
    }

}

전형적인 c언어의 초반 출력문인  자바 방식의 출력문 Hello World 입니다. 

pulic class Hello는 Hello 클래스를 의미합니다.

public static void main은 main 함수를 뜻합니다.

system.out.println은 printf와 마찬가지로 출력문을 뜻합니다. 

 

 

'프로그래밍언어 > JAVA' 카테고리의 다른 글

JAVA<Class,Object,Method-01>  (0) 2019.11.20
JAVA <Array-List/래그드 array>  (0) 2019.11.17
Java<배열 Array>  (0) 2019.11.14
자바 제어문 /반복문  (0) 2019.11.13
JAVA 기초 개념  (0) 2019.11.13

 

웹 프레임워크(web framework) ?

 웹 애플리케이션 프레임워크(Web application framework)는 동적인 웹 페이지나, 웹 애플리케이션, 웹 서비스 개발 보조용으로 만들어지는 애플리케이션 프레임워크의 일종이다. 웹 페이지를 개발하는 과정에서 겪는 어려움을 줄이는 것이 주 목적으로 통상 데이터베이스 연동, 템플릿 형태의 표준, 세션 관리, 코드 재사용 등의 기능을 포함하고 있다. -위키

 

보통 웹 프로그래밍에 있어서 Spring FrameWork을 제일 많이 사용한다고 합니다. 

사실 게임 클라 개발에 있어서도 FrameWork는 보통 남들이 만들어둔걸 가지고 사용하면서  FrameWork를

수정하는 기술이 생각보다 난이도가 있다는것을 알고 있습니다. 

 

Spring의 AOP(aspect-oriented programming)란?

 

컴퓨팅에서 관점 지향 프로그래밍(aspect-oriented programming, AOP)은 횡단 관심사(cross-cutting concern)의 분리를 허용함으로써 모듈성을 증가시키는 것이 목적인 프로그래밍 패러다임이다. 코드 그 자체를 수정하지 않는 대신 기존의 코드에 추가 동작(어드바이스)을 추가함으로써 수행하며, "함수의 이름이 'set'으로 시작하면 모든 함수 호출을 기록한다"와 같이 어느 코드가 포인트컷(pointcut) 사양을 통해 수정되는지를 따로 지정한다. 이를 통해 기능의 코드 핵심부를 어수선하게 채우지 않고도 비즈니스 로직에 핵심적이지 않은 동작들을 프로그램에 추가할 수 있게 한다. 관점 지향 프로그래밍은 관점 지향 소프트웨어 개발의 토대를 형성한다. -위키

 

무슨말인지 하나도 몰라서 하나씩 찾아보도록 했습니다.

 

먼저 횡단관심사란?

 

객체 지향 소프트웨어 개발에서 횡단 관심사 또는 크로스커팅 관심사(cross-cutting concerns)는 다른 관심사에 영향을 미치는 프로그램 애스펙트이다. 이 관심사들은 디자인과 구현 면에서 시스템의 나머지 부분으로부터 깨끗이 분해되지 못하는 경우가 있을 수 있으며 분산(코드 중복)되거나 얽히는(시스템 간의 상당한 의존성 존재) 일이 일어날 수 있다.

-위키

 

흠 뭔소리인지 모르겠더군요 일단 또 하나씩 보면되겠죠 

 

몇몇 블로그를 돌아다니다 보니 

핵심 관심: 계좌이체, 입출금, 이자계산,

횡단관심: 로깅, 보안,트랜젝션

예시가 많더군요

한글 짱짱 영어 원문으로 보는게 안전하지만 

오래 사용되었기 때문에 그냥 한글 블로그로 참고했습니다 ㅎ 

 

 

 

 

핵심관심?

시스템의 핵심 가치와 목적인 관심 영역

 

횡단관심?

쉽게 분리된 모듈로 작성하기 힘든 요구 사항, 공통 모듈 

 

joint point?

횡단 관심의 기능이 삽입되어 실행될 수 있는 특정 위치

 

Point cut?

어느 joint point를  사용할 것인지를 결정 하는 선택 기능

 

Advice?

joint point 에 삽입되어 동작되는 모듈

 

Aspect?

point-cut 과 advice를 합쳐 놓은 코드

 

Weaving?

joint Point 에 해당하는 advice를 삽입하는 과정

 

 

 

출처 :https://needjarvis.tistory.com/328

 

OOP를 더욱 빛나게 해주는, AOP

AOP(관점지향프로그래밍, Aspect Oriented Programming)는 스프링 프레임워크(Spring Framework)을 써야만 되는 이유중 하나로, 대규모 프로그래밍을 매우 강력하게 만들어 줍니다. 관점지향 프로그램을 이해하기..

needjarvis.tistory.com

 

출처 위키피디아

https://ko.wikipedia.org/wiki/%ED%9A%A1%EB%8B%A8_%EA%B4%80%EC%8B%AC%EC%82%AC

 

횡단 관심사 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 객체 지향 소프트웨어 개발에서 횡단 관심사 또는 크로스커팅 관심사(cross-cutting concerns)는 다른 관심사에 영향을 미치는 프로그램의 애스펙트이다. 이 관심사들은 디자인과 구현 면에서 시스템의 나머지 부분으로부터 깨끗이 분해되지 못하는 경우가 있을 수 있으며 분산(코드 중복)되거나 얽히는(시스템 간의 상당한 의존성 존재) 일이 일어날 수 있다. 이를테면, 의무기록을 관리하기 위한 애플리케이션을 작성한다고

ko.wikipedia.org

https://ko.wikipedia.org/wiki/%EA%B4%80%EC%A0%90_%EC%A7%80%ED%96%A5_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D

 

관점 지향 프로그래밍 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 컴퓨팅에서 관점 지향 프로그래밍(aspect-oriented programming, AOP)은 횡단 관심사(cross-cutting concern)의 분리를 허용함으로써 모듈성을 증가시키는 것이 목적인 프로그래밍 패러다임이다. 코드 그 자체를 수정하지 않는 대신 기존의 코드에 추가 동작(어드바이스)을 추가함으로써 수행하며, "함수의 이름이 'set'으로 시작하면 모든 함수 호출을 기록한다"와 같이 어느 코드가 포인트컷(p

ko.wikipedia.org

 

' > Spring' 카테고리의 다른 글

<Spring>JPA  (0) 2020.12.14
<Spring>Lombok?  (0) 2020.12.14
<Spring>Post Method  (0) 2020.12.14
<Spring>HTTP  (0) 2020.12.14
<Spring>통신이란?  (0) 2020.12.14

요즘 포폴 작업에 바빠서 잠시 블로그 업데이트가 늦어질것 같습니다.

포폴끝나는데로 포폴 설명이랑 후기도 올리도록 하겠습니다.

+ Recent posts