String : 문자열이 추가될 때마다 메모리 주소가 변경 됨

StringBuffer : 문자열이 추가 되어도 메모리 주소는 변하지 않음, 동기화 지원

StringBuilder : 문자열이 추가 되어도 메모리 주소는 변하지 않음, 동기화 미지원

package Study;

public class StringStudy {

	public static void main(String[] args) {
		
		/*String*/
		String str = new String("hello");//hello
		System.out.println(str.hashCode());//메모리 주소 : 99162322
		str = str.concat(" world");//hello world
		System.out.println(str.hashCode());//메모리 주소 : 1794106052
		
		/*StringBuffer : 동기화 지원*/
		StringBuffer strBuffer = new StringBuffer("hello");//hello
		System.out.println(strBuffer.hashCode());//메모리 주소 : 366712642
		strBuffer.append(" world");//hello world
		System.out.println(strBuffer.hashCode());//메모리 주소 : 366712642
		
		/*StringBuilder : 동기화 미지원*/
		StringBuilder strBuilder = new StringBuilder("");//StringBuilder strBuilder = ""; X
		System.out.println(strBuilder.hashCode());//메모리 주소 : 1829164700
		strBuilder.append(" world");//hello world
		System.out.println(strBuilder.hashCode());//메모리 주소 : 1829164700

	}

}

String은 문자열이 추가, 삭제 될때마다 메모리 주소가 변경되므로 잦은 문자열의 변경이 있는경우

StringBuffer, StringBuilder보다 연산속도가 느리다 

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

[JAVA] JUnit  (0) 2020.09.25
[lombok] 롬복 설치 방법  (0) 2020.09.23
[JAVA] 프로그래밍 네이밍 규칙  (0) 2020.09.17
[Spring] JSON  (0) 2020.09.16
[JAVA] Serializable(직렬화) 와 Deserialize(역직렬화)  (0) 2020.09.16

자바를 기준으로 작성, 대표적으로 사용되는건 아래 4가지 표기법이 존재한다

 

  • 파스칼 표기법(PascalCase) : 모든단어의 첫번째 문자는 대문자이며 나머지는 소문자
  • 카멜 표기법(CamelCase) : 첫번째 단어는 소문자이며 두번째 단어부터 첫번째는 대문자 나머지 소문자
  • 헝가리안 표기법(Hungarian Notiation) : 접두어에 자료형을 알아볼 수 있게 표기
  • 스네이크 표기법(Snake Case) : 단어 사이에 _를 사용해 표기

 

  • 패키지 : 전부 소문자 
  • 클래스 : 단어 첫글자 대문자
  • 메서드 : 첫번째 단어 소문자, 두번째 부터 대문자
  • 변수 : 표기법에 따라 다름
  • 상수 : 전부 대문자로 작성하되, 단어와 단어 사이는 _(언더바)를 사용해 구분

#네이밍 예시

 

패키지 : 전부 소문자 

com.example.demo
com.example.demo.controller
com.example.demo.mapper
com.example.demo.entity
com.example.demo.service

클래스 : 파스칼 표기법

public class BoardController{}
public class Membercontroller{}

public class BoardVO{}
public class MemberVO{}

public class BoardService{}
public class MemberService{}

public interface BoardMapper{}
public interface MemberMapper{}

메서드 : 카멜 표기법

public List<BoardVO> selectBoard()
public int insertBoard(BoardVO boardVO)
public int updateBoard(BoardVO boardVO)
public int deleteBoard(BoardVO boardVO)
public BoardVO viewBoard(BoardVO boardVO)
public List<BoardVO> searchBoard(String keyword)

변수 : 표기법에 따라 달라짐

String MemberName = "A";    //파스칼
String memberName = "A";    //카멜
String StrMemberName = "A"; //헝가리안
String member_name = "A";   //스네이크

List<String> MemberList = new ArrayList<>();    //파스칼
List<String> memberList = new ArrayList<>();    //카멜
List<String> ArrMemberList = new ArrayList<>(); //헝가리안
List<String> member_list = new ArrayList<>();   //스네이크

상수 : 전부 대문자, 단어와 단어사이는 _로 구분

private static final String UPLOAD_PATH = "/images/";
private static final int LOGIN_COUNT = 3;

 

개발현장마다 변수명 규칙도 다르니 그때그때 달라지기도 하며

개발환경에 따라서도 달라지기도 한다

 

자바의 경우 카멜 표기법(memberList)가 표준이지만

PostgreSQL의 경우 대소문자를 구분하기 때문에 대문자 단어는 ""로 감싸줘야 인식하기 때문에

카멜표기법을 사용하면 코딩이 길어진다

이 경우에는 스네이크 표기법(member_list)를 사용하기도 한다

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

[lombok] 롬복 설치 방법  (0) 2020.09.23
[JAVA] String, StringBuffer, StringBuilder  (0) 2020.09.23
[Spring] JSON  (0) 2020.09.16
[JAVA] Serializable(직렬화) 와 Deserialize(역직렬화)  (0) 2020.09.16
[JAVA] IndexOf  (0) 2020.09.14

JSON(JavaScript Object Notation)

자바 스크립트에서 객체를 만들때 사용함

 

프로그래밍언어가아닌 데이터포맷형태

Map과 같은 (key, value)형태를 지닌다

 

자료형은 Number, String, Boolean, Array, Object, NULL만 가능하다

 

JSON 메서드

  • JSON.stringify() : 인수로 받은 자바스크립트 객체를 문자열로 반환
  • JSON.parse() : 인수로 받은 문자열을 자바스크립트 객체로 반환
  • .toJSON() : 자바스크립트의 객체를 "JSON형식의 문자열"로 반환

JSON을 쓰기위해서는 pom.xml에 JSON라이브러리 의존성 추가를 해줄 필요가 있다

        <dependency>
            <groupId>com.googlecode.json-simple</groupId>
            <artifactId>json-simple</artifactId>
            <version>1.1</version>
        </dependency>

 

JSON.jar파일을 다운받아 라이브러리 추가로 추가 하는 방법도 존재한다 

 

JSON.stringify() 

<script>
	var member = {memberNum : 1,memberId : "ABC123",memberName : "KIM"};//자바스크립트 객체생성				 
	var data = JSON.stringify(member);//JSON으로 변환
	alert(data);
</script>

 

JSON.parse()

<script>
	var member = {
				 memberNum : 1,
				 memberId : "ABC123",
				 memberName : "KIM" 	
				 };
				 
	var data = JSON.stringify(member);//JSON객체로 변환
	var data = JSON.parse(data);//다시 자바스크립트 객체로 변환

</script>

 

.toJSON()

 

<script>
	var date = new Date();//현재 날짜 객체 생성
	alert(date);
	var result = JSON.stringify(date);//인수로 받은 자바스크립트 객체를 문자열로 반환
	alert(result);
	var result = date.toJSON();//자바스크립트의 객체의 데이터를 JSON형식의 문자열로 반환
	alert(result);
</script>

 

 

alert 결과

 

JSON형식의 문자열은 일반적인 문자열과 비교해 앞뒤에 ""가 붙는다

 

 

자바에서의 JSON 다루기

 

import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
    
    @SuppressWarnings("unchecked")//검증되지 않은 연산자 관련 경고 억제
	public JSONObject JSONStudy() {
		JSONObject obj1 = new JSONObject();//첫번째 JSON객체 생성
		obj1.put("memberNum", 1);
		obj1.put("memberId", "ABC123");
		
		
		JSONObject obj2 = new JSONObject();//두번째 JSON객체 생성
		obj2.put("memberNum", 1);
		obj2.put("memberId", "ABC123");
		obj2.put("memberName", "KIM");
		
		JSONArray memberList = new JSONArray();//JSON리스트 생성
		memberList.add(obj2);//JSON객체를 JSON리스트에 넣음, 메모리에서의 형태는 Bean을 리스트에 넣었을 때와 같음
		
		obj1.put("memberList", memberList);//JSON리스트를 첫번째 JSON객체에 넣음
		
		return obj1;
        }

 

Serializable

내부에서 사용되는 객체나 데이터를 외부에서도 사용할 수 있도록 byte형태로 변환

Exam)컴퓨터1이라는 개발환경에서 읽어 들일 수 있는 데이터(객체)를

컴퓨터2에서 읽어 들일 때 개발환경이 같다면 읽어들일 수 있음

 

Deserialize

byte로 변환된 객체나 데이터를 원래의 객체나 데이터로 변환

 

컴퓨터1(직렬화) >>> 컴퓨터2(역직렬화)

 

SerialVersionUID(개발환경ID) : 개발환경이 같은지 다른지 구분하기 위해 있는 ID

역직렬화를 할때 값이 같은지 체크 함, 다르다면 개발환경이 다르다며 에러가 발생함

작성하지 않을 경우 직렬화 시 내부에서 자동 생성됨

직렬화를 할 객체에 작성한다

 

직렬화를 할 Bean

package Study;

import java.io.Serializable;

public class MemberBean implements Serializable{
	private static final long serialVersionUID = 2545104744891989076L;//개발환경을 구분하기위한 ID, 미작성시 자동생성 됨

	private int memberNum;
	private String memberId;
	private String memberPass;
	private String memberPhone;
	private String memberAddress;
	private transient String memberName; //transient : 직렬화(Serializable) 제외
	
	//생성자
	public MemberBean(int memberNum, String memberId, String memberPass, String memberPhone, String memberAddress,
			String memberName) {
		super();
		this.memberNum = memberNum;
		this.memberId = memberId;
		this.memberPass = memberPass;
		this.memberPhone = memberPhone;
		this.memberAddress = memberAddress;
		this.memberName = memberName;
	}
	
	//getter, setter
	public int getMemberNum() {
		return memberNum;
	}

	public void setMemberNum(int memberNum) {
		this.memberNum = memberNum;
	}

	public String getMemberId() {
		return memberId;
	}

	public void setMemberId(String memberId) {
		this.memberId = memberId;
	}

	public String getMemberPass() {
		return memberPass;
	}

	public void setMemberPass(String memberPass) {
		this.memberPass = memberPass;
	}

	public String getMemberPhone() {
		return memberPhone;
	}

	public void setMemberPhone(String memberPhone) {
		this.memberPhone = memberPhone;
	}

	public String getMemberAddress() {
		return memberAddress;
	}

	public void setMemberAddress(String memberAddress) {
		this.memberAddress = memberAddress;
	}

	public String getMemberName() {
		return memberName;
	}

	public void setMemberName(String memberName) {
		this.memberName = memberName;
	}
	
	//toString
	@Override
	public String toString() {
		return "MemberBean [memberNum=" + memberNum + ", memberId=" + memberId + ", memberPass=" + memberPass
				+ ", memberPhone=" + memberPhone + ", memberAddress=" + memberAddress + "]";
	}
	
}

 

메인 클래스

package Study;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;

public class SerializableStudy {

	public static void main(String[] args) {
		SerializableStudy study = new SerializableStudy();//클래스 객체 생성
		study.serializableStudy();//직렬화 실행
		study.deserializeStudy();//역직렬화 실행
	}
	
	public void serializableStudy() {
		MemberBean memberBean1 = new MemberBean(1, "ABC123", "1234", "010-1111-1111", "tokyo", "tanaka");//Bean객체 생성
		MemberBean memberBean2 = new MemberBean(1, "DEF456", "5678", "010-2222-2222", "osaka", "kimura");//Bean객체 생성
		List<MemberBean> memberList = new ArrayList<MemberBean>();//Bean객체를 받는 리스트 생성
		memberList.add(memberBean1);//리스트 추가
		memberList.add(memberBean2);
		
		try{
			FileOutputStream fos = new FileOutputStream("c:\\test\\result.txt");//출력위치
			ObjectOutputStream oos = new ObjectOutputStream(fos);//객체를 출력하는 스트림
			
			/*객체 쓰기*/
			oos.writeObject(memberBean1);//FileOutputStream : java.io.FileOutputStream@15db9742
			oos.writeObject(memberList);//ObjectOutputStream : java.io.ObjectOutputStream@6d06d69c
			oos.close();
			
		} catch (Exception e) {
			e.printStackTrace();
		} 
	}
	
	public void deserializeStudy() {
		try {
			FileInputStream fis = new FileInputStream("c:\\test\\result.txt");//입력위치
			ObjectInputStream ois = new ObjectInputStream(fis);//객체를 입력하는 스트림

			Object memberBean = ois.readObject();//첫번째 객체를 읽어 들임
			Object memberList = ois.readObject();//두번째 객체를 읽어 들임
			
			System.out.println(memberBean.toString());//읽어들인 객체 출력
			System.out.println(memberList.toString());
			ois.close();
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

 

직렬화를 할 객체는 implements Serializable을 구현함

직렬화를 제외할 멤버변수는 멤버타입 앞에 transient을 작성

 

역직렬화 시 직렬화를 했을때의 객체구조가 바뀌면 에러가 발생할 수 있음

멤버변수가 추가 되었을 때 : 추가된 필드에 null값이 입력됨(가능)

멤버변수가 삭제 되었을 때 : 해당 필드에 값을 표시하지 않음(가능)

멤버변수 타입이 변경되었을 때 : 에러발생(불가능)

 

 

직렬화를 한 환경의 serialVersionUID(개발환경ID)와 역직렬화를 한 환경 serialVersionUID(개발환경ID)가 다를경우

 

 

UID가 다르다고 에러가 발생함

 

더 좋은 글이 있어서 링크

woowabros.github.io/experience/2017/10/17/java-serialize2.html

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

[JAVA] 프로그래밍 네이밍 규칙  (0) 2020.09.17
[Spring] JSON  (0) 2020.09.16
[JAVA] IndexOf  (0) 2020.09.14
[JAVA] 문자열 자르기  (0) 2020.09.14
[JAVA] List  (0) 2020.09.13

IndexOf는 특정 문자가 몇번째에 있는지 찾아서 반환해주는 메서드이다

 

package Study;

public class IndexOfStudy {

	public static void main(String[] args) {
		/*String 클래스는 문자를 배열에 넣어 문자열을 만들기 때문에 0번부터 시작*/
		String str = "ABCDE-123C45"; //0~10
		
		System.out.println(str.indexOf("C") + "번째");//2번째
		System.out.println(str.indexOf("C", 4) + "번째");//"C"를 4번째 이후부터 찾아라 : 9번째
		System.out.println(str.indexOf("-") + "번째");//5번째
		System.out.println(str.indexOf(","));//-1, 찾지 못했을 경우 -1을 반환함

	}

}

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

[Spring] JSON  (0) 2020.09.16
[JAVA] Serializable(직렬화) 와 Deserialize(역직렬화)  (0) 2020.09.16
[JAVA] 문자열 자르기  (0) 2020.09.14
[JAVA] List  (0) 2020.09.13
[JAVA] Map  (0) 2020.09.13

+ Recent posts