stream 에서 filter, map, flatmap 을 사용한 샘플 코드입니다

String[][] arrays = new String[][]{ {"a1", "a2"}, {"b1", "b2"}, {"c1", "c2", "c3"} };
Stream<String[]> stream6 = Arrays.stream(arrays);
Stream<String> stream7 = stream6.flatMap(s -> Arrays.stream(s));
stream7.filter(s-> s.startsWith("a"))
        .map(String::toUpperCase).forEach(System.out::println);

결과

A1

A2

자바 코드를 작성하다 보면

클래스명 / 변수명 / 메서드명 등등 이름을 지을 때 생각을 많이 하게 됩니다.
명명 규칙도 규칙이지만 어떠한 단어를 써야 내가 나중에 메서드명을 보았을 때
아! 이 메서드는 어떠한 것이구나 이 변수는 어떠한 것이구나 하고 생각이 듭니다..

그런데 본인은 영어 실력이 별로여서 맨날 옆에 파파고를 끼고 코딩을 합니다
그래서 메서드명을 지을 때 단어만큼이나 중요한 명명 규칙을 한번 소개해 보도록 하겠습니다.

주로 쓰는 반의어는 아래 표로 정리하였습니다.

 

주로 쓰는 반의어는 아래 표로 정리하였습니다.

get / set
add / remove
create / destroy
start / stop
insert delete
increment / decrement
old / new
begin / end
girst / last
up / down
min / max
next / previous
open /close
show /hide
suspend /resume
parent / child

받다/ 받다
추가/제거
창조/파괴하다
시동/정지
삽입/삭제
증가/감소
구/신
시작/끝
긴/마지막
위/아래
최소/최대
다음/이전
열다/ 닫다
보이다/ 숨기다
일시 정지/재개하다
부모/아이

 

0. 공통 명명 규칙

대소문자가 구분되며 길이에 제한이 없다.
예약어를 사용해서는 안 된다.
숫자로 시작해서는 안 된다.
특수문자는 '_' 와 '$'만을 허용한다.
파스칼 표기법 (PascalCase)과 카멜 표기법(camelCase)를 사용한다.
      PascalCase : 모든 단어에서 첫 번째 문자는 대문자이며 나머지는 소문자이다.
      camelCase : 최초에 사용된 단어를 제외한 첫 번째 문자가 대문자이며 나머지는 소문자이다.
반의어는 반드시 대응하는 개념으로 사용해야 한다.

 

1. 패키지(Package) 명명 규칙

패키지명은 표준 패턴을 따라야 한다.
Ex) [com].[Company].[Project].[TopPackage].[LowerPackage]

패키지명은 가급적 한 단어의 명사를 사용한다.
Ex) 
좋은 예 : com.nexon.sudden.member.object
Ex)  나쁜 예 : sudden.memberObject

 

2. 클래스(Class) 명명 규칙

클래스명에는 파스칼을 사용한다.
Ex) public class HelloWorld {}

인터페이스에는 특별한 접두사나 접미사를 사용하지 않고 파스칼을 사용한다.
Ex) public interface Animal {}

인터페이스를 구현한 클래스에는 특별한 접두사나 접미사를 사용하지 않고 파스칼을 사용한다.
Ex) 
public class Tiger implements animal{}

추상 클래스에는 특별한 접두사 접미사를 사용하지 않고 파스칼을 사용한다.
Ex) public abstract class Animal {}

 

3. 메소드(Method) 명명 규칙

메소드명에는 파스칼 표기법을 사용한다.
Ex) public void SendMessage(String message) {}

속성에 접근하는 메소드명의 접두사는 'get','set'을 사용한다.
Ex) public void setDisplayName
Ex) public void getDisplayName

데이터를 조회하는 메소드명의 접두사는 find를 사용한다.
Ex) public void findData(String data){}

데이터를 입력하는 메소드명의 접두사는 input을 사용한다.
Ex) public void inputData(HashMap data){}

데이터를 변경하는 메소드명의 접두사는 modify를 사용한다.
Ex) public void modifyData(HashMap data){}

데이터를 삭제하는 메소드명의 접두사는 delete를 사용한다.
Ex) public void deleteData(String data){}

데이터를 초기화 하는 메소드명의 접두사는 initialize을 사용한다.
Ex) public void initData(String data){}

반환값의 타입이 boolean인 메소드는 접두사로 is를 사용한다.
Ex) public void isData(String Data){}

데이터를 불러오는 메소드명의 접두사는 load를 사용한다.
Ex) public void loadData(){}

데이터가 있는지 확인하는 메소드명의 접두사는 has를 사용한다.
Ex) public void hasData(){}

보다 지능적인 set이 요구될때 사용하는 메소드명의 접두사는 register를 사용한다.
Ex) public void registerAccount(){}

새로운 객체를 만든뒤 해당 객체를 리턴해주는 메소드명의 접두사는 create를 사용한다.
Ex) public void createAccount(){}

해당 객체를 다른 형태의 객체로 변환해주는 메소드명의 접두사는 to를 사용한다.
Ex) public void toString(){}

해당 객체가 복수인지 단일인지 구분하는 메서드명의 접미사는 s를 사용한다.
Ex) public void getMembers(){}

B를 기준으로 A를 하겠다는 메소드명의 전치사는 By를 사용한다.
Ex) public void getUserByName(String name){}

반환값의 타입이 boolean인 메소드는 접두사로 is를 사용한다.
Ex) public void isData(String Data){}

데이터를 불러오는 메소드명의 접두사는 load를 사용한다.
Ex) public void loadData(){}

데이터가 있는지 확인하는 메소드명의 접두사는 has를 사용한다.
Ex) public void hasData(){}

보다 지능적인 set이 요구될때 사용하는 메소드명의 접두사는 register를 사용한다.
Ex) public void registerAccount(){}

새로운 객체를 만든뒤 해당 객체를 리턴해주는 메소드명의 접두사는 create를 사용한다.
Ex) public void createAccount(){}

해당 객체를 다른 형태의 객체로 변환해주는 메소드명의 접두사는 to를 사용한다.
Ex) public void toString(){}

해당 객체가 복수인지 단일인지 구분하는 메서드명의 접미사는 s를 사용한다.
Ex) public void getMembers(){}

B를 기준으로 A를 하겠다는 메소드명의 전치사는 By를 사용한다.
Ex) public void getUserByName(String name){}

 

4. 변수(Variable) 명명 규칙

변수와 메소드의 파라미터에는 카멜표기법을 사용한다.
변수에 약어를 사용하지 않고 모든 의미를 충분히 담는다.
한 글자로 된 이름을 사용하지 않는다.
선언된 지점에서 초기화하며, 가능한 사용범위를 최소화 한다. 숫자 0 레퍼런스 null

반복문에서 인덱스로 사용할 변수는 i,j,k 등으로 사용한다.
Ex) for(int i = 0; i < 10; i++){}

지역변수와 멤버변수(전역변수)는 변수명 앞에 밑줄(_)을 사용하여 구별한다.
boolean타입의 변수는 접두사로 is를 사용한다
 Ex) isCheck

 

 

출처 : https://m.blog.naver.com/reona7140/221306141987

Null 포인터 예외 (java.lang.NullPointerException)는 무엇이며 그 원인은 무엇입니까?

참조 변수 (예 : 객체)를 선언하면 실제로 객체에 대한 포인터가 생성됩니다. 기본 유형의 변수를 선언하는 다음 코드를 고려하십시오. int

int x;
x = 10;

이 예제에서 변수 x는 int이고 자바는 0으로 초기화합니다. 두 번째 줄에 값 10을 지정하면 x로 참조되는 메모리 위치에 값 10이 기록됩니다.
그러나 참조 유형을 선언하려고하면 다른 결과가 발생합니다. 다음 코드를 취하십시오.

Integer num; 
num = new Integer(10);

첫 번째 줄은 num이라는 변수를 선언하지만 실제로 아직 원시 값을 포함하지는 않습니다. 대신 포인터가 포함됩니다 (유형이 참조 유형 인 정수이기 때문에). 아직 무엇을 가리킬 지 말하지 않았기 때문에 Java는 null로 설정합니다. 즉 "나는 아무 것도 가리키고 있지 않습니다."라는 의미입니다.

두 번째 줄에서는 new 키워드를 사용하여 Integer 유형의 객체를 인스턴스화 (또는 생성)하고 포인터 변수 num을 해당 Integer 객체에 할당합니다.

NullPointerException은 변수를 선언했지만 객체를 만들지 않았을 때 발생합니다. 그래서 당신은 실제로 존재하지 않는 무언가를 가리키고 있습니다.

객체를 만들기 전에 num을 참조 해제하려고하면 NullPointerException이 발생합니다. 가장 간단한 경우 컴파일러는 문제를 파악하여 "num이 초기화되지 않았을 수 있습니다."라고 알려주지만 때때로 객체를 직접 생성하지 않는 코드를 작성할 수도 있습니다.
예를 들어 다음과 같은 방법이있을 수 있습니다.

public void doSomething(SomeObject obj) { 
//do something to obj 
}

어떤 경우에는 obj 객체를 만들지 않고 doSomething () 메서드가 호출되기 전에 만들어 졌다고 가정합니다. 다음과 같이 메소드를 호출 할 수 있습니다.

doSomething(null);

이 경우 obj는 null입니다. 이 메소드가 전달 된 객체에 뭔가를하려는 경우 NullPointerException이 throw되는 것이 적절합니다. 프로그래머가 오류이므로 프로그래머가 디버깅을 위해 해당 정보를 필요로하기 때문입니다.

대안으로, 메소드의 목적이 전달 된 객체에서만 작동하는 것이 아닌 경우가 있으므로 null 매개 변수가 허용 될 수 있습니다. 이 경우, 널 (NULL) 매개 변수를 점검하고 다르게 작동해야합니다. 또한 설명서에서 이 내용을 설명해야합니다. 예를 들어 doSomething ()은 다음과 같이 작성할 수 있습니다.

/** * @param obj An optional foo for ____. May be null, in which case 
* the result will be ____. 
*/ 
public void doSomething(SomeObject obj) { 
  if(obj != null) { 
  	//do something 
  } else { 
  	//do something else 
  } 
}

https://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it



Method Signature

(name, parameter_types)


Method Type

(return type, method type parameter, methid argument types, exception)


용어 :   covariance??


Double Dispatch

+ Recent posts