반응형

Java is Dead — 오늘날에도 여전히 Java가 적합하다고 생각하는 개발자의 5가지 오해!

https://medium.com/@sidh.thomas1/java-is-dead-6-misconceptions-of-developers-that-still-think-java-is-relevant-today-683310849855

 

Java is Dead — 6 Misconceptions of developers that still think Java is relevant today!

It is a common misconception that people still think Java is relevant in today’s day and age. In reality Java is a dying programming…

medium.com

사람들이 여전히 Java가 오늘날과 관련이 있다고 생각하는 것은 일반적인 오해입니다. 실제로 Java는 죽어가는 프로그래밍 언어입니다. Java는 세계에서 가장 널리 사용되고 널리 사용되는 프로그래밍 언어 중 하나이지만 곧 사라질 위험에 처해 있습니다. 오늘날 Java는 크고 활발한 개발자 커뮤니티를 보유하고 있으며 웹 개발, 모바일 앱 개발 및 엔터프라이즈 수준 소프트웨어 개발을 포함한 광범위한 애플리케이션에 여전히 사용되고 있지만 Java가 향후 10년 동안 살아남을 수 있을까요? 개발자가 Java에 대해 가지고 있는 오해를 알아보겠습니다.

오해 1 : Java에는 크고 활발한 개발자 커뮤니티가 있습니다. 전 세계에 수백만 명의 Java 개발자가 있으며 언어는 개발자가 지식과 리소스를 공유하는 온라인 포럼 및 커뮤니티에서 강력한 입지를 확보하고 있습니다.

이것이 계속해서 사실이지만, 개발자들이 다른 플랫폼과 프로그래밍 언어로 이동하는 속도를 보면 알 수 있으며 개인적으로 개발자들이 패닉에 빠지는 것을 보았습니다. 주요 문제는 프로그래밍 언어로서의 Java가 현대화되지 않았기 때문에 여전히 장황하게 남아 있고, 불안정하지만 매우 투박한 유형 시스템을 가짐으로써 정적 유형과 동적 유형 사이의 최악의 두 세계를 결합하고, VM에서 실행해야 한다는 것입니다. 거시적인 시작 시간(오래 실행되는 서버에는 문제가 되지 않지만 명령줄 응용 프로그램에는 문제가 됨). 요즘에는 꽤 잘 수행되지만 여전히 C 또는 C++에 비해 경쟁력이 없으며 약간의 사랑으로 C#, Go, Rust 및 Python이 해당 도메인에서 이를 능가할 수 있습니다. 실제 프로덕션 서버의 경우

오해 2 : Java는 광범위한 응용 프로그램에 사용됩니다. Java는 웹 개발 언어일 뿐만 아니라 모바일 앱, 게임 및 엔터프라이즈급 소프트웨어 개발에도 사용됩니다. 이러한 다양성으로 인해 다양한 유형의 프로젝트에 유용한 언어가 됩니다.

Java는 더 이상 모바일 애플리케이션 개발, 특히 Android에서 선호하는 프로그래밍 언어가 아닙니다. Kotlin은 이제 Android를 지배하고 대부분의 Android 개발자는 오래 전에 배를 뛰어 넘었습니다. 구글조차도 몇 년 전 오라클과의 실패로 인해 안드로이드용 사실상의 언어로서 자바를 포기했습니다. Java는 오래 전에 웹 개발 언어로서의 인기도 잃었습니다. 엔터프라이즈 개발에 관한 한 Java는 신뢰할 수 있고 안정적이기 때문에 여전히 대기업과 관련이 있습니다. 많은 신생 기업이 엔터프라이즈 소프트웨어의 첫 번째 선택으로 Java를 사용하지 않고 다른 대안을 사용하고 있습니다.

오해 3 : Java는 기본 언어입니다. 많은 최신 프로그래밍 언어는 Java의 원칙과 개념을 기반으로 구축되었으며 어떤 방식으로든 Java와 호환되도록 설계되었습니다. 즉, Java의 인기가 떨어지더라도 Java의 원칙과 개념은 계속 유효할 것입니다.

Java가 프로그래밍 여정을 시작하는 많은 사람들에게 기본 언어라는 것은 사실일 수 있지만 Java는 계속해서 매우 구식이고 융통성이 없다는 사실이 남아 있습니다. 게다가 다른 최신 프로그래밍 언어와 비교할 때 여전히 장황합니다. 즉, 특정 작업을 수행하려면 많은 코드가 필요합니다. 이로 인해 간결하고 우아한 코드를 작성하기가 더 어려워질 수 있으며 대규모 코드베이스를 유지 관리하는 데 더 많은 노력이 필요할 수 있습니다. 또한 Java가 정적으로 유형이 지정된다는 사실은 Java가 동적으로 유형이 지정되는 언어보다 더 엄격하고 덜 유연할 수 있음을 의미하므로 일부 개발자에게는 실망스러울 수 있습니다.

오해 4: Java는 주요 회사의 강력한 지원을 받고 있습니다. Java를 유지 관리하고 지원하는 회사인 Oracle은 언어에 대한 강한 의지를 가지고 있으며 개발 및 개선에 지속적으로 투자하고 있습니다. 또한 Google 및 Amazon을 비롯한 많은 주요 회사에서 제품 및 서비스에 Java를 사용합니다.

Oracle은 빠른 속도로 Java 시장 점유율을 경쟁자에게 빼앗기고 있습니다. 아래 그래프를 참조하십시오.

아래 차트는 Oracle이 여전히 시장에서 가장 큰 점유율을 차지하고 있음을 보여주지만 그 점유율은 절반 이상 감소했습니다. 2020년 Oracle은 "Java 시장의 약 75%"를 차지했지만 현재는 35% 미만입니다.

2021년 11월 Java 17이 출시된 이후 Eclipse Adoptium과 거의 비슷한 점유율을 기록하며 2위를 차지한 것은 New Relic의 수치에 따르면 Amazon입니다.

오해 5: Java는 학교와 대학에서 널리 가르칩니다. Java는 프로그래밍 개념을 가르치는 데 널리 사용되는 언어이며 학교 및 대학의 컴퓨터 과학 커리큘럼에서 자주 사용됩니다. 이는 Java를 배우고 그 기능에 익숙해지는 새로운 개발자의 꾸준한 흐름이 있음을 의미합니다.

이것은 크게 변화하고 있습니다. 소프트웨어 개발자를 꿈꾸는 젊은 대학생들은 빠르게 다른 프로그래밍 언어로 옮겨가고 있습니다. 이로 인해 이러한 다른 프로그래밍 언어에 대한 대중적인 수요로 인해 대학에서 대안을 찾는 일이 점점 더 많아지고 있습니다.

나는 이것이 논란의 여지가 있는 주제라는 것을 안다. 저는 여전히 Java를 소프트웨어 작성 방식을 혁신하고 따라야 할 다른 프로그래밍 언어에 대한 벤치마크를 만든 언어로 생각합니다. 불행하게도 언어의 소유권은 많은 금전적 이익을 남기지 않고 계속 개선할 의욕이 없는 회사의 손에 있습니다. Java는 곧 사라지지 않지만 몇 년 안에 관련성을 잃을 심각한 위험에 처해 있습니다.

반응형
반응형

자바 명명 규칙 - 클래스 / 메서드 / 변수

 

주로 쓰는 반의어 

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

반응형
반응형

#NumberformatException #if #문자 #1글자비교  #equals #MyBatis #JAVA #자바

ex 1)
<if test="stringValue == 'Y'">
</if>

ex 2)
<if test="condition.equals('Y')">
</if>


지금처럼 한 글자를 다이나믹쿼리 IF  안에서 비교할 때

java.lang.NumberFormatException: For input string: "Y" 에러 또는

비교가 되지 않을 수 있다. (인식 불가 혹은 오작동 가능성도 있음)
결론적으로 위 현상은 myBatis 문제는 아니고

OGNL(Object Graph Navigation Language) 의 문제이다.

OGNL 인터프리터에서는 위 구문의 'Y' 를 char 형으로 인식하고,
'YY' 나 "Y" 는 String으로 인식한다. (따옴표를 잘보자)
그래서  이와 같은 구문을 비교할 때 
 NumberFormat으로 비교를 시도하여 Exception이 발생한다.
이유는 java의 char형은 실제로 문자의 코드값을 저장하기 때문이다.

그래서 아래와 같은 형변환이 가능하다.

char y = 'Y';
int code = (int)y; // code에는 Y의 코드값인 89가 저장된다

그래서 위와 같은 상황을 피하기 위해서는 다음과 같은 해결책이 존재한다.

1. <if test='stringValue == "Y"'> – 쌍따옴표와 홑따옴표의 위치를 변경

2. <if test="stringValue == &quot;Y&quot;"> – 쌍따옴표를 HTML 코드로 변경

3. <if test="stringValue == 'Y'.toString()"> – toString() 함수를 사용해 String 형으로 변환

4. 함수 생성 (equals 함수를 새로 생성하고 가져다 쓰는 방법 )




http://cofs.tistory.com/97 에서 설명하고 있는
함수를 생성해서
사용방법을 참조하여 equals함수를 재정의

1번과 4번 방법을 추천한다.


출처: https://cofs.tistory.com/96 [CofS]

반응형
반응형

#java #오늘 #일자 #string #format #YYYYMMDD

오늘 날짜를 문자 YYYYMMDD  포맷으로 나오게 하는 방법

import java.util.Calendar;

import java.text.SimpleDateFormat;



public class testToday{

    public static void main(String args[]){

        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");

        Calendar c1 = Calendar.getInstance();

	 String strToday = sdf.format(c1.getTime());



        System.out.println("Today=" + strToday);

    }

}
반응형
반응형

자바-JSP-Spring 강좌

https://www.youtube.com/playlist?list=PLieE0qnqO2kTyzAlsvxzoulHVISvO8zA9

 

자바-JSP-Spring 강좌 - YouTube

 

www.youtube.com

 

반응형
반응형

우당도서관에 희망도서 신청 ㅎㅎ 


(전자정부 SW개발·운영자를 위한) 소프트웨어 개발보안 가이드
JPA 프로그래밍 = Java Persistence API : 스프링 데이터 예제 프로젝트로 배우는 전자정부 표준 데이터베이스 프레임 워크
(Spring, Hibernate, MyBatis를 활용한) All-in-one Java 애플리케이션 개발 : 전자정부 표준 프레임워크 핵심 기술 기반

정부관련 개발 프로젝트에 도움이 됩니다. 

반응형
반응형

path

 

WindowsWindows 10 및 Windows 8

  1. [검색]에서 시스템(제어판)을 검색하여 선택합니다.
  2. 고급 시스템 설정 링크를 누릅니다.
  3. 환경 변수를 누릅니다. 시스템 변수 섹션에서 PATH 환경 변수를 찾아 선택합니다. 편집을 누릅니다. PATH 환경 변수가 존재하지 않을 경우 새로 만들기를 누릅니다.
  4. 시스템 변수 편집(또는 새 시스템 변수) 창에서 PATH 환경 변수의 값을 지정합니다. 확인을 누릅니다. 확인을 눌러 나머지 창을 모두 닫습니다.
  5. 명령 프롬프트 창을 다시 열고 Java 코드를 실행합니다.
반응형
반응형

[python] Python vs Java @ PyCon Korea 2017

 

https://www.pycon.kr/2017/program/175

 

 

자바 개발자가 파이썬 개발을 배우면서 실무에 활용하고 집필을 하면서 겪었던 경험담 및 생각을 코드와 함께 풀어본다. 자바에 익숙한 사람이 파이썬을 배우고 있거나, 자바와 파이썬의 사이에서 고민을 했던 사람들에게 비교를 위한 기본 정보를 제공한다. 더 나아가 컴파일 언어와 스크립트 언어의 차이점, 개발 생산성을 측정할때 간과하는 컴파일 시간 및 순수 코딩 시간에 대한 통찰을 이끌 생각이다.

 

...

반응형

+ Recent posts