#정규표현식이란

문자열에 정해진 문자열만 포함되어 있는가 검사해서 True, False로 결과를 반환하는 것

 

 

#정규표현식 작성 방법

문자 인코딩에 따라 조금씩 다르다

 ^

 문자열의 시작

 문자열의 종료

 .

 임의의 한 문자 (문자의 종류 가리지 않음)

 단, \ 는 넣을 수 없음

 *

 앞 문자가 없을 수도 무한정 많을 수도 있음

 앞 문자가 하나 이상

 앞 문자가 없거나 하나있음

 []

 문자의 집합이나 범위를 나타내며 두 문자 사이는 - 기호로 범위를 나타낸다. []내에서 ^가 선행하여 존재하면 not 을 나타낸다.

 {}

 횟수 또는 범위를 나타낸다.

 ()

 소괄호 안의 문자를 하나의 문자로 인식 

 |

 패턴 안에서 or 연산을 수행할 때 사용

 \s

 공백 문자

 \S

 공백 문자가 아닌 나머지 문자

 \w

 알파벳이나 숫자

\W 

 알파벳이나 숫자를 제외한 문자

\d 

 숫자 [0-9]와 동일

\D 

 숫자를 제외한 모든 문자

 정규표현식 역슬래시(\)는 확장 문자
 역슬래시 다음에 일반 문자가 오면 특수문자로 취급하고 역슬래시 다음에 특수문자가 오면 그 문자 자체를 의미

(?i) 

 앞 부분에 (?i) 라는 옵션을 넣어주면 대소문자를 구분하지 않음

 

#정규표현식 예제

1) 숫자만 : ^[0-9]+$

2) 영문자만 : ^[a-zA-Z]+$

3) 한글만 : ^[가-힣]+$

4) 영어 & 숫자만 : ^[a-zA-Z0-9]+$

5) E-Mail : ^[a-zA-Z0-9]+@[a-zA-Z0-9]+$

6) 휴대폰 : ^01(?:0|1|[6-9]) - (?:\d{3}|\d{4}) - \d{4}$

7) 일반전화 : ^\d{2,3} - \d{3,4} - \d{4}$

8) 주민등록번호 : \d{6} \- [1-4]\d{6}

9) IP 주소 : ([0-9]{1,3}) \. ([0-9]{1,3}) \. ([0-9]{1,3}) \. ([0-9]{1,3})

10) URL : "^(https?|ftp)(:\\/\\/[-_.!~*\\'()a-zA-Z0-9;\\/?:\\@&=+\\$,%#]+)$"

 

#일본 기준

1) 숫자만 : ^[0-9]+$

2) 영문자만 : ^[a-zA-Z]+$

3) 히라가나 : ^[\\u3040-\\u309F]+$  or  ^[ぁ-ん]+$

4) 가타카나 : ^[\\u30A0-\\u30FF]+$  or  ^[ァ-ヶ]+$

5) 반각 가타카나 : ^[\\uFF65-\\uFF9F]+$

6) 전각문자만 : ^[\\u3040-\\u30FF]+$

7) 한자 : ^[亜-熙]+$

 

 


#정규표현식 사용 예제

검사 방법은 3가지 방법이 있다

package Study;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class PatternStudy {
	public static void main(String[] args) {
		String reg = "^[0-9]*$";//정규표현식
		String strValue = "ABC";//검사할 문자열
		
		// 결과를 true, false로 반환함
		System.out.println(Pattern.matches(reg, strValue));//Pattern클래스의 matches 메서드, 대상 문자열이 패턴과 일치하는지 검사
		System.out.println(reg.matches(strValue));//String클래스의 matches 메서드, 대상 문자열이 패턴과 일치하는지 검사
		
		// 결과를 true, false로 반환함
		Pattern pattern = Pattern.compile("^[0-9]*$");//주어진 정규표현식으로 패턴을 작성함
		Matcher matcher = pattern.matcher(strValue);//대상 문자열이 패턴과 일치하는지 검사
		System.out.println(matcher.find());
		
		//일본어
		String reg2 = "^[\\u3040-\\u309F]+$";
		String str = "あい";
		System.out.println(str.matches(reg2));
	}
}

 

 

#정규표현식을 조합해서 쓰는 방법도 존재한다

 

package Study;

public class PatternStudy2 {
	
	static final String ENGLISH_CODES = "a-zA-Z"; //영문자
	static final String KOREA_CODES = "가-힣"; //한글
	static final String NUMBER_CODES = "0-9"; //숫자
	static final String HIRAGANA_CODES = "\\u3040-\\u309F"; //히라가나
	static final String KATAKANA_CODES = "\\u30A0-\\u30FF"; //가타카나
	
	//지정한 문자만 허용하는 정규표현을 반환함
	public static String toMatchRegex(String codes) {
		return "^[" + codes + "]+$";
	}
	
	//지정 문자 이외만 허용하는 정규표현을 반환함
	public static String toNotMatchRegex(String codes) {
		return ".*[^" + codes + "].*";
	}
	
	public static void main(String[] args) {
		String str1 = "안녕하세요123";
		String str2 = "あいうえABC123";
		
		//지정한 문자만 허용하는 정규표현을 반환함
		System.out.println(str1.matches(toMatchRegex(KOREA_CODES + NUMBER_CODES)));
		System.out.println(str2.matches(toMatchRegex(HIRAGANA_CODES + ENGLISH_CODES + NUMBER_CODES)));
		
		//지정 문자 이외만 허용하는 정규표현을 반환함
		System.out.println(str1.matches(toNotMatchRegex(KOREA_CODES + NUMBER_CODES)));
		System.out.println(str2.matches(toNotMatchRegex(HIRAGANA_CODES + ENGLISH_CODES + NUMBER_CODES)));
	}

}

'Programming > JAVA' 카테고리의 다른 글

[SPRING] Spring 구조 및 DTO, VO 개념  (0) 2020.10.07
[JAVA] WrapperClass(래퍼 클래스)  (0) 2020.10.04
[JAVA] JUnit  (0) 2020.09.25
[lombok] 롬복 설치 방법  (0) 2020.09.23
[JAVA] String, StringBuffer, StringBuilder  (0) 2020.09.23

JUnit이란 자바 단위 테스트 도구이다

 

JUnit API : junit.org/junit4/javadoc/4.12/org/junit/experimental/categories/Categories.html

버전별 링크 : mvnrepository.com/artifact/junit/junit

 

Maven Repository: junit » junit

JUnit is a unit testing framework for Java, created by Erich Gamma and Kent Beck. VersionRepositoryUsagesDate4.13.x4.13Central5,037Jan, 20204.13-rc-2Central56Dec, 20194.13-rc-1Central54Oct, 20194.13-beta-3Central298May, 20194.13-beta-2Central118Feb, 20194.

mvnrepository.com

BuildPath를 통한 추가방법(추천)

프로젝트>Build Path>Configure Build Path

Add Library>JUnit 클릭

 

#Maven프로젝트 pom.xml에 추가

<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
</dependency>

#Gradle프로젝트 Build.gradle의 dependencies에 추가

dependencies {
	// https://mvnrepository.com/artifact/junit/junit
	testCompile group: 'junit', name: 'junit', version: '4.12'
}

 

#테스트 방법

테스트할 클래스 오른쪽마우스>New>Other 클릭

 

 

 

Java>JUnit>JUnit Test Case 선택후 다음

 

테스트할 JUnit버전 선택

테스트 패키지 이름은 테스트 대상 패키지와 동일하며 바꿔도 되고 안바꿔도 됩니다

 

테스트할 메서드 선택후 완료

 

 

test/java폴더 안에 패키지와 클래스 메서드가 자동 생성된 모습

 

 

테스트를 실행 할 클래스>Run As>JUnit Test 실행 (클래스내 @Test 어노테이션이 존재해야 보인다)

 

문제가 없다면 초록색, 문제가 있다면 빨간색 결과창을 보여줍니다

테스트할 클래스와 테스트를 하는 클래스는 패키지가 달라도 상관없지만

일반적으로는 개발환경과 동일 조건에서 테스트하기 위해 같은 위치에 작성해서 테스트합니다(사진은 다른위치)

 

#JUnit이 제공하는 메서드가 있는데 이것을 단정(assert Method) 메서드라고 합니다

단정 메서드 리스트 : junit.sourceforge.net/javadoc/org/junit/Assert.html

assertEquals(A, B);//객체 A와 B의 값이 일치하는가
assertSame(A, B);//객체 A와 B가 일치하는가
assertArrayEquals(A, B);//배열 A,B가 일치하는가
assertNotNull(A);//객체 A가 null인가 아닌가
assertTrue(A);//객체가 true인지 확인

JUnit은 해당 메서드를 통과하지 못하면 에러를 던집니다

 

#JUnit 어노테이션 종류

JUnit4/JUnit5 순서

  • @Test()/@Test : Test할 대상
  • @BeforeClass/@BeforeAll : 테스트 클래스가 실행될 때 실행 됨
  • @AfterClass/@AfterAll : 테스트 클래스가 종료될 때 실행 됨
  • @Before/@BeforeEach : @Test메서드가 실행될때 실행 됨
  • @After/@AfterEach : @Test메서드가 종료될때 실행 됨
  • @lgnore/@Disabled : 해당 테스트 메서드는 실행하지 않음

 

package com.example.demo;

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;

import com.example.demo.controller.Calcurator;

public class JUnitTest2 {
	@BeforeClass//테스트 클래스가 실행 될때 실행 됨
	public static void beforeClassTest() {
		System.out.println("BeforeClass");
	}
	@Before//@Test메서드가 실행될 때 실행 됨
	public void beforeTest() {
		System.out.println("Before");
	}
	@After//@Test 메서드가 종료될 때 실행 됨
	public void afterTest() {
		System.out.println("after");
	}

	@AfterClass//테스트 클래스가 종료 될때 실행됨
	public static void afterClassTest() {
		System.out.println("AfterClass");
	}
	
	@Test
	public void calcuratorTest() {
		Calcurator calcurator = new Calcurator();
		double plus = calcurator.plus(10, 20);
		System.out.println("plus : " + plus);
	}
	@Test
	public void calcuratorTest1() {
		Calcurator calcurator = new Calcurator();
		double minus = calcurator.minus(10, 20);
		System.out.println("minus : " + minus);
	}	
}

 

@Test() 어노테이션은 여러 조건을 설정할 수 있다(JUnit5부터는 사용이 불가능 하다)

  • @Test(timeout = 1000) : 해당 테스트 메서드는 1000밀리초를 넘으면 에러를 던짐(시간은 임의설정 가능)
  • @Test(expected = RuntimeException.class) : 해당 테스트 메서드는 RuntimeException이 발생해야 통과

'Programming > JAVA' 카테고리의 다른 글

[JAVA] WrapperClass(래퍼 클래스)  (0) 2020.10.04
[JAVA] 정규표현식  (0) 2020.10.01
[lombok] 롬복 설치 방법  (0) 2020.09.23
[JAVA] String, StringBuffer, StringBuilder  (0) 2020.09.23
[JAVA] 프로그래밍 네이밍 규칙  (0) 2020.09.17
//초기값 
int keyPin = 0; // 0000 0000 

//LED컨트롤 
int LED1 = 1; 0000 0001 
int LED2 = 5; 0000 0101 

keyPin = num1 | num2; //1번LED와 3번LED ON

비트연산자는 C언어에서 필수로 사용되는 기능이다

C언어가 임베디드분야에서 사용되기 때문

그리고 기계를 컨트롤할때 비트연산자가 사용된다

 

#include<stdio.h>

int main() {
	int num1 = 1;// 0000 0001
	int num2 = 5;// 0000 0101

	printf("%d\n", num1 & num2);//AND : 0000 0001
	printf("%d\n", num1 | num2);//OR : 0000 0101
	printf("%d\n", num1 ^ num2);//XOR : 0000 0100

	return 0;
}

 

0000 0000 는 2진수 표기법이다

컴퓨터가 사용하는 연산 방식으로 0과 1만 사용한다 

 

왼쪽부터 1 2 4 8 16 32 64 128 256..

숫자 1은 0000 0001

숫자 5는 0000 0101

숫자 35는 0010 0011

 

이러한 방식으로 숫자를 표기한다

 

0 : false

1 : true 

 

숫자로 설명하면

&(AND) : 둘 다 같으면 1 같지 않으면 0

 | (OR)   : 둘 중에 하나라도 1이면 1

^(XOR)  : 둘다 같으면 0 같지 않으면 1

 

#임베디드에서의 사용방식

0 : 전류 차단
1 : 전류 통과

포트번호 : 8765 4321
동작신호 : 0000 0000

 

동작신호가 0이면 OFF, 1이면 ON이다

포트번호 1 : 첫번째 LED ON
포트번호 2 : 두번째 LED ON

포트번호 3 : 세번째 LED ON 
..
..

이라고 가정하면

//초기값 
int keyPin = 0; // 0000 0000 

//LED컨트롤 
int LED1 = 1; //0000 0001, 첫번째 LED를 키는 신호
int LED2 = 2; //0000 0010, 두번째 LED를 키는 신호
int OFF = 0; //0000 0000, 모든 LED를 끔

keyPin = keyPin | LED1; //1번 LED ON
keyPin = keyPin | LED2; //2번 LED ON

keyPin = OFF; //LED 전부 끄기

 

이러한 방식으로 사용된다

'Programming > C' 카테고리의 다른 글

[C언어] 함수  (0) 2020.09.23

롬복의 기능은 자바 Bean의 getter setter의 자동생성이다

현업에서도 자주 사용된다

 

다운로드 링크 : projectlombok.org/download

 

실행시킬 위치에 lombok.jar파일 이동시키기

명령 프롬프트(CMD) 실행

 

jar 파일 실행 방법은 다음과 같다

java - jar 파일명.jar

 

아래 코드 복사해서 실행

java -jar lombok.jar

 

실행 후 스캔이 끝나면 이클립스가 설치된 위치가 나오며 install/update를 눌러주면 설치가 끝난다

 

 

이클립스 폴더를 가면 lombok.jar가 있는걸보아 반드시 명령프롬프트가 아닌

직접 jar파일을 넣어도 될듯하다

 

@Data 어노테이션을 클래스 위에 작성하는 것으로 끝이다

@Data
public class BoardVO {
	private String goodsNumber; //상품코드
	private String goodsName; //상품명
	private String goodsId; //상품 아이디(구분)
	private int goodsPrice;  //단가
	private int goodsCost;//원가
	private String fileName; //파일이름
	private Timestamp insertDate; //등록일자
	private Timestamp updateDate; //갱신일자
	
}

 

 

 

설치가 됐음에도 적용되지 않을때는

 

아래의 작업을 수행한다

 

#프로젝트 클린

 

#메이븐 업데이트

'Programming > JAVA' 카테고리의 다른 글

[JAVA] 정규표현식  (0) 2020.10.01
[JAVA] JUnit  (0) 2020.09.25
[JAVA] String, StringBuffer, StringBuilder  (0) 2020.09.23
[JAVA] 프로그래밍 네이밍 규칙  (0) 2020.09.17
[Spring] JSON  (0) 2020.09.16
#include<stdio.h>

int sum(int, int);//프로토 타입

int main() {//메인
	int A = 1;
	int B = 2;
	int result = sum(A, B);

	printf("A+B = %d", result);

	return 0;
}

int sum(int A, int B) {//함수
	int result = A + B;

	return result;
}

C언어의 함수 사용법은

프로토타입(선언)후 호출(정의)순서이다

 

컴파일러에게 ~한 함수가 있다고 프로토타입으로 알린 후

함수를 정의해서 사용한다

'Programming > C' 카테고리의 다른 글

[C언어] 비트연산자  (0) 2020.09.23

+ Recent posts