개발을 시작하시는 여러분, 정보가 너무 많고 배워야 할 것도 산더미라 어디서부터 시작해야 할지 막막하신가요? 내일배움캠프 수료생들이 4개월 동안 배운 엄선된 핵심 개념을 직접 정리해서 알려 드립니다. 공부하다 막히거나 헷갈리는 개념이 있다면 개념 콕으로 정리해보세요.
어노테이션(Annotation)이란?
어노테이션은 많은 프로그래밍 언어에서 사용되는 개념으로 코드가 특정 역할을 수행하게 하거나 추가적인 정보를 제공하는 역할을 합니다. 어노테이션을 적용하고 싶은 코드에 ‘@’ 로 시작하는 어노테이션을 명시하여 사용합니다. 각각의 어노테이션이 어떤 역할을 하는지에 중점을 두고 공부하고, 이를 어플리케이션에 적용하는 방법으로 실습해보세요.
@Entity @NoArgsConstructor public class Comment { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(nullable = false) private String contents; public Comment(String contents, User user, ToDoCard toDoCard) { this.contents = contents; this.user = user; this.toDoCard = toDoCard; } }
각각의 어노테이션들이 무슨 의미인지 파악하기보다 자주 보는 어노테이션의 역할과 의미를 익히는 것에 중점을 두면 됩니다. 즉, 자주 보는 ‘@’ 로 시작하는 간단한 단어가 코드에 어떤 정보를 주고, 어떤 일을 하게 만드는지에 집중하세요.
❓어노테이션의 뜻이 주석이라는데요? (Comment vs Annotation)
일반적으로 개발에서의 주석은 Comment를 의미하며 이는 코드 상에서 사람에게 하고 싶은 말을 적는 것입니다. Comment와 Annotation의 번역 내용이 동일해서 생길 수 있는 의문이며 Comment를 주석, Annotation은 문자 그대로 annotation으로 말하는 것이 일반적입니다.
이해를 위해 아래 예시를 보세요.
@Entity @NoArgsConstructor public class Comment { //Id 어노테이션은 고유 id를 부여하는 역할이군! -> 이게 주석, 아래 두개 줄은 annotation @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; //contents 변수가 null이면 큰일나겠군! @Column(nullable = false) private String contents; public Comment(String contents, User user, ToDoCard toDoCard) { this.contents = contents; this.user = user; this.toDoCard = toDoCard; } }
어노테이션의 종류
자주 보게 될 어노테이션의 종류와 예시를 꼽아서 소개해드리겠습니다.
1. 표준 어노테이션
표준(내장) 어노테이션은 자바에서 기본적으로 제공해주는 어노테이션으로 @Override, @Deprecated, @SuppressWarning 등이 있습니다.
아래 예시는 가장 대표적인 @Override 입니다. 부모클래스의 메서드를 오버라이딩하는 메서드에 쓰이며, 해당하는 메서드가 부모 클래스에 없을 시 컴파일 에러를 발생시킵니다.
class ParentClass { void hello() {} } class ChildClass extends ParentClass { @Override // hellu 메서드가 오버라이딩하는 메서드가 없기 때문에 오류 발생 void hellu() {} }
2. 메타 어노테이션
메타 어노테이션은 어노테이션에게 메타데이터(데이터를 위한 데이터)를 제공합니다. 어노테이션을 지원하기 위한 어노테이션이며 @Target, @Retention, @Inherited 등이 있습니다.
아래는 @Target입니다. @Target은 어노테이션이 적용될 수 있는 코드의 요소 범위를 제한합니다. 위 예시의 의미는 MyMethodAnnotation이란 어노테이션이 메소드 형식에서만 사용될 수 있음을 의미합니다.
@Target(ElementType.METHOD) public @interface MyMethodAnnotation { // 어노테이션 정의 }
3. 사용자 정의 어노테이션
어노테이션을 사용자가 직접 만드는 것도 가능합니다. 간단한 예시와 함께 살펴보겠습니다. 아래의 예시는 어노테이션을 어떻게 만드는지 보여주는 예시일 뿐, 실제로는 다르게 사용합니다. 어떻게 만드는지에 집중해서 아래 예시를 봐주세요.
어노테이션 선언하는 부분입니다. 이 어노테이션은 메소드에만 사용이 가능하고 런타임에만 동작합니다.
@Target(ElementType.METHOD) //이 어노테이션은 메소드에 적용할 것 @Retention(RetentionPolicy.RUNTIME) //런타임에 동작하게끔 public @interface MyMethodAnnotation { String value() default ""; }
이 어노테이션은 메소드에만 사용이 가능하고 런타임에만 동작합니다.
어노테이션 사용하는 부분입니다. value값을 따로 명시해주지 않으면 위위 코드에서 default로 두었던 “”가 value 값이 됩니다.
class MyClass { @MyMethodAnnotation(value = "My Annotation") public void run() { System.out.println("Hello"); } }
어노테이션에 저장된 value를 읽어올 수 있습니다.
public class MyMain { public static void main(String[] args) { Method[] methodList = MyClass.class.getMethods(); for (Method method : methodList) { if(method.isAnnotationPresent(MyMethodAnnotation.class)) { MyMethodAnnotation annotation=method.getDeclaredAnnotation(MyMethodAnnotation.class); System.out.println(annotation.value()); } } } }
4. 프레임워크와 라이브러리에서 제공하는 어노테이션(By Spring 등등)
가장 많이 접하게 될 어노테이션들입니다. @Controller, @Component, @Bean, @Autowired, @SpringBootApplication, @Transactional 등이 대표적입니다.
예시로 @Component를 사용해보았습니다. @Component는 개발자가 직접 작성한 Class를 Bean으로 등록해주는 어노테이션입니다.
@Component public class IWannaBeABean { public IWannaBeABean() { System.out.println("빈에 등록되었습니다."); } }
그러나 각각의 어노테이션이 어떤 역할을 하는 지만 알아도 어플리케이션 제작엔 큰 문제가 없으니 차근차근 배워나가셨으면 좋겠습니다.
내일배움캠프는 개발에 필요한 핵심만 배웁니다
지금까지 꼭 필요한 개발 지식에 대해 알아보았습니다. 내일배움캠프에서는 전문가들이 선별한 핵심 개발 지식으로 개발 공부도, 취업도 보다 효율적으로 할 수 있는데요. 국내 유수의 IT기업 출신 튜터님들과 실습 위주의 독보적인 커리큘럼으로 개발자 취업을 체계적으로 준비해보세요. 내일배움캠프 4개월, 여러분 인생의 가장 큰 터닝 포인트입니다.
CREDIT
글 | 장동하 내일배움캠프 수료생
편집 | 정효재 팀스파르타 에디터
취업 준비, 어디서부터 시작해야 할지 모르겠다면?
🧐비전공자인데 IT 업계 취업할 수 있을까?
😟프로젝트 경험이 부족한데, 어떻게 준비해야 할까?
🥺IT 기업으로 이직하고 싶은데 뭐부터 시작해야 할까?
이런 고민을 하고 있다면, 내일배움캠프의 IT 취업 컨설팅을 받아보세요.
취업 코칭 전문가들이 여러분의 고민을 해결해 드립니다.
다음 링크에 이메일을 입력하시면 메일로 1:1 커리어 상담권과 취준 자료집을 보내드릴게요.
Share article
Subscribe to our newsletter